Exemplo n.º 1
0
            public static         FrequencyRecord[] GetFrequencyDictionary(string text)
            {
                var result      = new List <FrequencyRecord>();
                var huffmanTree = new HuffmanTree();

                huffmanTree.Build(text);

                _entropy = 0;

                for (int i = 0; i < huffmanTree.Frequencies.Count; i++)
                {
                    var record = new FrequencyRecord();
                    record._char = huffmanTree.Frequencies.ElementAt(i).Key;

                    record._freq        = huffmanTree.Frequencies.ElementAt(i).Value;
                    record._freqPercent = Math.Round(record._freq / ((float)text.Length), 2);
                    foreach (var item in huffmanTree.EncodeChar(record._char))
                    {
                        record._code += (item ? 1 : 0);
                    }
                    result.Add(record);
                    _entropy += Math.Round((-(result[i]._freqPercent * Math.Log(result[i]._freqPercent, 2))), 2);
                }

                BitArray encoded = huffmanTree.Encode(text);

                Console.Write("Encoded: ");
                var str = "";

                foreach (bool bit in encoded)
                {
                    str += (bit ? 1 : 0);
                }
                _avg    = Math.Round((float)str.Length / (float)text.Length, 2);
                _lenght = str.Length;
                return(result.ToArray());
            }