当前位置: 首页 > 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.yayakq.cn/news/409094/

相关文章:

  • 网站优化一般怎么做商标可以做网站吗
  • 营销管理培训课程深圳短视频seo教程
  • 运城手机网站建设网站包括哪些内容
  • 网站开发专业前景网站建设要那些东西
  • 视频网站用什么做的包头爱出行app最新版本
  • wordpress mysql分离网站优化及推广
  • 网站建设销售工资网站建设和系统集成
  • 成都html5网站建设电子商务师证官网
  • 天津网站优化哪家快sketch可以做网站交互么
  • 网站 的空间安徽网站关键词优化
  • 深圳住房和建设局网站无法登陆学校官网的网址
  • 怎么自己做网站排名免费建设门户网站
  • 网络营销导向的网站建设的基本原则网站平台做推广方案
  • 网站中的文章可以做排名吗微信小程序在哪里找?
  • 成都 地铁 建设 网站asp做的网站数据库在哪里
  • 公司做网站需准备资料加强网站内容建设的意见
  • 怎么做公司网站竞价静态页优秀网站
  • 网站建设元软件公司 网站模板
  • 飘仙建站论坛中国建设招标网 官方网站下载
  • 马关县住房和城乡建设局网站亚马逊aws wordpress
  • 汕头仿站定制模板建站中国核工业第五建设公司网站
  • 网站建设网络拓扑成都小程序开发
  • 网站开发背景论文绵阳科技网站建设
  • 怎么做微信网站怎么让网站快速被收录
  • 网站建造免费宁波seo推广
  • y2学年做的租房网站wordpress评论头像不显示
  • 郑州外贸网站制作黔东南建设厅官方网站
  • 手机制作网站app抖音小店代运营
  • 深圳自建站有哪些大公司企业在公司做的网站遇到的问题
  • 游戏网站开发需求分析南昌做网站的公司哪个比较好的