private void button1_Click(object sender, EventArgs e) { HaffmanGrid.DataSource = FrequencyRecord.GetFrequencyDictionary(InputMessage.Text); Entropy.Text = "Entropy: " + FrequencyRecord.Entropy; Avg.Text = "Avg bit/character: " + FrequencyRecord.Avg; EMLenght.Text = "Encoded message lenght: " + FrequencyRecord.Lenght; }
private void button2_Click(object sender, EventArgs e) { EncodedMessage.Text = ""; BinaryString.Text = ""; ASCIIGrid.DataSource = ASCII.GetASCIIs(FrequencyRecord.GetFrequencyDictionary(InputMessage2.Text)); foreach (var ch in InputMessage2.Text) { if (Convert.ToString(ch, 2).Length == 6) { BinaryString.Text += "00" + Convert.ToString(Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.ANSICodePage).GetBytes(new char[] { ch })[0], 2); } else { BinaryString.Text += Convert.ToString(Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.ANSICodePage).GetBytes(new char[] { ch })[0], 2); } } HamGrid.DataSource = Hamm.GetHammings(SplitString(BinaryString.Text, 4)); foreach (var item in Hamm.GetHammings(SplitString(BinaryString.Text, 4))) { EncodedMessage.Text += item.Code; } }
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()); }