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

南京网站定制公司网页设计代码

南京网站定制公司,网页设计代码,培训seo多少钱,wordpress 快速回复哈夫曼树(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.hrbkazy.com/news/37247.html

相关文章:

  • 有个找人做任务赚返佣的网站站长之家查询网
  • 重庆网站建设公司那好域名备案查询站长工具
  • 企业网站制作一般多少钱如何优化网页加载速度
  • 有没有专门做本子的网站百度如何精准搜索
  • 湘潭网站建设湘潭振企专业中山百度seo排名公司
  • 网站系统建设百度平台推广的营销收费模式
  • 网站建设广告合同需要交印花税吗调价智能关键词软件
  • 电脑网络seo优化专员招聘
  • 做个爬架网站如何做买卖网站
  • PHP网站开发用什么电脑备案域名查询
  • 人性本私wordpress广州百度seo代理
  • wordpress 插件汉化seo网页优化培训
  • 做实验室信息的网站网络推广整合平台
  • 医疗类网站备案2024年重大政治时事汇总
  • 做淘宝客如何引出图片到网站成都网站建设企业
  • 男生和女生做污的事情免费网站域名是什么 有什么用
  • 怎么才能建立一个网站2023年免费进入b站
  • 温州做网站就来温州易富网络全网营销一站式推广
  • html5网站源代码在哪里可以发布自己的广告
  • 济南网站建设与优化seo建站营销
  • 新疆乌鲁木齐疫情解封最新消息优化推广网站淄博
  • 镇江百度网站排名品牌营销和市场营销的区别
  • 中央通报兰州疫情最新消息刷排名seo软件
  • 自动做海报的网站进行优化
  • 莘庄做网站西安网络seo公司
  • 遵义市网站建设百度指数网页版
  • wp做购物网站网络seo是什么意思
  • 国家城乡建设委员会官方网站百度网站排名
  • 科技局网站建设方案新媒体营销策略有哪些
  • 嘉兴seo网站排名厦门网站设计公司