Huffman树的创建
来源:互联网 发布:php程序员简历项目经验 编辑:程序博客网 时间:2024/05/18 03:10
Huffman树,又称最优树,是一类带权路径长度最短的树。
在解决某些判定问题时,Huffman树可
#include <iostream>#include <cstring>using namespace std;#define MAXBIT 20#define MAXLEAF 30#define MAXNODE 59typedef struct{int bit[MAXBIT];int start;} HCodeType; typedef struct{int weight;int parent;int lchild;int rchild;} HNodeType;void HuffmanTree(HNodeType HuffNode[MAXNODE], int n){/* i、j: 循环变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值,x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/int i, j, m1, m2, x1, x2;for (i = 0; i<2 * n - 1; i++){HuffNode[i].weight = 0;HuffNode[i].parent = -1;HuffNode[i].lchild = -1;HuffNode[i].rchild = -1; }cout << "依次输入叶子结点的权值:"<<endl;for (i = 0; i<n; i++){cin>>HuffNode[i].weight;}for (i = 0; i<n - 1; i++){m1 = m2 = 32767; x1 = x2 = 0;for (j = 0; j<n + i; j++){if (HuffNode[j].weight < m1 && HuffNode[j].parent == -1){m2 = m1;x2 = x1;m1 = HuffNode[j].weight;x1 = j;}else if (HuffNode[j].weight < m2 && HuffNode[j].parent == -1){m2 = HuffNode[j].weight;x2 = j;}} HuffNode[x1].parent = n + i;HuffNode[x2].parent = n + i;HuffNode[n + i].weight = HuffNode[x1].weight + HuffNode[x2].weight;HuffNode[n + i].lchild = x1;HuffNode[n + i].rchild = x2;} } void huffmancode(HCodeType HuffCode[MAXLEAF], HNodeType HuffNode[MAXNODE],int n){HCodeType cd;int i, j,c,p;for (i = 0; i < n; i++){cd.start = n - 1;c = i;p = HuffNode[c].parent;while (p != -1) {if (HuffNode[p].lchild == c)cd.bit[cd.start] = 0;elsecd.bit[cd.start] = 1;cd.start--; c = p;p = HuffNode[c].parent; } for (j = cd.start + 1; j<n; j++){HuffCode[i].bit[j] = cd.bit[j];}HuffCode[i].start = cd.start;}cout << "各个结点的huffman编码依次是:"<<endl;for (i = 0; i<n; i++){for (j = HuffCode[i].start + 1; j < n; j++){cout<<HuffCode[i].bit[j];}cout << endl;}}int main(void){HNodeType HuffNode[MAXNODE]; HCodeType HuffCode[MAXLEAF]; int n;cout << "输入叶子结点的个数:"<<endl;cin>>n;HuffmanTree(HuffNode, n);huffmancode(HuffCode,HuffNode,n);system("pause");return 0;}
以得到最佳的判定算法。
0 0
- Huffman树的创建
- Huffman树的创建
- huffman树的创建与编码
- Huffman树的创建及编码
- C++ huffman树的创建和打印
- 创建huffman树
- Huffman树的实现
- huffman树的编译
- huffman树的分析
- Huffman树的实现
- Huffman树的实现
- Huffman树&&Huffman编码
- 别人写的Huffman树
- huffman树的小小应用
- Huffman树的简单实现
- 【C++】Huffman树的实现
- Huffman树的基本操作
- Huffman编码文件压缩 - Huffman树的建立与编码
- 树莓派使用DS18B20模块测量温度
- [caffe] 使用笔记
- QT之样式styleSheet
- Spring与Struts2整合
- 468. Validate IP Address
- Huffman树的创建
- Android studio编程时出现的错误:unspecified on project app resolves to an APK archive which is not supported
- 漫漫考研路之C语言的位运算
- JDBC配置文件以及数据库中那些增删改查
- 20161210
- 有关的进程概念
- Chapter 14: Combining Models
- 数据结构实验之排序五:归并求逆序数(讲解归并排序算法)
- Ubuntu 16.04 自学之 JDK