示例#1
0
        public void GenerateHuffmanTreev2(WordFreqGenerator wordFreq)
        {
            /*Huffman (c)
            n = |c|
            Q = c
            for  i =1  to   n-1
                do   z = Allocate-Node ()
                         x = left[z] = EXTRACT_MIN(Q)
                         y = right[z] = EXTRACT_MIN(Q)
                        f[z] = f[x] + f[y]
                        INSERT (Q, z)
            return EXTRACT_MIN(Q)
            */
            int n = wordFreq.WordStatsDict.Count();
            PQueue Q = new PQueue();
            BinTreeNode node1;
            BinTreeNode node2;
            BinTreeNode node3;

            //Add each leaf to priority Q
            foreach(KeyValuePair<char, int> kvp in wordFreq.WordStatsDict)
            {
                node1 = new BinTreeNode(kvp);
                Q.Enqueue(node1);
            }
            for (int i = 1; i < n; i++)
            {
                node1 = Q.Dequeue();
                node2 = Q.Dequeue();
                node3 = MergeNodes(node1, node2);
                Q.Enqueue(node3);
            }
            root = Q.Dequeue();
        }
示例#2
0
 static void Main(string[] args)
 {
     WordFreqGenerator freqgen = new WordFreqGenerator();
     //freqgen.PopulateDictionary("aabbccaabacdefabce");
     //freqgen.PrintDictionary();
     
     freqgen.WordStatsDict.Add('a', 45000);
     freqgen.WordStatsDict.Add('b', 13000);
     freqgen.WordStatsDict.Add('c', 12000);
     freqgen.WordStatsDict.Add('d', 16000);
     freqgen.WordStatsDict.Add('e', 9000);
     freqgen.WordStatsDict.Add('f', 5000);
     
     HuffmanTree tree = new HuffmanTree();
     tree.GenerateHuffmanTreev2(freqgen);
     tree.TraverseTreeBFSAndGenCode(tree.root);
    // Console.WriteLine("Encoded string for {0} is {1}", "123456", tree.EncodeString("123456"));
    // Console.WriteLine("Decoded string for {0} is {1}", "011101100010100001", tree.DecodeString("011101100010100001"));
     Console.ReadLine();
 }