| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 748 人关注过本帖
标题:课程设计,H编码问题
取消只看楼主 加入收藏
火蚂
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-19
收藏
 问题点数:0 回复次数:1 
课程设计,H编码问题

H编码问题:
设有N个信号,u1,u2,u3,u4,u5,u6------un,且满足
u1+u2+u3----+un=1;
编程实现对各个信号的编码:
(1)首先将N个信号按值排序
(2)将最小的两个信号合并成一个信号(相加合并),从而将N个信号缩减为N-1个信号
(3)将缩减后的信号仍然按值排序,然后再将最小的两个合并,这样又缩减为N-2个信号
(4)以此类推,直至剩下一个信号为止(最后累加的信号值为1)
(5)将每次合并的两个信号分别用0和1标志
(6)从最后一级开始,向前返回,就得出各个信号在这组信号流中的编码
详细图示看上传的图片,
小生主要不知道中间生成的那些缩减后数组该怎么办(我是用数组生成各个信号值的)
对这些缩减后的数组再重新排序的以后就找不到对应关系了,
求编码的时候就回不去了,
跪求各位大虾帮忙看下,感激不尽。只需稍微指点下算法就行了。
对了,我苦思好几天,是不是应该用递归,或是双向链表解决啊!
先谢谢各位了

图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 课程 编码 设计 
2006-06-06 18:07
火蚂
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-19
收藏
得分:0 

哈哈,我会了,用哈夫曼树(最优二叉树)解决
代码如下:
/*用排完序的字符串建立霍夫曼树 */
linktree createHftree(linktree tree)
{
linktree p,q,newnode,beforep;

for(p=tree->next,q=p->next;p!=NULL&&q!=NULL;p=tree->next,q=p->next) //p,q结点的权值最小为目标结点
{
tree->next=q->next; //将tree引到后面第三个结点处
q->next=NULL;
p->next=NULL; //q,p的后继置空

newnode=(linktree)malloc(sizeof(Hftree));/*申请新结点作为霍夫曼树的中间结点*/
if(!newnode)
return NULL;
newnode->next=NULL;
newnode->mark=0;

newnode->lchild=p;/*取链表头结点后的两个结点作为新结点的左、右儿子*/
newnode->rchild=q;
p->parent=newnode;
q->parent=newnode;
newnode->weight=p->weight+q->weight; //对newnode进行相关赋值

p=tree->next;
beforep=tree;

if(p!=NULL&&p->weight>=newnode->weight) /*将新结点插入原链表的相应位置*/
{
newnode->next=beforep->next;
beforep->next=newnode;
}
else
{
while(p!=NULL&&p->weight<newnode->weight)
{
p=p->next;
beforep=beforep->next;
}
newnode->next=beforep->next;
beforep->next=newnode;
}
}
return (tree->next);
}

2006-06-22 16:28
快速回复:课程设计,H编码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030002 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved