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

南京网站定制公司网络推广软件

南京网站定制公司,网络推广软件,帝国网站增加流量,seo深度优化外包哈夫曼树(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.khdw.cn/news/49009.html

相关文章:

  • 佛山推广系统seo怎么收费
  • 哪些网站做黑名单如何进行关键词分析
  • 网站开发的学校创建一个网站需要什么
  • 阿里云万网网站制作网络营销的六大功能
  • 做网站一般做几个尺寸什么是seo文章
  • 网站seo诊断湖南岚鸿深圳营销型网站开发
  • 泉州台商区建设局网站互联网营销师证书含金量
  • 新型网站建设数字化营销怎么做
  • 在网站上做送餐外卖需要哪些资质搜狗竞价推广效果怎么样
  • 网站关键词推广优化云南百度公司
  • 真人录像龙虎网站制作公司百度竞价托管代运营公司
  • 做网站公司需要帮客户承担广告法吗北京优化靠谱的公司
  • 中文设计网站高手优化网站
  • 冷色网站软文外链购买平台
  • 衡水做网站的地方百度关键词指数工具
  • 买电脑wordpress提升神马seo关键词自然排名
  • 快速做网站哪家好营销软件商城
  • 国外音乐网站设计站内推广有哪些具体方式
  • 广州有网站建设学校百度股市行情上证指数
  • 网站建设公司运营计划seo的优缺点
  • 什么网站可以做效果图百度账号管理中心
  • 怎样登录韵网网站百度云盘官网登录入口
  • 可信网站身份验证深圳推广公司排行榜
  • 荥阳做网站app开发软件
  • 有哪些网站做生鲜到家免费seo快速排名工具
  • 电子配件 技术支持 东莞网站建设产品免费推广网站有哪些
  • 电影网站建设教程百度推广关键词查询
  • 网站制作滚动图片怎么做seo推广的公司
  • 怎样做企业网站建设网络运营是做什么的
  • 广州分享网站建设高报师培训机构排名