| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
Reworld,下班在家制作游戏,1500万奖金等你拿编程微博 - 发现编程界的新鲜事
共有 2473 人关注过本帖
标题:赫夫曼编码中的select函数的更简单的思想是什么
只看楼主 加入收藏
miaorunhua
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-6-8
  问题点数:0  回复次数:6   
赫夫曼编码中的select函数的更简单的思想是什么
void select(huffmantree ht, int n,int&s1,int&s2)
{

    int j;
    for(j=1;j<=n;j++)
      if(ht[j].parent==0)
     {
         s1=j;
         break;
     }
    for(j=j+1;j<=n;j++)
      if(ht[j].parent==0)
     {
         s2=j;
         break;
     }
    for(j=s1;j<=n;j++)
        if(ht[j].parent==0)
            if(ht[j].weight<ht[s1].weight) s1=j;
    if(s1==s2)
        for(j=s2+1;j<=n;j++)
             if(ht[j].parent==0)
             {
                  s2=j;
                  break;
             }

    
    for(j=1;j<=n;j++)
    
        if(ht[j].parent==0&&j!=s1)
            if(ht[j].weight<ht[s2].weight) s2=j;
    printf("s1=%d,s2=%d\n",s1,s2);
    
}
这个是我写的,但是我觉得太麻烦了,有没有更简单的写法?希望各位高手指点一下。我觉得主要是找几个数中最小的两个先找一个再找一个太麻烦了,但暂时又想不出其他的好的方法。

[[it] 本帖最后由 miaorunhua 于 2008-6-22 13:04 编辑 [/it]]
搜索更多相关主题的帖子: 赫夫曼 select parent 函数 int 
2008-06-22 13:00
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:533
专家分:218
注 册:2007-10-9
  得分:0 
最简单的思想,就是找一个线性表的,最小,和次最小,然后想加,最小通过查找,次最小,比最小的大一点,这样在比较就可以得到,别的就是对结构赋值。
无人指点,完全是自己乱想的。呵呵,或许有点用
2008-06-22 20:56
miaorunhua
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-6-8
  得分:0 
回复 2# missiyou 的帖子
呵呵,谢谢你啊,我想的是先找到最小的,再在剩下的里面找最小的,这两个就是整个里面最小的两个啊,不过我觉得这样有点麻烦啊,有没有可以一下子把两个都找出来的算法啊。
2008-07-03 23:42
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:533
专家分:218
注 册:2007-10-9
  得分:0 
可以写个排序函数,直接对它进行排序,然后就是两个指针一前一后。相加了,在后移了哦。不知道行不行,
2008-07-04 08:34
zeroandone
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-10-20
  得分:0 
哈哈,我这有一个最好的

void select(int t,int *m1,int *m2)
{ int i;
  int s1,s2;
  s1=s2=infi;
  for(i=1;i<=t;i++)
   if(ht[i].parent==0)
    if(ht[i].w<s1)
     {  s2=s1;
    *m2=*m1;
    s1=ht[i].w;
    *m1=i;
     }
    else if(ht[i].w<s2)
     {  s2=ht[i].w;
    *m2=i;
     }
}
是我们老师写的,本人觉得非常好,简单易懂
2008-07-05 10:40
寻找梦想1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-5-1
  得分:0 
void select(HuffmanTree t,int i,int &s1,int &s2)
 { // s1为最小的两个值中序号小的那个
   int j;
   s1=min(t,i);
   
   s2=min(t,i);
   if(s1>s2)
   {
     j=s1;
     s1=s2;
     s2=j;//实现s1为编号最小的;
   }
 }
2013-05-23 21:51
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
  得分:0 
做个优先队列,效率最高
2014-09-28 12:33
快速回复:赫夫曼编码中的select函数的更简单的思想是什么
数据加载中...
 
   



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

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