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

咸阳网站建设有哪些老网站改版启用二级域名

咸阳网站建设有哪些,老网站改版启用二级域名,西安百度竞价托管代运营,苏州定制型网站建设介绍 求解最优二叉树问题通常使用动态规划算法中的一种称为Huffman算法或者Huffman编码。 Huffman算法的基本思想#xff1a; 根据节点的频率或者权重构建一棵最优二叉树。最小频率的节点会被放置在树的底部#xff0c;而较大频率的节点则放置在较…介绍 求解最优二叉树问题通常使用动态规划算法中的一种称为Huffman算法或者Huffman编码。 Huffman算法的基本思想 根据节点的频率或者权重构建一棵最优二叉树。最小频率的节点会被放置在树的底部而较大频率的节点则放置在较高的位置以此最大限度地减少树的平均路径长度。 具体步骤如下 1. 首先统计所有节点的频率或者权重并按照频率或者权重对节点进行排序。 2. 创建一个包含所有节点的森林由单个节点组成的树。 3. 从森林中选择两个具有最小频率或者权重的节点并创建一个新的父节点频率或者权重等于这两个节点的频率或者权重之和。 4. 将这两个节点作为新节点的左右子节点并将新节点加入到森林中。 5. 重复步骤3和步骤4直到森林中只剩下一个节点即最优二叉树的根节点。 6. 最后对最优二叉树进行编码将频率或者权重较大的节点赋予较短的编码而频率或者权重较小的节点赋予较长的编码。 Huffman算法的时间复杂度主要取决于对节点进行排序的部分通常使用的排序算法是堆排序或者快速排序时间复杂度为O(nlogn)其中n为节点的数量。 总结一下Huffman算法是一种用于构建最优二叉树的动态规划算法它通过选择频率或者权重最小的节点来构建树以最小化树的平均路径长度。 举例 #include iostream #include queue #include unordered_map using namespace std;// Huffman树节点 struct HuffmanNode {char data; // 符号字符int frequency; // 频率HuffmanNode* left;HuffmanNode* right;HuffmanNode(char d, int freq) : data(d), frequency(freq), left(nullptr), right(nullptr) {} };// 比较函数按照频率从小到大排序 struct Compare {bool operator()(const HuffmanNode* a, const HuffmanNode* b) {return a-frequency b-frequency;} };// 构建Huffman树 HuffmanNode* buildHuffmanTree(const unordered_mapchar, int freqMap) {// 创建小顶堆用于选择频率最小的节点priority_queueHuffmanNode*, vectorHuffmanNode*, Compare minHeap;// 创建叶子节点并将其加入到小顶堆中for (const auto entry : freqMap) {HuffmanNode* node new HuffmanNode(entry.first, entry.second);minHeap.push(node);}// 构建Huffman树合并节点while (minHeap.size() 1) {// 选择频率最小的两个节点HuffmanNode* leftNode minHeap.top();minHeap.pop();HuffmanNode* rightNode minHeap.top();minHeap.pop();// 创建新节点频率为子节点频率之和HuffmanNode* newNode new HuffmanNode($, leftNode-frequency rightNode-frequency);newNode-left leftNode;newNode-right rightNode;// 将新节点加入到小顶堆中minHeap.push(newNode);}// 返回Huffman树的根节点return minHeap.top(); }// 生成Huffman编码 void generateHuffmanCodes(HuffmanNode* root, string code, unordered_mapchar, string huffmanCodes) {if (root nullptr) {return;}// 叶子节点表示一个字符将其编码加入到map中if (root-left nullptr root-right nullptr) {huffmanCodes[root-data] code;}// 递归生成左子树和右子树的编码generateHuffmanCodes(root-left, code 0, huffmanCodes);generateHuffmanCodes(root-right, code 1, huffmanCodes); }// 压缩数据 string compressData(const string data, const unordered_mapchar, string huffmanCodes) {string compressedData ;// 遍历原始数据将字符替换为对应的Huffman编码for (char c : data) {compressedData huffmanCodes.at(c);}return compressedData; }// 解压缩数据 string decompressData(const string compressedData, HuffmanNode* root) {string decompressedData ;HuffmanNode* current root;// 遍历压缩后的数据根据Huffman编码逐个恢复原始字符for (char c : compressedData) {if (c 0) {current current-left;} else {current current-right;}// 到达叶子节点表示找到一个字符if (current-left nullptr current-right nullptr) {decompressedData current-data;current root; // 恢复到根节点以继续下一个字符的解压缩}}return decompressedData; }int main() {string data hello huffman!;unordered_mapchar, int freqMap;// 统计字符频率for (char c : data) {freqMap[c]; // 字符已存在则自增; 否则, 创建新键值对}// 构建Huffman树HuffmanNode* root buildHuffmanTree(freqMap);// 生成Huffman编码unordered_mapchar, string huffmanCodes;generateHuffmanCodes(root, , huffmanCodes);// 输出Huffman编码cout Huffman Codes: endl;
http://wiki.neutronadmin.com/news/315331/

相关文章:

  • 广州网站建设公司万齐网络科技网站域名注册哪家好
  • 大网站建设公司福田区网络建设
  • 雄县网站建设公司兼职网站开发团队工作项目总结
  • 东莞公司建站哪个更便宜邯郸专业做网站地方
  • 国外免费建站网站搭建长沙做网站要微联讯点很好
  • 成都网站建设技术外包做一个赚钱的网站好
  • 济南网站万词优化导航网站模板免费
  • 网站建设最高管理权限网站建设工作会议.
  • 个人微信公共号可以做微网站么织梦网站模版下载
  • 公司推广网站建设话术做一个购物网站要多少钱
  • 南宁网站seo服务企业网站空间多大
  • 网站建设xml下载php网站api接口写法
  • 装饰网站建设效果图网站内部推广
  • 免费自建网站步骤重庆天蚕网络科技有限公司
  • 如何找企业联系做网站广州奕联网站开发
  • 设置网站的默认页面西安企业建站排名
  • 上海手机网站建设报价表邯郸公司注册
  • 郑州网站制作工作室低价格制作网站
  • 东莞高端网站建设首页排名怎么自己做一个公众号
  • 泉州网站建设选择讯呢东莞南城房价
  • 做网站的是怎么赚钱做网络写手最好进那个网站
  • 网站不备案怎么回事怎么做酒店网站
  • 烟台网站建设烟台个人网站设计介绍文字
  • 怎样宣传网站做网站营销怎么去推广
  • 做淘宝网站目的是什么安卓开发网站开发
  • 生成图片链接的网站如何开展网络营销
  • 网站流量统计工具wordpress 路由怎么配
  • 网站主页设计手机编辑个人简历
  • 做网站数据库坏了广东省住房和城乡建设厅
  • 网站尾部分页数字怎么做哪些是企业网站