Из условия Фано следует, что в префиксном неравномерном двоичном коде, предусматривающем однозначное декодирование, ни одно кодовое слово не может быть началом другого.
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 0 и 00 отпадают сразу, т.к. это начала буквы Б.
Если предположить, что один из кодов равен 1, и что нам нужны кратчайшие коды, значит оставшиеся коды могут быть только 01 и 011.
Если предположить, что коды двузначны, тогда кодами могут быть 01, 10 и 11.
В первом случае суммарная длина кодов равна 1+2+3+3 = 9, во втором случае - 2+2+2+3 = 9.
Оба варианта подходят, кратчайшая суммарная длина - 9
Var f:file of char; C:char; k,s:integer; Begin Assign(f,'file.txt'); Reset(f); k:=0; s:=1; Write('Найденные числа:'); Repeat Read(f,C); if ('0'<=C)and(C<='9') then Begin k:=k+1; Write(' '); While ('0'<=C)and(C<='9')and Not Eof(f) do Begin Write(C); Read(f,C); if C=#13 then s:=s+1; End; End; Until Eof(f); Close(f); WriteLn; WriteLn('Их количество: ',k); WriteLn('Количество строк в файле: ',s); End.
Результат работы программы:
Найденные числа: 1 2 3 7 8 9 11 12 3 2 1 8 1 2 3 4 Их количество: 16 Количество строк в файле: 5
Чтобы программа работала данный файл должен находиться в одной папке с программой:
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 0 и 00 отпадают сразу, т.к. это начала буквы Б.
Если предположить, что один из кодов равен 1, и что нам нужны кратчайшие коды, значит оставшиеся коды могут быть только 01 и 011.
Если предположить, что коды двузначны, тогда кодами могут быть 01, 10 и 11.
В первом случае суммарная длина кодов равна 1+2+3+3 = 9, во втором случае - 2+2+2+3 = 9.
Оба варианта подходят, кратчайшая суммарная длина - 9