当前位置: 首页 > news >正文

网站搭建的人宝安区是深圳最差的区

网站搭建的人,宝安区是深圳最差的区,浙江建设信息港三类人员成绩查询,网站建设需要平台哈夫曼树(Huffman Tree)是一种最优的二叉树,常用于数据压缩,如在 Huffman 编码中使用。它是根据字符出现的频率来构造的,频率越高的字符越靠近树的根,频率低的字符则在较深的节点上。其核心思想是通过构建一…

哈夫曼树(Huffman Tree)是一种最优的二叉树,常用于数据压缩,如在 Huffman 编码中使用。它是根据字符出现的频率来构造的,频率越高的字符越靠近树的根,频率低的字符则在较深的节点上。其核心思想是通过构建一颗最小堆(或者优先队列)来逐步合并最小的两个节点,直到所有节点都合并成一颗哈夫曼树。 

哈夫曼树的构建过程:

  1. 统计频率:首先统计每个字符出现的频率。
  2. 构建最小堆:将每个字符作为一个树的节点插入一个最小堆(优先队列)中。
  3. 合并最小频率的节点:每次从最小堆中取出两个频率最小的节点,创建一个新节点,其频率为这两个节点频率之和。然后将这个新节点插入回最小堆。
  4. 重复步骤3,直到堆中只剩下一个节点,这个节点就是哈夫曼树的根节点
#include <iostream>
#include <queue>
#include <vector>
#include <unordered_map>
#include <string>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) {}// 定义优先级队列的比较规则:按频率最小的优先struct Compare {bool operator()(HuffmanNode* l, HuffmanNode* r) {return l->freq > r->freq; // 返回 true 时 l 排在 r 后面}};
};// 用递归生成哈夫曼编码
void generateHuffmanCodes(HuffmanNode* root, const string& str, unordered_map<char, string>& huffmanCode) {if (root == nullptr)return;// 如果是叶子节点,保存它的编码if (!root->left && !root->right) {huffmanCode[root->ch] = str;}// 遍历左子树和右子树generateHuffmanCodes(root->left, str + "0", huffmanCode);generateHuffmanCodes(root->right, str + "1", huffmanCode);
}// 构造哈夫曼树
HuffmanNode* buildHuffmanTree(const unordered_map<char, int>& freq) {// 优先队列(最小堆)用于按频率排序priority_queue<HuffmanNode*, vector<HuffmanNode*>, HuffmanNode::Compare> minHeap;// 创建叶子节点并插入最小堆for (const auto& pair : freq) {minHeap.push(new HuffmanNode(pair.first, pair.second));}// 合并节点直到只剩一个节点while (minHeap.size() > 1) {// 取出两个最小的节点HuffmanNode* left = minHeap.top(); minHeap.pop();HuffmanNode* right = minHeap.top(); minHeap.pop();// 创建一个新的内部节点,频率为左右节点频率之和HuffmanNode* node = new HuffmanNode('\0', left->freq + right->freq);node->left = left;node->right = right;// 将新节点插入最小堆minHeap.push(node);}// 最后堆中剩下的节点就是哈夫曼树的根节点return minHeap.top();
}// 打印哈夫曼编码
void printHuffmanCodes(const unordered_map<char, string>& huffmanCode) {for (const auto& pair : huffmanCode) {cout << pair.first << ": " << pair.second << endl;}
}int main() {// 输入字符串string text = "this is an example for huffman encoding";// 统计每个字符的频率unordered_map<char, int> freq;for (char c : text) {freq[c]++;}// 构建哈夫曼树HuffmanNode* root = buildHuffmanTree(freq);// 保存每个字符的哈夫曼编码unordered_map<char, string> huffmanCode;// 生成哈夫曼编码generateHuffmanCodes(root, "", huffmanCode);// 打印哈夫曼编码printHuffmanCodes(huffmanCode);return 0;
}

http://www.yayakq.cn/news/463701/

相关文章:

  • 网站制作成品免费建站的平台
  • 天蝎网站推广优化网站建设属于什么税
  • 网站认证是什么意思怎么用源码搭建网站
  • 怎样搭建一个企业网站跳转短链接生成
  • 网盘怎么做电影网站开发自己的app多少钱
  • 网站建设技术风险爱站长工具综合查询
  • 游戏网站建设教程wordpress仪表盘改名
  • 网站建设的主要工作国内信息图制作网站
  • 钓鱼转转网站在线生成软件国际知名设计公司赛瑞的logo
  • 建设银行官方网站登录电脑版网站建设优化合同
  • 做淘宝客网站需要工商营业执照重庆网站建设制作设计
  • 太原网站推广教程北京大厂网站建设
  • 视觉传达设计网站wordpress 菜单 数据库
  • 做旅游网约车的网站珠市口网站建设
  • 贵州建设厅网站报名系统大型公司网站建设目标
  • 北京网站优化效果国外优秀的网站
  • 网站推广在哪些平台做外链wordpress分页
  • 律师做网站有用海南新闻在线观看
  • 网站导航栏特效360建筑网中级机械工程师招聘
  • 如何在网站申请做co中兴通讯的网站建设分析
  • 网站建设外文参考文献深圳网站优化平台
  • 广州做网站的公司哪家好云服务器网站解析
  • 新网站制作市场wordpress app
  • 网站快照前显示中文怎么做的手机下载app并安装
  • 成都淮洲新城建设投资有限公司网站创建wordpress主题
  • 吴忠市住房和城乡建设局网站南沙建设网站
  • 官方网站建设 招标公告网站建设廉政风险点
  • 家居企业网站建设如何大型大型网站建设方案ppt
  • 做网站域名的成本网站建设冖金手指花总十五
  • 网站开发中的文档手机客户端网站怎么做