哈夫曼编码huffman.h
时间: 2023-06-01 16:02:12 浏览: 141
#ifndef HUFFMAN_H
#define HUFFMAN_H
#include <iostream>
#include <string>
#include <unordered_map>
#include <queue>
using namespace std;
// 哈夫曼树结点
struct HuffmanNode {
char ch; // 字符
int freq; // 频率
HuffmanNode* left; // 左子树
HuffmanNode* right; // 右子树
HuffmanNode(char c, int f) : ch(c), freq(f), left(nullptr), right(nullptr) {}
};
// 哈夫曼编码表
typedef unordered_map<char, string> HuffmanCodeMap;
// 哈夫曼编码器
class HuffmanEncoder {
public:
// 压缩
static string compress(const string& str);
// 解压缩
static string decompress(const string& str);
private:
// 构建哈夫曼树
static HuffmanNode* buildHuffmanTree(const unordered_map<char, int>& freqMap);
// 生成哈夫曼编码表
static void generateHuffmanCodeMap(const HuffmanNode* node, const string& code, HuffmanCodeMap& codeMap);
// 获取哈夫曼编码表
static HuffmanCodeMap getHuffmanCodeMap(const unordered_map<char, int>& freqMap);
// 获取字符频率表
static unordered_map<char, int> getCharFreqMap(const string& str);
// 将哈夫曼编码字符串转换为二进制字符串
static string huffmanCodeToBinary(const string& huffmanCode);
// 将二进制字符串转换为哈夫曼编码字符串
static string binaryToHuffmanCode(const string& binary);
// 获取字符的哈夫曼编码
static string getHuffmanCode(const HuffmanCodeMap& codeMap, char ch);
};
#endif // HUFFMAN_H
阅读全文