Файл: Кодирование данных, комбинаторика, системы счисления.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 377

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


if st.count('ьу')==0 and st.count('ьа')==0:

n+=1

print(n)

  1. Ответ: 60.

Ещё пример задания:


Р-08. Вася составляет 4-буквенные коды из букв У, Л, Е, Й. Каждую букву нужно использовать ровно 1 раз, при этом код не может начинаться с буквы Й и не может содержать сочетания ЕУ. Сколько различных кодов может составить Вася?

Решение:

  1. проще всего сначала найти общее количество возможных слов, а затем вычесть из него количество слов, в которых есть сочетание ЕУ

  2. первой буквой не может быть Й, поэтому осталось только 3 возможных первых буквы

  3. предположим, что первую букву выбрали, тогда вторую выбираем из оставшихся трёх

  4. при выборе третьей буквы у нас только 2 варианта, а последняя буква – та, которая осталась последней невыбранной:

    3

    3

    2

    1

  5. в итоге общее количество возможных слов равно 3  3  2  1 = 18

  6. теперь определим, сколько слов содержат сочетание ЕУ; нужно рассмотреть все возможные позиции, где может стоять пара ЕУ

  7. пусть слово начинается с ЕУ, тогда следующую букву можно выбрать двумя способами, а последнюю – только одним, так что количество вариантов равно 2:

    1(Е)

    1(У)

    2

    1

  8. пусть пара ЕУ – это вторая и третья буквы; тогда на первом месте может стоять только буква Л (но не Й), а на последнем – Й, получаем еще один вариант:

    1(Л)

    1(Е)

    1(У)

    1(Й)

  9. сдвиг пары ЕУ в конец слова даёт ещё одну комбинацию

    1(Л)

    1(Й)

    1(Е)

    1(У)

  10. таким образом, из 18 слов четыре (2 + 1 + 1) содержат ЕУ

  11. Ответ: 14.

Решение (с помощью программы, С.С. Поляков):

  1. для построения множества всевозможных слов можно использовать функцию product из модуля itertools; затем остаётся выбрать и пересчитать подходящие слова:


from itertools import product

p = product('УЛЕЙ',repeat=4)

s = map(lambda x: ''.join(x), p)

n = 0

for x in s:

if (x.count('У') == 1) and (x.count('Л') == 1) and \

(x.count('Е') == 1) and (x.count('Й') == 1) \

and (x[0] != 'Й') and (x.find('ЕУ')==-1):

n += 1

print(n)

  1. Ответ: 14.

Решение (с помощью программы, Б.С. Михлин):

  1. Можно использовать перебор всех вариантов во вложенном цикле. Когда слово построено, проверяем, подходит ли оно по условию.

n=0

s='улей'

for a in s[:3]: # s без 'й'

for b in s:

for c in s:

for d in s:

st=a+b+c+d # полученный 4-буквенный код

for x in s:

if st.count(x)!=1:

break

else: # если все символы встретились ровно один раз

if st.count('еу')==0: # 'еу' - русские буквы

n+=1

print(n)

  1. Ответ: 14.

Ещё пример задания:


Р-07. Вася составляет 3-буквенные слова, в которых есть только буквы В, Е, С, Н , А, причём буква А используется в каждом слове хотя бы 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Вася?

Решение (способ 1):

  1. буква А может стоять на одном из трёх мест: А**, *А*, **А, где * обозначает любой из пяти символов

  2. в каждом случае в остальных двух позициях может быть любая из пяти букв

  3. для шаблона А** получаем (перемножая количество вариантов для каждой позиции)

1 · 5 · 5 = 25 слов

  1. для шаблона *А* тоже получим 25 слов, но нужно учесть, что все слова, в который первая буква А мы уже подсчитали, поэтому считаем только слова, где на первом место стоит какая-то другая буква (В, Е, С или Н)

  2. отсюда находим, что шаблон *А* добавляет 4 · 1 · 5 = 20 новых слов

  3. рассматривая шаблон **А, не учитываем уже подсчитанные слова, в которых буква А есть на первом или втором местах, количество новых слов – 4 · 4 · 1 = 16

  4. всего получается 25 + 20 + 16 = 61 слово

  5. Ответ: 61.


Решение (способ 2):

  1. количество слов с буквой А можно вычислить как разность между количеством всех возможных слов и количеством слов, в которых нет буквы А

  2. количество всех слов 5 · 5 · 5 = 53 = 125 (на любой из 3-х позиций может стоять любая из 5 букв)

  3. количество слов, в которых нет буквы А равно 4 · 4 · 4 = 43 = 64 (на любой из 3-х позиций может стоять любая из 4 букв, кроме А)

  4. получается 125 – 64 = 61 слово, в котором есть буква А (она или несколько)

  5. Ответ: 61.

Решение (с помощью программы, С.С. Поляков):

  1. для построения множества всевозможных слов можно использовать функцию product из модуля itertools; затем остаётся выбрать и пересчитать подходящие слова:

from itertools import product

p = product('ВЕСНА',repeat=3)

s = map(lambda x: ''.join(x), p)

n = 0

for x in s:

if (x.count('А') >= 1):

n += 1

print(n)

  1. Ответ: 61.

Решение (с помощью программы, Б.С. Михлин):

  1. можно использовать «метод грубой силы» – перебор всех вариантов:

n=0

s='весна'

for a in s:

for b in s:

for c in s:

if (a+b+c).count('а')>=1: # буква 'а' (русская) должна

# встречаться хотя бы один раз

n+=1

print(n)

  1. Ответ: 61.

Ещё пример задания:


Р-06. Вася составляет 5-буквенные слова, в которых есть только буквы С, Л, О, Н, причём буква С используется в каждом слове ровно 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Вася?

Решение:

  1. буква С может стоять на одном из пяти мест: С****, *С***, **С**, ***С* и ****С, где * обозначает любой из оставшихся трёх символов

  2. в каждом случае в остальных четырёх позициях может быть любая из трёх букв Л, О, Н, поэтому при заданном расположении буквы С имеем 34 = 81 вариант

  3. всего вариантов 5 · 81 = 405.

  4. Ответ: 405.

Решение (с помощью программы, С.С. Поляков):

  1. для построения множества всевозможных слов можно использовать функцию product из модуля itertools; затем остаётся выбрать и пересчитать подходящие слова:

from itertools import product

p = product('СЛОН',repeat=5)

n = 0

for x in p:

if x.count('С') == 1:

n += 1

print(n)

  1. Ответ: 405.


Решение (с помощью программы, Б.С. Михлин):

  1. можно использовать «метод грубой силы» – перебор всех вариантов:

n=0

s='слон'

for a in s:

for b in s:

for c in s:

for d in s:

for e in s:

if (a+b+c+d+e).count('с')==1: # буква 'c' (русская)

# должна встречаться один раз

n+=1

print(n)

  1. Ответ: 405.

Ещё пример задания:


Р-05. Сколько существует различных символьных последовательностей длины 5 в четырёхбуквенном алфавите {A, C, G, T}, которые содержат ровно две буквы A?

Решение (вариант 1, перебор):

  1. рассмотрим различные варианты слов из 5 букв, которые содержат две буквы А и начинаются с А:

АА*** А*А** А**А* А***А

Здесь звёздочка обозначает любой символ из набора {C, G, T}, то есть один из трёх символов.

  1. итак, в каждом шаблоне есть 3 позиции, каждую из которых можно заполнить тремя способами, поэтому общее число комбинаций (для каждого шаблона!) равно 33 = 27

  2. всего 4 шаблона, они дают 4 · 27 = 108 комбинаций

  3. теперь рассматриваем шаблоны, где первая по счёту буква А стоит на второй позиции, их всего три: