| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1823 人关注过本帖
标题:求助一下 关于 哈夫曼编码译码器
只看楼主 加入收藏
plaodj
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-3-19
结帖率:0
收藏
 问题点数:0 回复次数:12 
求助一下 关于 哈夫曼编码译码器
设计要求:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。    

整个程序的输出是1.哈夫曼码,将英文文章翻译成的二进制代码,二进制代码翻译成英文文章


拜托大虾给出完整正确的答案 即 源代码

谢谢了
搜索更多相关主题的帖子: 译码器 哈夫曼编码 二进制 源代码 
2008-06-10 17:26
泉此方
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-6-10
收藏
得分:0 
像是数据结构大作业



" border="0" />[color=white]

#ifdef _LOLICON_
#include"Loli"  //http://
#endif
2008-06-10 17:34
plaodj
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-3-19
收藏
得分:0 
拜托了啊  大哥哥
2008-06-10 17:52
泉此方
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-6-10
收藏
得分:0 
幸好不是叫我。。。闪人。。。吃饭去了。。。。



" border="0" />[color=white]

#ifdef _LOLICON_
#include"Loli"  //http://
#endif
2008-06-10 17:54
plaodj
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-3-19
收藏
得分:0 
帮帮忙啊
2008-06-10 18:07
plaodj
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-3-19
收藏
得分:0 
顶上去啊
2008-06-10 19:08
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
什么时候要交?

i like linux...
2008-06-10 19:10
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这个题目先统计字符数。。然后从小到大排序。。建树,为所有叶子节点构造最优前缀码。。写入文件。。读入的时候替换。。你可以自己写下

学习需要安静。。海盗要重新来过。。
2008-06-10 19:26
泉此方
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-6-10
收藏
得分:0 
[bo][un]zjl138[/un] 在 2008-6-10 19:10 的发言:[/bo]

什么时候要交?

同问


" border="0" />[color=white]

#ifdef _LOLICON_
#include"Loli"  //http://
#endif
2008-06-10 19:28
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我写了个大概。。。还是要你自己写得。你看看吧。。
// bt.cpp: 主项目文件。

#include "stdafx.h"
#include "iostream"
#include "iterator"
#include "String"
#define max 20
using namespace std;
struct node
{
    char ch;
    int weight;
    int parent;
    int lchild,rchild;
}Ht[2*max];
class htree
{
  private:
      int c[128];
      int j;
      int len;
      char **Hc;
      char code[20];
      char ch[1000];
  public:
      htree()
      { j=1;
        int i=0;
        memset(c,0,sizeof(int)*128);
        istream_iterator<char >  p(cin),eof;
        while(p!=eof)
        {   
           ch[i++]=*p;
           c[*p++]++;
        }
        ch[i]='\0';
        for(int i=0;i<128;i++)
        if(c[i]!=0)
        {
            Ht[j].ch=i;
            Ht[j].weight=c[i];
            Ht[j].lchild=0;
            Ht[j].rchild=0;
            j++;
        }
        
            
      }
      void Init()
      {
         for(int i=1;i<j-1;i++)
            for(int k=1;k<j-1;k++)
                if(Ht[k].weight>Ht[k+1].weight)
                {
                   struct node tmp=Ht[k];
                           Ht[k]=Ht[k+1];
                           Ht[k+1]=tmp;
                }
        for(int i=1,k=0;i<j-1;i++,k++)
        {   if(k==0)
            {
                Ht[j+k].lchild=i;
                Ht[j+k].rchild=i+1;
                Ht[i].parent=j+k;
                Ht[i+1].parent=j+k;
                Ht[j+k].weight=Ht[i+1].weight+Ht[i].weight;
            }
            else
            {
                Ht[j+k].lchild=j+k-1;
                Ht[j+k-1].parent=j+k;
                Ht[j+k].rchild=i+1;
                Ht[i+1].parent=j+k;
                Ht[j+k].weight=Ht[i+1].weight+Ht[j+k-1].weight;
            }
          if(i==j-2)
           len=j+k;
           
        }
      }
      void leafcode()
      {
          int i,p=len,cdlen=0;
          Hc=(char * *)malloc(j*sizeof(char *));
          for(int i=1;i<=p;i++)
              Ht[i].weight=0;
          while(p)
          {
              if(Ht[p].weight==0)
              {
                  Ht[p].weight=1;
                  if(Ht[p].lchild!=0)
                  {
                      p=Ht[p].lchild;
                      code[cdlen++]='0';
                  }
                  else if(Ht[p].rchild==0)
                  {
                      Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));
                      code[cdlen]='\0';
                      strcpy(Hc[p],code);
                  }
               }
              else if(Ht[p].weight==1)
              {
                  Ht[p].weight=2;
                  if(Ht[p].rchild!=0)
                  {
                      p=Ht[p].rchild;
                      code[cdlen++]='1';
                  }
              }
              else
              {
                  Ht[p].weight=0;
                  p=Ht[p].parent;
                  --cdlen;
              }
          }
          for(int i=1;i<j;i++)
          {
              printf("%s=%c   ",Hc[i],Ht[i].ch);
          }
      }
      void ctob()
      {   int i=0;
          while(ch[i]!='\0')
          {
              for(int k=1;k<j;k++)
                  if(ch[i]==Ht[k].ch)
                  {
                      printf("%s  ",Hc[k]);
                      break;
                  }
                  i++;
          }
      }

};
int main()
{
    htree h;
    h.Init();
    h.leafcode();
    h.ctob();
    system("pause");
    return 0;
}
要是有什么问题,可以一起讨论。。我没怎么测试。。

学习需要安静。。海盗要重新来过。。
2008-06-10 22:51
快速回复:求助一下 关于 哈夫曼编码译码器
数据加载中...
 
   



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

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