Huffman编码代码
Huffman编码
Huffman编码是一种可变字长编码,利用字频来作为结点的权重,代码如下,测试使用的是26个字母,频率使用的是Prime.
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <cmath>
using namespace std;
string road[26];
int key[26] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101};struct Node
{int value = -1;int lchild = -1;int rchild = -1;int parent = -1;
};
int Select(Node tree[], int n)
{int min, i = 0;for(; i < n; i++)if(tree[i].value != -1 && tree[i].parent == -1){min = i;break;}for(; i < n; i++)if(tree[i].value != -1 && tree[i].parent == -1 && tree[i].value <= tree[min].value)min = i;return min;
}
string search(Node tree[], int i, string s, int num)
{if(tree[i].parent == -1)return (tree[i].lchild == num) ? "0" + s : "1" + s;if(tree[i].lchild == num)return search(tree, tree[i].parent, "0" + s, i);elsereturn search(tree, tree[i].parent, "1" + s, i);}
void Huffman(Node tree[], int n)
{for(int i = 0; i < n; i++)tree[i].value = key[i];int m = 2 * n - 1;for(int i = n; i < m; i++){int lmin, rmin;//查找权值最小的两个根节点保存在lmin和rmin中lmin = Select(tree, m);tree[lmin].parent = i;rmin = Select(tree, m);tree[rmin].parent = i;tree[i].value = tree[lmin].value + tree[rmin].value;tree[i].lchild = lmin;tree[i].rchild = rmin;}
}
int main()
{int n = 26;int m = n * 2 - 1;Node *tree = new Node[m];Huffman(tree, n);printf(" 序号 权值 双亲 左孩 右孩\n");for(int i = 0; i < n; i++)printf("%c%7d%7d%7d%7d%7d\n", ('a' + i), i, tree[i].value, tree[i].parent, tree[i].lchild, tree[i].rchild);for(int i = n; i < m; i++)printf(" %7d%7d%7d%7d%7d\n", i, tree[i].value, tree[i].parent, tree[i].lchild, tree[i].rchild);printf(" 编码\n");for(int i = 0; i < n; i++){road[i] = search(tree, tree[i].parent, "", i);printf("%c ", ('a' + i));cout << road[i] << endl;}delete[] tree;system("pause");return 0;
}
Huffman编码代码相关推荐
- 数据压缩之Huffman编码
数据压缩之Huffman编码 实验介绍 实验环境介绍和项目使用方法 1.对.img图像文件进行Huffman编码 2.编写diff程序得到差值图像,并进行Huffman编码 3.使用其他图像码本对图像 ...
- huffman python,哈夫曼(Huffman)编码python代码实现
首先看定义 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率 ...
- DS二叉树——Huffman编码与解码(不含代码框架)
题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...
- Huffman 编码原理详解(代码示例)
1.概述 huffman编码是一种可变长编码( VLC:variable length coding))方式,于1952年由huffman提出.依据字符在需要编码文件中出现的概率提供对字符的唯一编码 ...
- huffman树和huffman编码
不知道为什么,我写的代码都是又臭又长. 直接上代码: #include <iostream> #include <cstdarg> using namespace std; c ...
- 技术图文:如何利用C#实现Huffman编码?
背景 Huffman编码 在通信和数据压缩领域具有重要的应用. 在介绍 Huffman 编码具体实现之前,先介绍几个相关的概念. 概念1:树中结点的带权路径长度 – 根结点到该结点的路径长度与该结点权 ...
- huffman java_详解Huffman编码算法之Java实现
Huffman编码介绍 Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度.我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/ ...
- 采用Huffman编码进行数据压缩
文章目录 问题 实验环境 程序组成 实现思路 如何用二进制0/1表示字符 '0' / '1' 源代码下载 程序运行和结果: 总结 问题 利用哈夫曼编码将英文文献进行压缩 注:哈夫曼算法及原理见博客ht ...
- Huffman编码(Huffman树)
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "Huffman编码(Huffman树)" 的idea 并用源代码加以实现: 0.2) ...
最新文章
- php 两次post,ajax跨域往php程序post数据时,php程序总是执行两次的解决办法
- 强化学习(五)用时序差分法(TD)求解
- html搜索结果 重置,搜索结果和后退按钮/ HTML表格
- phpcms上传php,phpcms如何上传视频
- 用LVM快照创建虚拟机
- 寻路优化(一)——二维地图上A*启发函数的设计探索
- 基于netty搭建websocket,实现消息的主动推送
- intellij idea 12 搭建maven web项目 freemarker + spring mvc
- python语言-Python的语言特点
- 软件设计原则(二) 接口隔离原则
- 计算机主板详细维修,教你电脑主板维修必备基础知识
- 【财富空间】UpHonest Capital:美国人工智能投资分析报告(精华版)
- 【车牌识别】基于模板匹配算法实现新能源车牌识别matlab源码
- 网页打开微信/跳转微信
- MATLAB在图像上标记特定点
- 【苹果代发家庭推imessage】软件安装利用X代码iMessage Extensitioniments Sage SDK 1
- 在iOS中调用C语言的国密算法SM2以替换RSA
- 开发 Web 应用程序
- 判断是否是对象本身的属性(hasOwnProperty)
- Python 水果出库
热门文章
- python spyder安装错误分析
- sqlnbsp;tunningnbsp;advisor的使用
- sizeof的使用(指针和数组地址的区别)
- ST-GCN 复现:遇到多GPU并行训练时使用nn.DataParallel遇到的nn.ParameterList()为空的问题
- 网页大作业代码自取【HTML+CSS制作美味糖果网站】
- LiveGBS国标GB/T28181流媒体服务查看通道设备录像查看接入设备的前端录像
- C++——list的模拟实现
- vue2--基于zm-tree-org实现公司部门组织架构图
- 【c++】SPDLOG动态库和静态库、异步日志库hang 问题、registry核心类
- 新版Go2Shell 安装详解