<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RodneyX

      博客園 首頁 新隨筆 聯(lián)系 訂閱 管理

      這個就不談原理了,很簡單的,按課本上寫的哈夫曼樹構(gòu)造的算法描述直接寫就是了。這里采用常規(guī)操作,用小頂堆來加快構(gòu)造速度,見http://www.rzrgm.cn/RodneyTang/p/19013567

      代碼如下

      /*****file:HuffmanTree.h*****/
      #ifndef HUFFMANTREE_H
      #define HUFFMANTREE_H
      #include<stdlib.h>
      #define ASCIInum 128
      #define INVALID 128
      
      typedef struct HuffmanNode {
          char data;
          int weight;
          struct HuffmanNode *left, *right;
      }HuffmanNode;
      
      typedef struct HuffmanTree {
          HuffmanNode *root;
      }HuffmanTree;
      
      //only support ASCII
      double ASCII_probability[ASCIInum];
      //void compute_probability()
      void _adjust_minHeap_HuffmanTree(HuffmanNode **nodes_pointers, int pos, int length);
      void create_HuffmanTree(HuffmanTree &HT);
      
      #endif
      
      
      /*****file:HuffmanTree.cpp*****/
      #include "HuffmanTree.h"
      
      void _adjust_minHeap_HuffmanTree(HuffmanNode **nodes_pointers, int pos, int length) {
          int i = pos, k;
          HuffmanNode *sift = nodes_pointers[pos];
          while(true) {
              k = i * 2 + 1;
              if(k < length && k + 1 < length && nodes_pointers[k]->weight > nodes_pointers[k + 1]->weight)
                  ++k;
              if(k < length && sift->weight > nodes_pointers[k]->weight) {
                  nodes_pointers[i] = nodes_pointers[k];
                  i = k;
              }
              else {
                  nodes_pointers[i] = sift;
                  break;
              }
          }
      }
      
      void create_HuffmanTree(HuffmanTree &HT) {
          HuffmanNode **nodes_pointers = (HuffmanNode**)malloc(sizeof(HuffmanNode*) * ASCIInum);
          for(int i = 0; i < ASCIInum; ++i) {
              nodes_pointers[i] = (HuffmanNode*)malloc(sizeof(HuffmanNode));
              nodes_pointers[i]->data = i;
              nodes_pointers[i]->weight = ASCII_probability[i];
              nodes_pointers[i]->left = nodes_pointers[i]->right = nullptr;
          }
      
          //create minHeap
          for(int i = (ASCIInum - 1) / 2; i >= 0; --i)
              _adjust_minHeap_HuffmanTree(nodes_pointers, i, ASCIInum);
          
          //create Huffman Tree
          HuffmanNode *p = nullptr, *lchild = nullptr, *rchild = nullptr;
          for(int i = 0; i < ASCIInum - 1; ++i) {
              lchild = nodes_pointers[0];
              nodes_pointers[0] = nodes_pointers[ASCIInum - 1 - i];
              _adjust_minHeap_HuffmanTree(nodes_pointers, 0, ASCIInum - 1 - i);
      
              rchild = nodes_pointers[0];
      
              p = (HuffmanNode*)malloc(sizeof(HuffmanNode));
              p->weight = lchild->weight + rchild->weight;
              p->data = INVALID;
              p->left = lchild;
              p->right = rchild;
      
              nodes_pointers[0] = p;
              _adjust_minHeap_HuffmanTree(nodes_pointers, 0, ASCIInum - 1 - i);
          }
          HT.root = nodes_pointers[0];
          free(nodes_pointers);
      }
      
      posted on 2025-08-12 16:35  RodneyX  閱讀(8)  評論(0)    收藏  舉報
      主站蜘蛛池模板: jk白丝喷浆| 97se亚洲国产综合自在线观看 | 日韩中文字幕一区二区不卡 | 日韩高清国产中文字幕| 四虎国产成人永久精品免费| 日本一区不卡高清更新二区| 亚洲三区在线观看无套内射| 亚洲精品综合久久国产二区 | 女子spa高潮呻吟抽搐| 亚洲成av人片在www鸭子| 99视频精品全部免费 在线| 国产不卡一区二区在线| 国产永久免费高清在线观看| 国产久9视频这里只有精品| 松桃| 十八禁国产精品一区二区| 久久人与动人物a级毛片| 国产又粗又猛又爽又黄| 午夜精品久久久久久久爽| 久久香蕉国产亚洲av麻豆| 国产人妻人伦精品婷婷| 亚洲精品美女一区二区| 国产蜜臀一区二区三区四区 | 永仁县| 久久AV中文综合一区二区| 欧美嫩交一区二区三区| 滕州市| 国产在线线精品宅男网址| 国产精品爽黄69天堂A| 国产第一页浮力影院入口| 成全影视大全在线观看| 亚洲 自拍 另类 欧美 综合| 男女性杂交内射女bbwxz| 国产一区二区三区美女| 在线中文字幕第一页| 深夜释放自己在线观看| 国产精品 无码专区| 青柠影院免费观看高清电视剧丁香| XXXXXHD亚洲日本HD| 日韩精品福利一区二区三区| 麻豆a级片|