最优二叉树算法的编码和解码
平衡树:平衡二叉树
#include
#include
typedef struct binode{
int data;
struct binode *lchild,*rchild;
}binode,*bitree;
typedef struct{
bitree elem[100];
int top;
}stack;
bitree creat_bt(){ //按扩展前序建二叉树
bitree t;int x;
scanf("%d",&x);
if (x==0) t=NULL;
else { t=(bitree)malloc(sizeof(binode));
t->data=x;
t->lchild=creat_bt();
t->rchild=creat_bt();
}
return t;
}
void exchange(bitree t) //左、右子树交换
{bitree p;
if(t!=NULL)
{ p=t->lchild;t->lchild=t->rchild;
t->rchild=p;
exchange(t->lchild);
exchange(t->rchild);
}
}
void inorder(bitree bt) //递归的中序遍历
{ if (bt){
inorder(bt->lchild);
printf("% d",bt->data);
inorder(bt->rchild);
}
}
main()
{bitree root;
printf("
");
printf("建二叉树,输入元素:");
root=creat_bt(); /*create tree of useing preorder*/
printf("交换前的中序序列是:");
inorder(root);
exchange(root);
printf("
交换后的中序序列是:");
inorder(root);
printf("
");
}
通过从上一节的学习,我们知道了如何利用哈夫曼树来构造字符编码。有了字符集的哈夫曼编码表之后,对数据文件的编码过程是:依次读人文件中的字符c,在哈夫曼编码表H中找到此字符,若H[i].ch=c,则将字符c转换为H[i].bits中存放的编码串。
对压缩后的数据文件进行解码则必须借助于哈夫曼树T,其过程是:依次读入文件的二进制码,从哈夫曼树的根结点(即T[m-1])出发,若当前读人0,则走向左孩子,否则走向右孩子。一旦到达某一叶子T[i]时便译出相应的字符H[i].ch。然后重新从根出发继续译码,直至文件结束。
最优二叉树算法的基本概念
这五棵树的带权路径长度分别为:(a)WPL=1×2+3×2+5×2+7×2=32(b)WPL=1×3+3×3+5×2+7×1=29(c)WPL=1×2+3×3+5×3+7×1=33(d)WPL=7×3+5×3+3×2+1×1=43(e)WPL=7×1+5×2+3×3+1×3=29最优二叉树算法 最优二叉树算法由此可见,由相同权值的一...
用huffman算法求带权为2,3,5,7,8的最优2元树,要求画出中间过程?_百度...
例如:先将所有的权值选出最小的两个值,为1,4,这两个的和为5,那么再从5,9,25,36,49中选出两个最小的,为5和9,然后再从14,25,36,49中选出两个最小的,为14,25,依次进行下去。那么就可以得到最优二叉树为:() \/ \\ () 49 \/ \\ () 36 \/ \\ () 25 \/ \\ () 9 \/...
算法怎么学
从上图可以看出,最优前缀编码码的二叉树总是一棵完全二叉树,而定长编码的二叉树不是一棵完全二叉树。 给定编码字符集C及频率分布f,C的一个前缀码编码方案对应于一棵二叉树T。字符c在树T中的深度记为dT(c),dT(c)也是字符c的前缀码长。则平均码长定义为: 使平均码长达到最小的前缀码编码方案称为C的最优...
树- 哈夫曼树及其应用 - 最优二叉树(二)
构造最优二叉树 哈夫曼算法 哈夫曼首先给出了对于给定的叶子数目及其权值构造最优二叉树的方法 故称其为哈夫曼算法 其基本思想是 ( )根据给定的n个权值w l w … w n 构成n棵二叉树的森林F={T T … T n } 其中每棵二叉树T i 中都 只有一个权值为w i 的根结点 其左右子树均空 ( )在...
哈弗曼树就是最小生成树吗?
i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。最小生成树是计算连通图,连同各个节点的权值和最小的情况,有两种算法:prim和Kruskal。哈夫曼树是用来进行编码压缩等,最小生成树用来设计水管、电路等连接各个结点所需的最短距离等用途。
最优二叉树算法的构造算法
从上述算法中可以看出,F实际上是森林,该算法的思想是不断地进行森林F中的二叉树的“合并”,最终得到哈夫曼树。在构造哈夫曼树时,可以设置一个结构数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,...
最优二叉树算法引入
而右图的比较次数仅为1900次。这表明右图的二叉树结构在实际执行中具有更低的比较次数,因为它涉及的树的路径长度更短。因此,为了实现最高效的判断,我们应该选择那种在比较次数上具有明显优势的二叉树,即最优二叉树算法。这种算法能确保在处理大量数据时,通过最短的路径实现判断,从而提高整体效率。
哈夫曼编码的原理是什么?
两者虽平均码长相等,但同一符号可以有不同的码长,即编码方法并不唯一,其原因是两支路概率合并后重新排队时,可能出现几个支路概率相等,造成排队方法不唯一。一般,若将新合并后的支路排到等概率的最上支路,将有利于缩短码长方差,且编出的码更接近于等长码。这里图(a)的编码比(b)好。
用Huffman算法求带权为1,4,9,25,36,49的最优二叉树
做法:将最小的两个数取出相加1,4,得到5后将5放回再找最小的两个相加5,9,再将14放回,以此类推。最优二叉树如图:
二叉树遍历算法规律是什么?
遍历规律52143算法如下:5-2=3;5-1=4;5-4=1;5-3=2;1+4=5;2+3=5;4-3=1;1+3=4。在计算机科学中,所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历序列是指沿着某条搜索路线访问序列中的元素...
标文安中: 给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近. 哈夫曼树(霍夫曼树)又称为最...
城步苗族自治县13611497489: 哈夫曼树是什么?求解 - ?
标文安中: 哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码.首先介绍什么是哈夫曼树.哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上...
城步苗族自治县13611497489: 用哈夫曼树算法设计对文件文件的压缩和解压缩的实验程序解析 - ?
标文安中: 楼主可以去看看最优二叉树的编码问题. 1、哈夫曼编码 在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符.例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R...
城步苗族自治县13611497489: 请描述哈夫曼算法,并用图描述构造哈夫曼树的过程. - ?
标文安中: 这个讲的相当清楚.首先介绍什么是哈夫曼树.哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其...
城步苗族自治县13611497489: 哈夫曼编码原理 - ?
标文安中: 原发布者:a2420092945 Huffman树及其应用一、最优二叉树(霍夫曼树)预备知识:若干术语路d径:由一结点到另一结点间的分支所构成a→e的路径长度=2beacfg路径长度:路径上的分支数目树长度=10树的路径长度:从树根到每一结点的...
城步苗族自治县13611497489: 数据结构 最优二叉树 - ?
标文安中: 这是我们的作业题,自己写 的……(可能输入的格式跟你要的不一致,自己改一下) 如果有什么不懂的就问我,我可以把其中所有相关的文件发给你 ^^ 注:1、 初始化创建哈夫曼树有三种选择,其中选择编译课本测试数据时和编译源文件是,...
城步苗族自治县13611497489: 哈夫曼树的建立?
标文安中: 在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码. 首先介绍什么是哈夫曼树.哈夫曼树又称最...
城步苗族自治县13611497489: huffman编码方式 - ?
标文安中: 先计算每一个字符出现的次数(即频率) 在根据频率构建huffman (一个最优二叉树)之后根据0左1右 求出每个字符对应的0 1 编码 这样就行了
城步苗族自治县13611497489: 哈夫曼编码 - ?
标文安中: 哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩. 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩....
城步苗族自治县13611497489: 到底什么是哈夫曼树啊,求例子 - ?
标文安中: 哈夫曼树是给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近. 例子: 1、将w...