搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
全球AI大模型盘点(全网首发)_国外ai大模型平台有哪些
2
Flink1.17总结
3
大模型是什么_什么是大模型
4
JMeter中文使用手册_jmeter中文帮助手册
5
navicat执行sql文件_navicat执行.sql文件
6
爆款短视频素材去哪里找?做抖音短视频爆款热门素材网站分享_抖音素材网站
7
linux 基本指令 2
8
解决git:‘remote-http‘ 不是一个 git 命令错误提示
9
Xftp 远程连接虚拟机linux进行文件传输的全过程_xftp怎么传文件csdn
10
02、SpringBoot + 微信支付 -->基础支付API V3 -->网页弹出二维码支付功能 并能 真实支付成功(Native下单API)_微信native支付springboot实现源码
当前位置:
article
> 正文
课程设计哈夫曼编码系统_hafumanxitong csdn
作者:从前慢现在也慢 | 2024-07-21 02:09:08
赞
踩
hafumanxitong csdn
#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<cstring>
#include<stack>
#include<queue>
#include<algorithm>
#include<math.h>
#include<vector>
#include<iomanip>
#include<map>
using namespace std;
#define MAXVALUE 10000
#define MAXLEAF 30
#define MAXBIT 100
int n;
string str;
map<string,string>bianma1;
map<char,string>bianma2;
typedef struct
{
int bit[MAXBIT];
int start;
} HCodeType;
typedef struct
{
char ch;
int weight;
int parent,lchild,rchild;
}HNodeType;
void HaffmanTree(HNodeType HuffNode[])
{
int m1,m2,x1,x2,len,str_pinlv[52]; //大小写字母共52个
cout<<"请输入待编码的字符串(大/小写英文字母且不含空格):"<<endl;
cin>>str;
len=str.length();
memset(str_pinlv,0,sizeof(str_pinlv));
for(int i=0;i<len;i++)
{//统计字符出新的频率
if(str[i]>='a'&&str[i]<='z')
str_pinlv[str[i]-'a']++;
else if(str[i]>='A'&&str[i]<='Z')
str_pinlv[str[i]-'A'+26]++;
}
n=0;
for(int i=0;i<52;i++)
{//统计出现的字母种类数
if(str_pinlv[i]!=0)
n++;
}
for(int i=0;i<2*n-1;++i)
{//初始化
HuffNode[i].weight=0;
HuffNode[i].parent=-1;
HuffNode[i].lchild=-1;
HuffNode[i].rchild=-1;
}
system("cls");
cout<<endl<<" 字符 频度"<<endl;
for(int i=0,j=0;j<52;++j)
{//初始化节点权值
if(str_pinlv[j]!=0)
{
if(j<26)
{
HuffNode[i].ch=(char)(j+'a');
HuffNode[i++].weight=str_pinlv[j];
cout<<" "<<(char)(j+'a')<<" "<<str_pinlv[j]<<endl;
}
else
{
HuffNode[i].ch=(char)(j+'A'-26);
HuffNode[i++].weight=str_pinlv[j];
cout<<" "<<(char)(j+'A'-26)<<" "<<str_pinlv[j]<<endl;
}
}
}
for(int i=0;i<n-1;++i)
{
m1=m2=MAXVALUE;
x1=x2=0;
for(int j=0;j<n+i;++j)
{
if(HuffNode[j].weight<m1&&HuffNode[j].parent==-1)
{
m2=m1;
x2=x1;
m1=HuffNode[j].weight;
x1=j;
}
else if(HuffNode[j].weight<m2&&HuffNode[j].parent==-1)
{
m2=HuffNode[j].weight;
x2=j;
}
}
HuffNode[x1].parent=n+i;
HuffNode[x2].parent=n+i;
HuffNode[n+i].weight=HuffNode[x1].weight+HuffNode[x2].weight;
HuffNode[n+i].lchild=x1;
HuffNode[n+i].rchild=x2;
//cout<<HuffNode[x1].ch<<"和"<<HuffNode[x2].ch<<"的双亲是:"<<n+i<<endl;
}
cout<<endl<<" 创建哈弗曼树成功! =^_^= "<<endl<<endl;
system("pause");
}
int Send()
{//统计字符频度,建立哈弗曼树,记录编码
string str1="";
HNodeType huffnode[MAXLEAF];
HCodeType HuffCode[MAXLEAF], cd;
HaffmanTree(huffnode);
for (int i=0; i < n; i++)
{
cd.start = n-1;
int c = i;
int p = huffnode[c].parent;
while (p != -1) /* 父结点存在 */
{
if (huffnode[p].lchild == c)
cd.bit[cd.start] = 0;
else
cd.bit[cd.start] = 1;
cd.start--; /* 求编码的低一位 */
c=p;
p=huffnode[c].parent; /* 设置下一循环条件 */
} /* end while */
/* 保存求出的每个叶结点的哈夫曼编码和编码的起始位 */
for (int j=cd.start+1; j<n; j++)
{ HuffCode[i].bit[j] = cd.bit[j];}
HuffCode[i].start = cd.start;
} /* end for */
/* 输出已保存好的所有存在编码的哈夫曼编码 */
system("cls");
cout<<endl<<" 哈弗曼编码如下: "<<endl<<endl;
for (int i=0; i<n; i++)
{
printf ("%c 的哈弗曼编码是: ", huffnode[i].ch);
for (int j=HuffCode[i].start+1; j < n; j++)
{
str1+=(char)(HuffCode[i].bit[j]+'0');
printf ("%d", HuffCode[i].bit[j]);
}
bianma1[str1]=huffnode[i].ch;
bianma2[huffnode[i].ch]=str1;
str1="";
printf ("\n");
}
system("pause");
system("cls");
cout<<endl<<"原来字符串的编码是:"<<endl;
for(int i=0;i<str.length();i++)
cout<<bianma2[str[i]];
cout<<endl;
system("pause");
return 0;
}
void Receive()
{
string str3,str4="";
system("cls");
cout<<"请输入需要破译的代码(只含有0和1且不含空格):"<<endl;
cin>>str3;
for(int i=0;i<str3.length();i++)
{
str4+=str3[i];
if(bianma1[str4]!="")
{
cout<<bianma1[str4];
str4="";
}
}
if(str4!="")
cout<<endl<<"Sorry,译码失败!"<<endl;
cout<<endl;
}
int main()
{
system("color 37");
Send();
Receive();
}
/*
iloveyou
1110010110000110010011
*/
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/859302
推荐阅读
article
项目管理
----
计划
------WPS画
甘特图
做
任务
排期
_
任务
排期
表格
csdn
...
团队开发中我们经常会有版本启动和 版本
任务
分配以及版本
任务
计划
。在开始开发之前,我们需要知道每一个版本中有哪些
任务
,每个...
赞
踩
article
下载
Android
Studio
开发工具,工欲善其事,必先利其器_
android
studio
官网下...
Android
Studio
官网
下载
链接&安装过程,工欲善其事,必先利其器_
android
studio
官网
下载
csd...
赞
踩
article
inBuilder
低
代码
平台开发者分享课丨
提交
PR
的正确姿势_pr
提交
csdn
...
PR
是Pull Request的缩写。在开源社区中,Pull Request是一种
提交
代码
的方式。开源社区中的开发者可以...
赞
踩
article
使用
VitePress
和
Github
搭建个人博客网站,可以自动构建和发布_
jzplp
csdn
...
使用
VitePress
和
Github
搭建个人博客网站,可以自动构建和发布_
jzplp
csdn
jzplp
csdn
...
赞
踩
article
云
原生
概述_云
原生
csdn
...
云
原生
概述_云
原生
csdn
云
原生
csdn
文章目录...
赞
踩
article
手机
远程
控制
另一台
手机
的全新
使用
教程(安卓版)_
手机
远程
控制
csdn
...
看完这篇文章,你可以了解到安卓
手机
如何
远程
控制
安卓
手机
,以及苹果
手机
如何
远程
控制
安卓
手机
。如果想要用安卓
手机
远程
管控苹果...
赞
踩
article
HEIC
格式文件_
heic
文件
csdn
...
heic
数据格式存储。_
heic
文件
csdn
heic
文件
csdn
...
赞
踩
article
heic
是
什么
图片格式
?怎么转成
jpg
_
heic
数据格式
csdn
...
2. 使用改图鸭的转换功能:如果您使用的
是
iOS设备,可以通过设置中的“相机”选项将HEIC格式更改为JPEG。只需打开...
赞
踩
article
执法类考试
搜题
软件
?
分享
9
个
搜题
直接出
答案
的
软件
#其他#知识
分享
#职场发展_法考刷题
软件
csdn
...
在大学生
的
学习生活中,遇到难题和疑惑是常有
的
事情。为了解决这
个
问题,越来越多
的
大学生开始使用
搜题
软件
来帮助他们快速找到答...
赞
踩
article
计算机
大厂
实习
感悟_互联网
大厂
实习
感想
csdn
...
然而没办法,现实就是这样,我深知我的学历是不太可能让我从0
实习
经验到直接上岸
大厂
实习
的,所以我给自己的
实习
规划就是“曲线...
赞
踩
article
【
CSDN
】5周年创作
纪念日
,
不忘
初心
,
砥砺前行。_
csdn
纪念日
...
不忘
初心
,
砥砺前行。5年前的
初心
犹在
,
理想也依旧在。希望每一位博主
,
都能做到不忘
初心
,
持续输出优质内容。如果要问我
,
一直...
赞
踩
article
InsCode
AI
创作
助手
:源于
CSDN
的
AI
创作
助手
,不一样的
创作
体验_inscode...
CSDN
AI
写作
助手
上线了!
InsCode
AI
创作
助手
不仅能够帮助用户高效
创作
文章,而且能够作为对话式
AI
回答你...
赞
踩
article
Nginx
限流
功能
,流量控制
功能
详解_如何
防止
ddos
csdn
...
Nginx
限流
功能
详解_如何
防止
ddos
csdn
如何
防止
ddos
csdn
...
赞
踩
article
python
爬虫
获取
新华字典
的
数据
_
利用
python
盗取汉语词典基础
数据
的方法
csdn
...
使用
python
爬虫
字典中的汉字
_
利用
python
盗取汉语词典基础
数据
的方法
csdn
利用
python
盗取汉语词典基础数...
赞
踩
article
SQL
sever
中库管理_
sql
server
删除
数据库
csdn
...
SQL
sever
中库管理_
sql
server
删除
数据库
csdn
sql
server
删除
数据库
csdn
...
赞
踩
article
Windows
系统知识点_
windows
基础知识
csdn
...
ps:新手网安小白,第一次写博客,如有错误,望指出。希望大家可以一起学习(我也想认识一些网安大佬)这篇博客主要讲解了一些...
赞
踩
article
网络安全
入门
(
持续更新
)
_
网络安全
csdn
...
防御:下载安全软件并开启局域网防御
(
原理:以极快的速度发送ARP广播报文,赶在被欺骗之前获取到正确的MAC地址
)
、以极快...
赞
踩
article
课程设计
---
哈夫曼
树的
编码
与解码(Java详解)_
java
哈夫曼
树有
编码
译码...
哈夫曼
树
编码
&&解码详解( ´◔︎ ‸◔︎`)(Java)_
java
哈夫曼
树有
编码
译码
java
哈夫曼
树有
编码
译码 ...
赞
踩
article
动作
策略
规划案例之一:
move
_
base
行为规划
_
如何设计
机器人
动作
csdn
...
全局路径切换、换道
策略
_
如何设计
机器人
动作
csdn
如何设计
机器人
动作
csdn
...
赞
踩
article
VQ
-
VAE
_vq-
vae
csdn
...
作为一个自编码器,
VQ
-
VAE
的一个明显特征是它编码出的编码向量是离散的,换句话说,它最后得到的编码向量的每个元素都是一...
赞
踩
相关标签
项目管理
团队
进度
排期
计划
android studio
低代码
github
前端
javascript
vue
vitepress
云原生
kubernetes
微服务
手机使用技巧
android
远程控制手机
远程控制安卓
手机远程控制手机
图像处理
heic转图片
职场和发展
算法
面试