gpt4 book ai didi

c - 自适应(动态)霍夫曼编码 : encode and decode data from file

转载 作者:行者123 更新时间:2023-11-30 19:43:41 25 4
gpt4 key购买 nike

我现在正在编写应该对文件中的数据进行编码/解码的程序。

字母:8位ASCII码
所以我在这个字母表中有 n = 256 个符号,最大堆数是 2n-1 = 511

我理解自适应霍夫曼编码算法,但我在实现这个算法时遇到一些问题。

我编写了代码的第一部分,但我需要一些帮助才能顺利进行。

#define FIRST_NYT 511

struct huffcode {
int nbits;
int code;
};

typedef struct huffcode code;

struct huffheap {
char symbol; /* character contained in tree node */
int weight; /* number of times symbol has occured in file so far */
int order; /* ordering system, root has order number 511 */

struct huffheap *left;
struct huffheap *right;
struct huffheap *parent;

};

typedef struct huffheap *heap;


static heap heap_create(int symbol, struct heap *root){
/* if tree is empty, add root */
if(heap = NULL) {
heap = (huffheap*)malloc(sizeof(*heap));
heap- >symbol = /* i dont know what i should when heap doesnt has a symbol like NYT */
heap- >weight = 0;
heap- >order = FIRST_NYT;
heap- >left = NULL;
heap- >right = NULL;
heap- >parent = NULL;
}

/* TO_DO: check -> is the first time of this symbol ? */

/* if yes -> add node */

}

以下是程序链接:Algorithm

  1. 我的树结构正确吗?
  2. 我应该如何存储字母表?我写了一个关于代码的结构,但我不知道如何处理符号列表 -> struct huffcode
  3. 我知道如何增加堆的重量等,但我不能更进一步。我对“之前见过这个符号/这是树中第一次出现这个符号”有疑问

最佳答案

您可以为每个符号存储节点。

huffheap  sym[256];

你初始化它。

for (int i = 0; i < 256; i++) {
sym[i].symbol = i;
}

如果parent为空,这是第一次将其插入到树中

关于c - 自适应(动态)霍夫曼编码 : encode and decode data from file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com