谁会算法设计编程啊,急啊
展开全部
编程思路
一、文件压缩:
①统计词频:读取文件的每个字节,使用整数数组统计每个字符出现的次数,
②构造哈夫曼树:根据数组,基于哈夫曼树算法造哈夫曼树,由于构造的过程中每次都要取最小权值的字符,所以需要用优先队列来维护每棵树的根节点。
③生成编码:深度优先遍历哈夫曼树,得到每个叶子节点中的字符的编码并存入字符串数组
④存储词频:新建存储压缩数据的文件,首先写入不同字符的个数,然后将每个字符及其对应的词频写入文件。
⑤存储压缩数据:再次读取待压缩文件的每个字节byte,得到对应的编码(注意每个字符编码的长度不一),使用位运算一次将编码中的每个位(BIT)设置到一个char类型的位缓冲中,可能多个编码才能填满一个位缓冲,每填满一次,将位缓冲区以单个字节的形式写入文件。当文件遍历完成的时候,文件的压缩也就完成了。
二、文件解压:
①读取词频:读取压缩文件,将每个字符的出现次数存入数组
②构造哈夫曼编码树:根据数组构造哈夫曼编码树
③继续读取压缩文件,对于每个字节,使用位运算得到每个位(BIT)。对于每个BIT,根据BIT从根开始遍历哈夫曼树,如果BIT是0就走左分支,如果BIT是1就走有分支,走到叶子节点的时候,输出对应的字符。走到叶子节点后,重新从哈夫曼树根节点开始匹配每个位。当整个压缩文件读取完毕时,文件解压缩也完成了。
算法中的难点就是哈夫曼树的构建和高效的实现位输入输出。
代码就没有功夫写了
一、文件压缩:
①统计词频:读取文件的每个字节,使用整数数组统计每个字符出现的次数,
②构造哈夫曼树:根据数组,基于哈夫曼树算法造哈夫曼树,由于构造的过程中每次都要取最小权值的字符,所以需要用优先队列来维护每棵树的根节点。
③生成编码:深度优先遍历哈夫曼树,得到每个叶子节点中的字符的编码并存入字符串数组
④存储词频:新建存储压缩数据的文件,首先写入不同字符的个数,然后将每个字符及其对应的词频写入文件。
⑤存储压缩数据:再次读取待压缩文件的每个字节byte,得到对应的编码(注意每个字符编码的长度不一),使用位运算一次将编码中的每个位(BIT)设置到一个char类型的位缓冲中,可能多个编码才能填满一个位缓冲,每填满一次,将位缓冲区以单个字节的形式写入文件。当文件遍历完成的时候,文件的压缩也就完成了。
二、文件解压:
①读取词频:读取压缩文件,将每个字符的出现次数存入数组
②构造哈夫曼编码树:根据数组构造哈夫曼编码树
③继续读取压缩文件,对于每个字节,使用位运算得到每个位(BIT)。对于每个BIT,根据BIT从根开始遍历哈夫曼树,如果BIT是0就走左分支,如果BIT是1就走有分支,走到叶子节点的时候,输出对应的字符。走到叶子节点后,重新从哈夫曼树根节点开始匹配每个位。当整个压缩文件读取完毕时,文件解压缩也完成了。
算法中的难点就是哈夫曼树的构建和高效的实现位输入输出。
代码就没有功夫写了
追问
不会写代码😭
追答
哈夫曼压缩算法程序
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询