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

新闻类网站如何做量化统计推广普通话奋进新征程演讲稿

新闻类网站如何做量化统计,推广普通话奋进新征程演讲稿,游戏网站开发公司,城市模拟建设游戏网站题目 Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。 更多关于Huffman编码的内容参考教材第十章。 输入: 第一行为要编码的符号数量n 第二行~第n1行为每个符号出现的频率 输…

题目

Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。

更多关于Huffman编码的内容参考教材第十章。

输入:
    第一行为要编码的符号数量n
    第二行~第n+1行为每个符号出现的频率

输出:
    对应哈夫曼树的带权路径长度WPL

解释

①哈夫曼树的构造

哈夫曼树,也称为最优二叉树,是一种带权路径长度(WPL)最短的二叉树。这里的带权路径长度就是叶子节点的权值与它到根节点的路径长度之积的总和。

哈夫曼树的构造方法是基于贪心算法,步骤如下:

1. 将每个权值看作是独立的一棵树,这些权值通常来自要编码字符的频率。

2. 在所有未构造二叉树的集合中选出两个权值最小的树作为左右子树,构造出一棵新的二叉树,同时这两个权值之和作为新的父节点的权值。

3. 在集合中删除这两个已经被使用的节点,将新构造的二叉树(父节点)加入到集合中。

4. 重复其中的步骤2-3,直到集合中只剩下一棵树,这棵树就是最终的哈夫曼树。

哈夫曼树常见的应用是哈夫曼编码,它是一种被广泛用于数据压缩的编码方式。根据哈夫曼树,我们可以为叶子节点分配相应的哈夫曼编码,使得编码长度短的更常见,这样可以有效地减少编码的总长度,达到数据压缩的目的。

②WPL的计算

带权路径长度(Weighted Path Length,简称 WPL),它是所有叶子节点的权值乘以其到根节点的路径长度之和。

以二叉树为例,叶子节点是没有子节点的节点,而根节点是最顶层的节点。路径长度则是从一个节点到另一个节点之间的边的数量。

具体计算过程如下:

1. 对每个叶子节点,计算根节点到该叶子节点的路径长度,即从根节点到叶子节点所经过的边的数量。

2. 将每个叶子节点的权值与其对应的路径长度相乘。

3. 将上述所有的乘积相加,得到的总和就是这棵树的带权路径长度。

在哈夫曼编码中,我们通常希望带权路径长度尽可能的小,这样可以让编码更加高效。

C++代码

#include <iostream>  
#include <queue>     using namespace std;struct Node {           // 定义节点结构体int freq;           // 频率Node* left;         // 左子节点Node* right;        // 右子节点
};// 创建新的节点
Node* newNode(int freq)  // 定义新节点的创建函数,输入是频率值,返回创建的新节点的指针
{Node* node = new Node(); // 动态创建新节点node->left = node->right = NULL; // 初始化左右子节点为空node->freq = freq; // 设置新节点的频率return (node);     // 返回新节点的指针
}// 比较节点的频率
struct compare {     // 定义比较结构体,作为优先级队列的比较函数bool operator()(Node* l, Node* r)     // 重载括号运算符,用以比较两个节点的频率{return (l->freq > r->freq);   // 如果第一个节点频率大于第二个,返回真,否则假}
};// 计算哈夫曼树的权值路径长度
int calculateWPL(Node* root, int depth = 0)  // 定义计算WPL的函数,输入是根节点的指针和路径深度(默认为0),返回路径长度值
{if (!root) return 0;   // 如果节点为空,返回0if (!root->left && !root->right) return depth * root->freq; // 如果是叶子节点(无左右子节点),返回当前深度乘以节点频率// 如果不是叶子节点,递归计算左右子树的WPL,返回两者之和return calculateWPL(root->left, depth + 1) + calculateWPL(root->right, depth + 1);
}int main() { int n;cin >> n; priority_queue<Node*, vector<Node*>, compare> pq; // 定义一个优先队列,用于存储节点指针,利用 compare 结构体比较节点频率for (int i = 0; i < n; ++i){int freq;cin >> freq;      // 输入每个节点的频率值pq.push(newNode(freq)); // 创建新的节点,并将其添加到优先队列中}while (pq.size() != 1) {   // 当优先队列中只有一个元素时,结束循环Node* left = pq.top();  // 获取频率最小的节点,作为左子节点pq.pop();               // 将该节点从优先队列中移除Node* right = pq.top(); // 获取频率次小的节点,作为右子节点pq.pop();               // 将该节点从优先队列中移除int sum = left->freq + right->freq; // 计算左右子节点频率之和Node* top = newNode(sum);  // 以这个频率和创建新节点top->left = left;          // 将左子节点连接到新节点top->right = right;        // 将右子节点连接到新节点pq.push(top); // 将新节点添加到优先队列中}cout << "WPL=" << calculateWPL(pq.top()) << endl; // 输出哈夫曼树的带权路径长度return 0;   // 程序执行成功,返回0
}

http://www.hrbkazy.com/news/30936.html

相关文章:

  • 网站的回到顶部怎么做怎么宣传自己的店铺
  • 做垃圾网站赚钱百度普通收录
  • wordpress网店插件seo技术培训
  • 做网站哪个平台好一点网站排名推广
  • 网站建设需要用到iis吗免费制作网站平台
  • 怎么选择企业建站公司seo是什么意思中文
  • 河源建网站网站网络营销推广
  • 网站开发功能报价表购物网站哪个最好
  • 微信网页网站怎么做地推接单平台网
  • 智能wordpress做网站怎么优化
  • 做购物网站能赚钱吗新站快速收录
  • 专业网站建设企业武汉seo搜索优化
  • 知名企业网站人才招聘情况如何18款禁用软件黄app免费
  • 跨境电商独立站是什么意思seo网页的基础知识
  • 有域名了怎么建站php视频转码
  • 会计公司网站模板德州seo优化
  • dz网站模板 首页显示内容长沙网络推广软件
  • 公家网站模板福州seo
  • 网站怎么做关键词库经典软文案例分析
  • 临沂网站制作案例信息如何优化上百度首页公司
  • wordpress 添加订阅按钮广州排前三的seo公司
  • 企业做网站需要什么手续吗韶山seo快速排名
  • 做联轴器的网站2023免费推广入口
  • 做网站一般是怎么盈利厦门人才网唯一官方网站登录入口
  • avada如何做中英文网站卡一卡二卡三入口2021
  • 公司就我一个设计网站seo规划
  • 品牌设计公司排名品牌形象广告西昌seo快速排名
  • 长春建站公司百度网盟广告
  • 搭建网站 优帮云google推广妙招
  • 东方资产营销网站惠州网站建设方案推广