Задания
Версия для печати и копирования в MS Word
Тип 4 № 81788
i

По ка­на­лу связи пе­ре­да­ют­ся со­об­ще­ния, со­дер­жа­щие толь­ко буквы А, Б, В, Г, Д, Е, Ж и З. Для пе­ре­да­чи ис­поль­зу­ет­ся дво­ич­ный код, удо­вле­тво­ря­ю­щий усло­вию Фано. Ко­до­вые слова для не­ко­то­рых букв из­вест­ны: Е  — 10, Ж  — 010, З  — 011, Д  —11. Какое наи­мень­шее ко­ли­че­ство дво­ич­ных зна­ков тре­бу­ет­ся для ко­ди­ро­ва­ния остав­ших­ся букв? В от­ве­те за­пи­ши­те сум­мар­ную длину ко­до­вых слов для букв: А, Б, В, Г.

 

При­ме­ча­ние. Усло­вие Фано озна­ча­ет, что ни­ка­кое ко­до­вое слово не яв­ля­ет­ся на­ча­лом дру­го­го ко­до­во­го слова. Это обес­пе­чи­ва­ет воз­мож­ность од­но­знач­ной рас­шиф­ров­ки за­ко­ди­ро­ван­ных со­об­ще­ний.

Спрятать решение

Ре­ше­ние.

Пе­ре­чис­лим воз­мож­ные коды в по­ряд­ке воз­рас­та­ния длины.

0  — нель­зя, так как ис­поль­зо­ва­ны коды 010 и 011.

1  — нель­зя, так как ис­поль­зо­ва­ны коды 11 и 10.

00  — нель­зя, так как не оста­нет­ся сво­бод­ных кодов под остав­ши­е­ся буквы.

01  — нель­зя, так как ис­поль­зо­ва­ны коды 010 и 011.

10  — нель­зя, это Е.

11  — нель­зя, это Д.

Так как оста­лось за­ко­ди­ро­вать 4 буквы можно ис­поль­зо­вать коды 0000, 0001, 0010, 0011. Тогда наи­мень­шее ко­ли­че­ство дво­ич­ных зна­ков тре­бу­ю­щих­ся для ко­ди­ро­ва­ния остав­ших­ся букв 4 + 4 + 4 + 4  =  16.

 

При­ме­ча­ние. Если ис­поль­зо­вать код 000 или 001 для одной из букв, сум­мар­ное ко­ли­че­ство дво­ич­ных зна­ков для остав­ших­ся букв будет боль­ше.

 

Ответ: 16.

 

При­ведём ре­ше­ние Алек­сандра Коз­ло­ва на языке Python.

def bin_cod(leng):

return [bin(i)[2:].zfill(leng) for i in range(2 ** leng)]

# Про­вер­ка усло­вия Фано

def fano(codes):

for code in codes:

for other_code in codes:

if code != other_code and other_code.startswith(code):

return False

return True

 

def itog():

cod = ['10', '010', '011', '11'] # Из­вест­ные коды

bukv = 8 # Всего букв

ostalos = bukv - len(cod) # Остав­ши­е­ся буквы

min_len = 0

for leng in range(1, 5): # Про­ве­ря­ем длины кодов от 1 до 4

codes = bin_cod(leng)

doctupnie = [code for code in codes if code not in cod]

if len(doctupnie) >= ostalos: # Про­ве­ря­ем на вы­пол­не­ние усло­вия Фано

if fano(doctupnie)> 0:

min_len = ostalos * leng

return min_len

 

print("Сум­мар­ная длина ко­до­вых слов для букв А, Б, В, Г:", itog())

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2026 по ин­фор­ма­ти­ке