用huffman算法求带权为2,3,5,7,8的最优2元树,要求画出中间过程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用huffman算法求带权为2,3,5,7,8的最优2元树,要求画出中间过程?相关的知识,希望对你有一定的参考价值。

谢下面的兄弟的回答,问题是我跟本不懂啊,直接帮画出来吧。

7/8应该一起作为同一父的叶这样才是最优,权为55

把最小的两个数2、3放在最下面作为左右叶子节点,得出他们的父节点权值5,然后它和剩余里最小的数5做成左右兄弟节点,得出父节点10,以此类推啊,10和7得出17,17和8,得到跟节点25完成。

例如:

先将所有的权值选出最小的两个值,为1,4,这两个的和为5,那么再从5,9,25,36,49中选出两个最小的,为5和9,然后再从14,25,36,49中选出两个最小的,为14,25,依次进行下去。那么就可以得到最优二叉树为:() / \\ () 49 / \\ () 36 / \\ () 25 / \\ () 9 / \\ 1 4

扩展资料:

所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。

树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。

参考资料来源:百度百科-哈夫曼树

参考技术A 过程就是:首先把最小的两个数2、3放在最下面作为左右叶子节点,得出他们的父节点权值5,然后它和剩余里最小的数5做成左右兄弟节点,得出父节点10,以此类推啊,10和7得出17,17和8,得到跟节点25.完成! 参考技术B 7/8应该一起作为同一父的叶这样才是最优,权为55

设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)

思想:图G是不带权的无向连通图。一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列。利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地向外扩展,当第一次找到顶点v时队列中便包括了从顶点u到顶点v近期的路径,如图所看到的,再利用队列输出最路径(逆路径),所以设计成非循环队列。

技术分享









相应算法例如以下:

typedef struct 

{

int data;//顶点编号

int parent;//前一个顶点的位置

} QUEUE;//非循环队列类型


void ShortPath(AGraph *G,int  u, int v)

{

//输出从顶点u到顶点v的最短逆路径

ArcNode *p;

int  w,i;

QUEUE qu[MAXV];//非循环队列

int front=-1,rear=-1;//队列头尾指针

int visited[MAXV];

for(i=0;i<G->n;i++)//訪问标志设置初值0

visited[i]=0;

rear++;

qu[rear].data=u;//顶点u进队

qu[rear].parent=-1;

visited[u]=1;

while(front<=rear)//队列不为空时循环

{

front++;

w=qu[front].data;//出队顶点w

if(w==v)//找到v时输出路径之逆并退出

{

i=front;//通过队列输出逆路径

while(qu[i].parent!=-1)

{

printf("%2d",qu[i].data);

i=qu[i].parent;

}

printf("%2d\n",qu[i].data);

break;

}

p=G->adjlist[w].firstarc;//找到w的第一邻接点

while(p!=NULL)

{

if(visited[p->adjvex]==0)

{

visited[p->adjvex]=1;

rear++;//将w的未訪问过的邻接点进队

qu[rear].data=p->adjvex;

qu[rear].parent=front;

}

p=p->nextarc;

}

}

}


如图所看到的,求顶点0到3的最短逆路径的结果例如以下:

技术分享












邻接表:

【0】:1->4->^

【1】:0->2->3->^

【2】:1->2->^

【3】:1->2->^

【4】:0->2->^

顶点0到顶点3的最短逆路径:3 1 0
























以上是关于用huffman算法求带权为2,3,5,7,8的最优2元树,要求画出中间过程?的主要内容,如果未能解决你的问题,请参考以下文章

图 实验七 采用Dijkstra算法求带权有向图的最短路径

试画一个带权为2,3,3,4,5的最优二叉树,并计算该最优二叉树的权 各位大哥帮帮忙啊。

画一棵带权为1、2、3、4的最优二叉树,计算它们的权

Huffman树

求图的最短路径 c语言

设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)