- 浏览: 731421 次
- 性别:
- 来自: 嘉兴
文章分类
- 全部博客 (386)
- Struts1.1 (2)
- Database (18)
- Core Java (15)
- Log4j (4)
- SSH (0)
- Dao (1)
- Architecture Design (1)
- References (2)
- Eclipse&MyEclipse (10)
- Hibernate (7)
- Spring (8)
- JavaMail (1)
- Data Structure And Algorithm (48)
- Struts 2 (2)
- SSI (1)
- SSL (2)
- JSTL (1)
- EJB3 (2)
- NET (2)
- XML (2)
- Components (2)
- Ant (3)
- Multi Thread (1)
- Performance Monitoring (1)
- Web Server (17)
- Oracle (1)
- jQuery (8)
- Regular Expression (1)
- Weblogic (1)
- Exception (1)
- Security (2)
- File Manipulation (1)
- JavaScript (12)
- JVM (2)
- HTML&DIV&CSS (4)
- Android (10)
- Beyond GFW (0)
- Business (0)
- SVN (6)
- 虚拟主机 (1)
- Virtual Host (3)
- My mentality (5)
- OS (15)
- ISPMP (3)
- Magento (5)
- Jsoup&HttpClient (7)
- LINUX (9)
- Database Design (0)
- Power Designer (1)
- TaobaoOpenPlatform (2)
- C/C++ (3)
- Maven (11)
- Quartz (1)
- Load Balance (1)
- Zabbix (4)
- Product&Business (1)
- Pay Interface (1)
- Tomcat (2)
- Redis (1)
- 集群 (1)
- Session (1)
- 共享Session (1)
- Jedis (1)
- jenkins (1)
- 持续集成 (1)
- Web前端 (1)
最新评论
-
aqq331325797:
特意注册账号上来说一句。牛逼!
swagger2.2.2 与 spring cloud feign冲突 -
KitGavinx:
跨顶级域名怎么保持sessionid一致?
Tomcat7集群共享Session 基于redis进行统一管理 -
jaychang:
dujianqiao 写道HI ,能否给一个完整的demo 啊 ...
淘宝订单同步方案 - 丢单终结者 -
GGGGeek:
找了一会儿,感觉mybatis应该没有这种操作,直到发现博主的 ...
mybatis collection list string -
dujianqiao:
HI ,能否给一个完整的demo 啊 ?
淘宝订单同步方案 - 丢单终结者
#include<iostream> #define LEN sizeof(HaffmanNode) #define MAXSIZE 100 #define MAX 9999 using namespace std; typedef struct{ int value; int lChild,rChild,parent; }HaffmanNode,Haffman[MAXSIZE]; typedef struct{ char name; int w; char code[MAXSIZE]; }HaffmanCode[MAXSIZE]; //全局变量 Haffman h; HaffmanCode hc; //筛选出值最小的两个结点,s1,s2存储其结点的索引位置 void Select(Haffman h,int index,int *s1,int *s2) { *s1=0;*s2=0; for(int i=1;i<=index;i++) { //筛选出无双亲结点,且权值最小的两个结点 if(h[i].parent==0) { if(h[i].value<=h[*s1].value) { *s2=*s1; *s1=i; } else if(h[i].value<h[*s2].value) { *s2=i; } } } } //创建哈弗曼树及每个叶结点的哈弗曼编码 void CreateHaffmanTree(Haffman h,HaffmanCode hc,int n) { int s1,s2; h[0].value=MAX; for(int i=1;i<=n;i++) { h[i].lChild=h[i].rChild=h[i].parent=0; h[i].value=hc[i].w; } for(i=n+1;i<=2*n-1;i++) { h[i].lChild=h[i].rChild=h[i].parent=h[i].value=0; } //构建叶子结点外的其他结点 for(i=n+1;i<=2*n-1;i++) { Select(h,i-1,&s1,&s2); h[i].lChild=s1;h[i].rChild=s2; h[i].value=h[s1].value+h[s2].value; h[s1].parent=i;h[s2].parent=i; } } //求每个叶结点的哈弗曼编码 void CreateHaffmanCode(Haffman h,HaffmanCode hc,int n) { int Stack[MAXSIZE],top=-1; char flag[MAXSIZE],j; HaffmanNode th; for(int i=1;i<=n;i++) { th=h[i];int c=i;j=0; while(th.parent!=0) { Stack[++top]=th.parent; if(h[Stack[top]].lChild==c) { flag[top]='L';c=th.parent; } else if(h[Stack[top]].rChild==c) { flag[top]='R';c=th.parent; } th=h[Stack[top]]; } while(top!=-1) { if(flag[top]=='L') hc[i].code[j++]='0'; else hc[i].code[j++]='1'; top--; } hc[i].code[j]='\0'; } } //求叶结点的所在层的深度 int Depth(Haffman h,HaffmanNode hd) { int count=0; HaffmanNode temp; temp=hd; while(temp.parent!=0) { temp=h[temp.parent]; count++; } return count; } //打印叶结点的哈弗曼编码值,以及二叉树的带权路径长度 void PrintHaffmanCode(Haffman h,HaffmanCode hc,int n) { int weight,sum=0; for(int i=1;i<=n;i++) { weight=Depth(h,h[i])*h[i].value; cout<<"结点名称:"<<hc[i].name<<",结点的哈弗曼编码值:"<<hc[i].code<<"\n"; sum+=weight; } cout<<"带权路径长度为:"<<sum<<"\n"; } int main() { int n; char cmd; do{ cout<<"输入叶子结点数目\n"; cin>>n; cout<<"输入叶子结点名称和每个叶子结点的权值\n"; for(int i=1;i<=n;i++) { cin>>hc[i].name>>hc[i].w; } CreateHaffmanTree(h,hc,n); CreateHaffmanCode(h,hc,n); PrintHaffmanCode(h,hc,n); cout<<"继续吗y/Y\n"; cin>>cmd; }while(cmd=='y'||cmd=='Y'); return 0; }
发表评论
-
【排序算法系列】希尔排序
2015-12-05 16:14 834希尔排序的概述: a[0]...a[n-1 ... -
归并排序
2015-06-20 15:28 891public class MergeSort { pub ... -
插入排序
2015-06-20 15:27 479/** * 插入排序1 容易理解 * * ... -
有序线性链表归并
2013-10-05 11:30 1554#include<stdio.h> #incl ... -
Trie树 应用 Phone List
2012-06-15 11:21 1171Phone List 时间限 ... -
Trie树 单词查找树 键树(JAVA版附分析说明)
2012-06-13 10:27 5164来源于英文“retrieval”. ... -
Trie树 单词查找树 键树
2012-06-12 08:59 1151转自:http://zh.wik ... -
数字金额转中文大写金额
2010-11-26 15:09 1421/** * 用来将数字金额转化成中文大写的金额 ... -
汉诺塔递归算法
2010-11-25 08:17 1347import java.util.Scanner; /* ... -
约瑟夫出圈
2010-11-24 20:45 1091#include<iostream> #incl ... -
SmartHashSet只是为了解释HashSet的原理
2010-07-26 11:11 1356写该类的目的只是为了 ... -
二叉树中序遍历非递归算法
2010-06-29 23:17 1718#include<iostream> usi ... -
二叉树的创建
2010-06-29 23:15 1129#include<iostream> usi ... -
二叉排序树转双向链表(要求无任何新增节点)
2010-06-29 23:07 2482题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双 ... -
线索二叉树中插入结点
2010-06-29 23:05 1880#include<iostream> usi ... -
二叉排序树的递归与非递归查找
2010-06-29 22:58 2301#include<iostream> usi ... -
二叉树中序线索化及查找某一结点的前驱,后继结点
2010-06-29 22:54 2676#include<iostream> usi ... -
十字链表定义创建查找
2010-06-29 22:44 1314#include<iostream> #defi ... -
稀疏矩阵转置
2010-06-29 22:39 1656#include<iostream> #defi ... -
单链表实现集合并交差操作
2010-06-29 22:34 1982#include<iostream> usi ...
相关推荐
5. **编码与解码**:编码阶段将字符映射到对应的哈弗曼编码,形成编码表;解码阶段则根据编码表反向解析二进制流得到原始字符。 在"哈夫曼树的实现"这个文件中,很可能包含了具体的C++代码实现,包括以上提到的各个...
- **编码生成**:哈弗曼编码的生成是构建哈弗曼树的重要后续步骤,但给定代码并未涉及。 - **性能优化**:使用优先队列(如C++ STL中的`priority_queue`)替换循环查找最小权重节点的过程,可以显著提高构建哈弗曼树...
哈弗曼编码译码 哈弗曼树的建立,编码 对26个大写英文字母以及空格键的编码,译码
哈弗曼树的编码和译码过程可以分为三个步骤:读取文件、建立哈弗曼树和编码/译码。 首先,读取文件,统计每个字符的出现频次,并将其存储在一个数组中。然后,使用这些统计结果建立哈弗曼树。哈弗曼树是一种二叉树...
哈弗曼编码完成后,可以建立一个编码表,其中包含每个字符及其对应的哈弗曼编码。这个编码表用于解码过程,使得接收到的二进制码能够还原成原始字符。同时,为了可视化编码过程,可以使用图形化工具动态展示哈弗曼树...
哈弗曼树的构建基于以下两个核心概念:哈弗曼编码(Huffman Coding)和带权路径长度(Weighted Path Length)。哈弗曼编码是一种前缀编码,即没有任何一个编码是另一个编码的前缀,这样可以避免在解码时产生歧义。...
### C++ 实现哈夫曼树的建立 #### 概述 哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树,在数据压缩编码、文件系统等方面有着广泛的应用。本文将详细介绍如何利用 C++ 来实现哈夫曼树...
2. **建立编码表**:对所有字符进行上述操作,形成一个哈弗曼编码表,用于编码和解码。 在解码时,我们需要根据已知的哈弗曼编码表,按二进制位读取输入流,遇到前缀匹配的编码,就识别出对应的字符。 在"哈弗曼...
2. 将编码与字符对应,形成编码表。 解码过程: 1. 从接收到的二进制码开始,按照哈夫曼编码表,根据0或1的序列决定向左还是向右移动,直到找到一个叶子节点,这个叶子节点对应的字符就是解码出的字符。 2. 重复此...
通过本次实验,不仅深入理解了哈弗曼编码的原理与实现过程,还掌握了如何构建和使用哈弗曼树进行数据编码和解码的技术。此外,通过实际操作,熟悉了数据结构的运用和文件操作的基本方法,对于提升编程能力和算法理解...
哈弗曼树 哈弗曼编码 构造哈弗曼编码 建立哈弗曼树 编码
【哈弗曼编码】是一种高效的前缀编码方法,主要用于数据压缩。它的基本思想是通过...在实际应用中,哈弗曼编码常与其他数据压缩算法结合,如LZ77(Lempel-Ziv)和LZW(Lempel-Ziv-Welch)等,以进一步提高压缩效率。
总的来说,哈弗曼树是一种高效的数据结构,利用结构体实现哈弗曼树的建立和操作是理解和实践数据结构与算法的重要环节。通过熟练掌握哈弗曼树的构建和相关操作,我们能更好地理解和应用数据压缩原理,提高程序的性能...
1. **建立哈弗曼树**: 这个功能是构建哈弗曼树的基础。首先,我们需要一个频率表,其中包含了每个字符或数据元素出现的频次。然后,通过一系列合并操作,将具有最小频率的节点合并成新的节点,直到所有节点合并为...
在实际应用中,哈弗曼编码可以用于文本压缩,通过建立字符与短编码的映射关系,减少表示文本所需的位数,从而达到节省存储空间的效果。此外,哈弗曼编码也常用于通信传输,因为较短的编码可以提高传输效率。 总结来...
在这个项目中,学生需要实现哈弗曼树的建立,以及基于哈弗曼编码的文件压缩和解压缩功能。以下是关于这个主题的详细知识讲解: 1. **哈弗曼树(Huffman Tree)**:哈弗曼树是一种特殊的二叉树,也称为最优二叉树。...
哈弗曼编码的生成基于哈弗曼树的结构,遵循以下规则: - **左分支代表0**:从根节点出发,向左分支走一步表示在编码中添加一个0。 - **右分支代表1**:向右分支走一步表示添加一个1。 - **到达叶节点**:当到达叶...
测试数据可以按照给出的字符集和频度来建立哈弗曼树,并对特定的字符串进行编码和解码。例如,字符`A`的频率为64,`N`的频率为57,以此类推,根据这些频率生成哈弗曼树,然后编码字符串中的每一个字符。 总的来说,...
- 从接收到的位流中读取哈弗曼编码,根据哈弗曼树进行译码。在二叉树中,从根节点出发,根据位流中的0和1选择左或右子节点,当到达叶子节点时,该叶子节点对应的字符就是解码的结果。 5. **C++实现**: - 在C++中...