Пример #1
0
        private void buildTree(ref minHeap temp)
        {
            node temp1, temp2, newNode;

            while (temp.count() > 1)
            {
                temp1   = temp.extractMin();
                temp2   = temp.extractMin();
                newNode = new node(0, temp1.frequency + temp2.frequency, temp2, temp1); // 2(N-1)
                temp.add(newNode);
            }
        }
Пример #2
0
 public Dictionary <byte, string> getBlueCode()
 {
     for (int i = 0; i < 256; i++)
     {
         if (blueFrequencies[i] != 0)
         {
             node newNode = new node((byte)i, blueFrequencies[i]);
             blueHeap.add(newNode);
         }
     }
     buildTree(ref blueHeap);
     getBinaryCode(blueHeap.getRoot(), "", ref blueCode, ref blueTree);
     return(blueCode);
 }
Пример #3
0
 public Dictionary <byte, string> getGreenCode()
 {
     for (int i = 0; i < 256; i++)
     {
         if (greenFrequencies[i] != 0)
         {
             node newNode = new node((byte)i, greenFrequencies[i]);
             greenHeap.add(newNode);
         }
     }
     buildTree(ref greenHeap);
     getBinaryCode(greenHeap.getRoot(), "", ref greenCode, ref greenTree);
     return(greenCode);
 }
Пример #4
0
        public huffman(RGBPixel[,] arr)
        {
            Dictionary <byte, int> temp1 = new Dictionary <byte, int>();
            Dictionary <byte, int> temp2 = new Dictionary <byte, int>();
            Dictionary <byte, int> temp3 = new Dictionary <byte, int>();

            computeFrequencies(arr, ref temp1, ref temp2, ref temp3);


            redFrequency   = new minHeap();
            blueFrequency  = new minHeap();
            greenFrequency = new minHeap();
            foreach (var item in temp1)
            {
                node newNode = new node(item.Key, item.Value);
                redFrequency.add(newNode);
            }
            foreach (var item in temp2)
            {
                node newNode = new node(item.Key, item.Value);
                blueFrequency.add(newNode);
            }
            foreach (var item in temp3)
            {
                node newNode = new node(item.Key, item.Value);
                greenFrequency.add(newNode);
            }
            buildTree(ref redFrequency);
            buildTree(ref blueFrequency);
            buildTree(ref greenFrequency);

            redCode   = new Dictionary <byte, string>();
            blueCode  = new Dictionary <byte, string>();
            greenCode = new Dictionary <byte, string>();
            getBinaryCode(redFrequency.getRoot(), "", ref redCode);
            getBinaryCode(blueFrequency.getRoot(), "", ref blueCode);
            getBinaryCode(greenFrequency.getRoot(), "", ref greenCode);
        }