69,322
社区成员
发帖
与我相关
我的任务
分享
赫夫曼编码的破解既然已经公开了,那么还使用它干嘛呢
比如:
int W[N]={5,30,9,10,16,20,8,12};
char C[N]={'A','B','C','D','E','F','G','H'};
现在我提供一份已经 加密过的二进制字符串(采用赫夫曼编码加密的),
大家就可以写算法来破解啊,
那使用它干嘛呢???
问题2: 这个函数的参数HCode是 指向 二进制"010011"这种字符串,还是"ABCD"这种形式的字符串
void HuffmanDecoding(HuffmanTree HT,char chars[],int n,char *HCode,HuffmanDecode &HD)
{//根据赫夫曼编码表解码
int f;
int i=0;
char *p=HCode; //Huffman编码串工作指针
HD=(char *)malloc(strlen(HCode)*sizeof(char));
while(*p!='\0')
{
f=2*n-1; //从根出发进行匹配
while(HT[f].lchild!=0&&HT[f].rchild!=0&&*p!='\0')
{//未到达叶端且编码串未处理完
if(*p=='0')f=HT[f].lchild; //向左孩子下行
else if(*p=='1')f=HT[f].rchild; //向右孩子下行
p++; //下一编码符号
}
if(HT[f].lchild==0&&HT[f].rchild==0) //下行遇叶结点
HD[i++]=chars[f-1]; //得到该编码的字符
else return; //错误的编码,不能正确译码
}
HD[i]='\0'; //译码字符串结束符
}