private static Tree Huffman(string msg) { /* Построяване на таблица на честотите на срещане */ Dictionary<char, int> freqs = msg.GroupBy(ch => ch) .ToDictionary(g => g.Key, g => g.Count()); var forest = new HeapForest(); /* За всеки символ с ненулева честота на срещане се създава тривиално дърво */ foreach (var ch in freqs.Keys.OrderBy(ch => ch)) { forest.Add(new Tree { Char = ch, Weight = freqs[ch] }); } while (forest.Count > 1) { Tree minTree1 = forest.GetMin(); /* Намиране на двата най-редки върха */ Tree minTree2 = forest.GetMin(); /* Създаване на нов възел - обединение на двата най-редки */ var tree = new Tree { Left = minTree1, Right = minTree2, Weight = minTree1.Weight + minTree2.Weight }; forest.Add(tree); } return forest.GetMin(); }
private static Tree Huffman(string msg) { /* Построяване на таблица на честотите на срещане */ Dictionary <char, int> freqs = msg.GroupBy(ch => ch) .ToDictionary(g => g.Key, g => g.Count()); var forest = new HeapForest(); /* За всеки символ с ненулева честота на срещане се създава тривиално дърво */ foreach (var ch in freqs.Keys.OrderBy(ch => ch)) { forest.Add(new Tree { Char = ch, Weight = freqs[ch] }); } while (forest.Count > 1) { Tree minTree1 = forest.GetMin(); /* Намиране на двата най-редки върха */ Tree minTree2 = forest.GetMin(); /* Създаване на нов възел - обединение на двата най-редки */ var tree = new Tree { Left = minTree1, Right = minTree2, Weight = minTree1.Weight + minTree2.Weight }; forest.Add(tree); } return(forest.GetMin()); }