@@ -25,19 +25,39 @@ public static IAlgmEncoded<List<LZ78CodeBlock>> Encode(string source)
2525 }
2626 else
2727 {
28- EncodedString . Add ( new LZ78CodeBlock ( Dictionary [ Buffer ] , source [ i ] ) ) ; // добавляем пару в ответ
28+ var codeblock = new LZ78CodeBlock ( Dictionary [ Buffer ] , source [ i ] ) ;
29+ //char c = Buffer.Length == 0 ? source[i] : Buffer[0];
30+ //Console.WriteLine(c + " " + codeblock);
31+ EncodedString . Add ( codeblock ) ; // добавляем пару в ответ
2932 Dictionary . Add ( Buffer + source [ i ] , Dictionary . Count ) ; // добавляем слово в словарь
3033 Buffer = string . Empty ;
3134 }
3235 }
3336 // если буффер не пуст - этот код уже был, нужно его добавить в конец словаря
3437 if ( ! Buffer . Equals ( string . Empty ) )
3538 {
36- var last_ch = Buffer . Last ( ) ; // берем последний символ буффера, как "новый" символ
37- Buffer = Buffer . Remove ( Buffer . Length - 1 ) ; // удаляем последний символ из буфера
38- EncodedString . Add ( new LZ78CodeBlock ( Dictionary [ Buffer ] , last_ch ) ) ; // добавляем пару в ответ
39+ if ( Dictionary . ContainsKey ( Buffer ) )
40+ {
41+ var codeblock = new LZ78CodeBlock ( Dictionary [ Buffer ] , '$' ) ;
42+ //Console.WriteLine('$' + " " + codeblock);
43+ EncodedString . Add ( codeblock ) ;
44+ }
45+ else
46+ {
47+ var last_ch = Buffer . Last ( ) ; // берем последний символ буффера, как "новый" символ
48+ Buffer = Buffer . Remove ( Buffer . Length - 1 ) ; // удаляем последний символ из буфера
49+
50+ var codeblock = new LZ78CodeBlock ( Dictionary [ Buffer ] , last_ch ) ;
51+ //Console.WriteLine(Buffer[0] + " " + codeblock);
52+ EncodedString . Add ( codeblock ) ; // добавляем пару в ответ
53+ }
3954 }
4055
56+ //foreach (var item in Dictionary)
57+ //{
58+ // Console.WriteLine(item.Key + " " + item.Value);
59+ //}
60+
4161 return new EncodedMessage < List < LZ78CodeBlock > > ( EncodedString , CalculateCompressionRatio ( source , EncodedString ) ) ;
4262 }
4363
0 commit comments