jednoznaczna dekodowalnosc

0

witam

pisze program który ma przeprowadzic test na jednoznaczną dekodowalność kodu.

Rozważmy następujący kod: a1 ? 0, a2 ? 01, a3 ? 11. Najpierw podamy listę słów kodowych:
{0, 01, 11}
Słowo kodowe 0 jest prefiksem słowa kodowego 01. Wiszący sufiks równy jest 1. Na liście nie ma innych par, w których jeden element pary jest prefiksem drugiego. Powiększamy listę dołączając do niej wiszący sufiks:
{0, 01, 11, 1}
Porównując elementy tej listy, stwierdzamy, że 0 jest prefiksem 01 z wiszącym sufiksem l. Lecz l włączyliśmy wcześniej do naszej listy. Element l jest również prefiksem 11. Uzyskujemy wiszący sufiks 1, który znajduje się już na liście. Ponieważ nie mamy innych par, które tworzyłyby wiszące sufiksy, wiec listy nie możemy już powiększyć. Zatem ten kod jest jednoznacznie dekodowalny.

natomiast

kod składający się z następujących słów kodowych:
{0, 01, 10}
Słowo kodowe 0 jest prefiksem słowa kodowego 01. Wiszący sufiks jest równy 1. Jest to jedyna para, w której jeden element jest prefiksem drugiego. Dodając do listy słów kodowych element l, uzyskujemy nową listę:
{0, 01, 10, 1}
Element l jest prefiksem 10. Wiszący sufiks, który tworzy ta para, jest równy 0, które jest słowem kodowym symbolu a1. Wobec tego kod nie jest jednoznacznie dekodowalny

proszę o wskazówki

0

for k:=1 to memo1.Lines.Count do
begin
a:=memo1.Lines[i];
b:=memo1.Lines[j];
if pos(a,b)<> 0 then
begin
delete(b,pos(a,b),length(a));
memo2.Lines.Add(b);
end;
i:=i+1;
j:=j+1;

dla pierwszego przypadku, działa bezproblemu, lecz jesli chodzi o drugi to juz nie
[sciana]

1 użytkowników online, w tym zalogowanych: 0, gości: 1