基于哈夫曼树的数据压缩算法

根据字符出现的频率构造哈夫曼编码 例:要传输的字符集D={C,A,S,T,;},字符出现频率分别为w={2,4,2,3,3},写出其哈夫曼编码。 方法: 第一步:将每个字符的频率作为权值,构造哈夫曼树; 第二步:将哈夫曼树每个结点的左分支标为0,右分支标为1; 第三步:把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符的编码。 两个问题帮助你理解哈夫曼编码 1.为什么哈夫曼编码能够保证时前缀编码? 因为没有一片树叶是另一片树叶的祖先,所以每个叶子结点的编码就不可能... 阅读详情

题目描述

输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。

输入:
多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。
输出:
每组数据输出4行:
第一行为统计出来的字符出现频率(只输出存在的字符,格式为:字符:频度),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。
第2行为每个字符的哈夫曼编码(只输出存在的字符,格式为:字符:编码),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。
第3行为编码后的字符串
第4行为解码后的字符串(应该与输入的字符串相同)。
样例输入 Copy:

aaaaaaabbbbbccdddd
aabccc
0

样例输出 Copy

a:7 b:5 c:2 d:4
a:0 b:10 c:110 d:111
00000001010101010110110111111111111
aaaaaaabbbbbccdddd
a:2 b:1 c:3
a:11 b:10 c:0
111110000
aabccc

具体代码:

#include<iostream>
#include<cstring>
using namespace std;
#define MAX 500
int coun[26]; //频率 
char saveletter[26];//存字母 
char temp[MAX];//暂存被译码串 

typedef struct htnode
{
	int weight;
	int lchild,rchild,parent; 
	char data; 
	int frequency;//出现频率 
}*huftree;

typedef char **hufcode;

void select(huftree &hf,int x,int &s1,int &s2)//在叶子结点里找最小的两个 
{
	int min=999,cmin=999;//最小值和次小值 
	int i=1;
	while(i<=x)
	{
		if(hf[i].parent==0)
		{
			if(hf[i].weight<min)//寻找权值最小 
			{
				min=hf[i].weight;
				s1=i;
			}
			i++;			
		}
		else
			i++;		
	} 
	int flag=s1;
	i=1;
	while(i<=x)
	{
		if(hf[i].parent==0)
		{
			if((hf[i].weight>min && hf[i].weight<cmin) || (hf[i].weight==min &&flag!=i) )//找次小值 
			{
				cmin=hf[i].weight;
				s2=i;
			}
			i++;					
		}
		else
			i++;		
	} 
	
}

void Create(huftree &hf,int n)//叶子为n的哈树有2n-1个结点 
{
	int m=2*n-1,s1=0,s2=0;
	
	if(n<=1) return;

	hf=new htnode[m+1];//0号单元不用
	
	for(int i=1;i<=m;i++)//都初始化为0 
	{
		hf[i].parent=0;
		hf[i].rchild=0;
		hf[i].lchild=0;
		hf[i].data=saveletter[i-1];//字母
	}
	
	for(int i=1;i<=n;i++)
		hf[i].weight=coun[i-1];//输入权值 
		
	for(int i=n+1;i<=m;i++)//前n个为叶子,后面需要构建 
	{
		select(hf,i-1,s1,s2);//选择最小的两个节点,返回序号 
		hf[s1].parent=i;
		hf[s2].parent=i;//结点双亲变为i
		hf[i].lchild=s1;
		hf[i].rchild=s2;//i的左右孩子
		hf[i].weight=hf[s1].weight+hf[s2].weight;
		//i权值更改 
	} 
	
}

void count(char str[],huftree &hf,int &n)//出现频率 ,字母个数 
{
	int i=0,j=0;
	int num[26];
	char ch;
	memset(num,0,sizeof(num));
	
	while(str[i]!='\0')
	{
		j=str[i]-97;
		num[j]++;
		i++;
	}
	j=0;
	for(i=0;i<26;i++)
	{
		if(num[i]!=0)
		{	
			saveletter[j]=char(i+97);
			coun[j]=num[i]; 
			j++;
		}	
	}
	n=j;
	for(int i=0;i<n;i++)
	{
		if(i==n-1)
			cout<<saveletter[i]<<":"<<coun[i];
		else
			cout<<saveletter[i]<<":"<<coun[i]<<" ";
	}
	cout<<endl;
}


void hfcode(huftree &hf,hufcode &hc,int n)
{ 
	int start=0,c,f; 
	char *cd;
	
	hc=new char*[n+1];//编码表 
	cd=new char[n];//每个字符的编码一定小于n 
	cd[n-1]='\0';
	
	for(int i=1;i<=n;i++)
	{
		start=n-1;
		c=i;
		f=hf[i].parent;
		
		while(f!=0)//不是根节点
		{
			start--;
			
			if(hf[f].lchild==c)
				cd[start]='0';
			else
				cd[start]='1';
				
			c=f;//向上回溯 
			f=hf[f].parent;
		}
		hc[i]=new char[n-start];
		strcpy(hc[i],&cd[start]);//把临时空间的编码复制到编码表中 
	}
	delete cd;
	
	int i,j,z=0;
	for(j=1;j<=n;j++)//输出字母编码 
	{
		if(j==n)
			cout<<saveletter[j-1]<<":"<<hc[j];
		else
			cout<<saveletter[j-1]<<":"<<hc[j]<<" ";
	}
	cout<<endl;
		
}


void trans_tonum(huftree &hf,hufcode &hc,int n,char str[])
{
	for(int i=0;str[i]!='\0';i++)
		for(int j=1;j<=n;j++)
			if(str[i]==saveletter[j-1])
			{
				cout<<hc[j];
				strcat(temp,hc[j]);
			}	
				
	cout<<endl;
	
}

void trans_toletter(huftree &hf,hufcode &hc,int n)
{
	int i=2*n-1;
	int j=0;
	
    while(temp[j]!='\0')
	{    
		if(temp[j]=='0')
			i=hf[i].lchild;   //左孩子
		else if(temp[j]=='1')
			i=hf[i].rchild;    //右孩子
		if(hf[i].lchild==0)
		{   
       		cout<<hf[i].data;
        	i=2*n-1;
      	}
		j++;   //无论是否找到叶子节点都读取下一个编码串字符
   }
   cout<<endl;
}

int main()
{
	
	while(1)
	{
		huftree hf;
		hufcode hc;
		int n;
		char str[MAX];

		gets(str);
		if(str[0]=='0')
			break;
		
		count(str,hf,n); 
		Create(hf,n);
		hfcode(hf,hc,n);
		trans_tonum(hf,hc,n,str);
		trans_toletter(hf,hc,n);	
		
		memset(coun,0,sizeof(coun));
		memset(saveletter,'\0',sizeof(saveletter)); 
		memset(temp,'\0',sizeof(temp));
		
		delete hf;
		delete hc;	
	}
	return 0;
}
3001基于哈夫曼树的数据压缩算法 描述 输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。 输入 多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。 输出 每组数据输出2n+3行(n为输入串中字符类别的个数)。第一行为统计出来的字符出现频率(只输出存在的字符,格式为:字符:频度),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。第 阅读详情

相关推荐

sy3new_哈夫曼树_源码

基于哈夫曼树的数据压缩算法描述输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。输入多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。输出每组数据输出2n+3行(n为输入串中字符类别的个数)。第一行为统计出来的字符出现频率(只输出存在的字符,格式为:字符:频度),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。第二行至第2n行为哈夫曼树的存储结构的终态(形如教材139页表5.2(b),一行当中的数据用空格分隔)。第2n+1行为每个字符的哈夫曼编码(只输出存在的字符,格式为:字符:编码),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。第2n+2行为编码后的字符串,第2n+3行为解码后的字符串(与输入的字符串相同)。

数据结构实验五:哈夫曼树的设计及实现

实验五 哈夫曼树的设计及实现 一、实验目的 1. 掌握哈夫曼树的构造算法,理解二叉树的应用; 2. 掌握哈夫曼编码的构造算法。 二、实验内容 输入一串字符串,根据给定的字符串中字符出现的频率建立相应的哈夫曼树,构造哈夫曼编码表,在此基础上可以对压缩文件进行压缩(即编码)。 已知字符串中出现的字符为A、B、C、D、E、F、G、H,其相应的权值为 7、19、2、6、32、3、21、10。

qq_45158661的博客 1万+

【C++】根据输入的字符串生成哈夫曼树, 并进行哈夫曼编码和解码

/********************************************************************** * Description : create huffmanTree and huffmanCode by input string * and decode a 0、1 sequence by huffmanCode * Author : wandugu * DATE : 2020-05-02 ************************************

[leetcode] 每日一题 Day 4:394. 字符串解码

题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例 1: 输入:s = "3[a]2[bc]" 输出:"aaabcbc" 示例 2: 输入

浅夜 417

拯救者R9000P-2021-AMD5800H黑苹果EFI配置与优化指南

本文详细介绍了在联想拯救者R9000P 2021款(搭载AMD锐龙7 5800H处理器)上安装和优化黑苹果系统的完整指南。内容涵盖EFI配置、OpenCore引导设置、关键驱动(如NootedRed核显驱动)的调整,以及安装后的性能调优与常见问题解决,旨在帮助开发者和极客用户在这款游戏本上搭建稳定可用的macOS开发环境。

weixin_29291069的博客 288

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 目录 Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 一、简单介绍 二、一些专有项简介 Entity Context Group Collector Matcher System Feature 三、注意实现 四、ECS 的下载 Github 上下载 Unity Asset Store 中下载 U...

仙魁XAN 7780

C++ || 数据结构--哈夫曼树&哈夫曼编码

输人一串字符串,根据给定的字符串中字符出现的频率建立相应的哈夫曼树,构造哈夫曼编码表,在此基础上可以对压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。

weixin_63378697的博客 1191

DIY T12烙铁头驱动难题:用几个电容二极管,搞定NMOS上管驱动(附Multisim仿真)

本文详细介绍了如何利用电荷泵电路解决DIY T12烙铁头驱动中的NMOS上管驱动难题。通过巧妙组合电容和二极管,构建低成本高效的升压电路,实现栅极高压驱动需求。文章包含具体电路设计、元件选型建议、实际搭建注意事项以及Multisim仿真验证,为电子爱好者提供了一套完整的解决方案。

weixin_33640562的博客 334

数据结构实验——基于哈夫曼树的数据压缩算法

这是一道几乎基于数据结构而非算法的题。嗯,所以我不会写,上的AI。虽然代码是抄袭的,但是我的实验步骤已经把哈夫曼树的原理说的很清楚了,包括配的图和参考文献,大家也可以多去看看。数据结构和离散数学都要学哈夫曼树的构造,至少得会手动。嗯...所以86分的总评我还是难绷好吧。。。

xinghuayu_lin的博客 1364

走向审计4.0:内部审计数字化转型的路径与方法

企业的内部审计人员可以以数字化为手段,建立内部审计新生态,在数字化过程中引进战略审计、服务审计、开放审计、敏捷审计、数字审计、智慧审计等理念、方法和工具,完成数智生态审计转型。内部审计的审计对象远比国家审计和公众审计丰富和多元化,理论上企业经营管理和日常操作的各个方面都可以成为内部审计的对象,此外还可以开展独立咨询活动。由于内部审计的数字化或数字化的内部审计是实现审计数字化转型的必要条件,是实现“数字引领、数据强审”目标的核心手段,因此企业内部审计部门势必要投入足够的资金和人才来打造一支数字化审计新队伍。

一键难忘的博客 6737

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

本文介绍了当使用Tessy对软件进行单元测试时如何打桩和指针相关测试的注意事项及操作要点,希望能给正在摸索Tessy的网友一点点启发。

啤酒鸭的物联网开发记录博客 1万+

基于哈夫曼树的数据压缩算法简单实现

本文是记录数据结构习题解析与实验指导的课后实验五—基于哈夫曼树的数据压缩算法。 文章目录1 实验内容2 基本思路3 数据结构代码实现4 全部代码 1 实验内容 描述 输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。 输入 多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。 输出 每组数据输出2n+3行(n为输入串中字符类别的个

爱技术的小白 4403

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5807

数据结构实验课题:基于哈夫曼树的数据压缩算法

#include<bits/stdc++.h> #define Line cout<<"------------------------------------------\n" #define MAX 1000 using namespace std; typedef struct{ int weight; int parent,lchild,rchild...

道阻且长,行则将至 2811

2026年数学建模国赛论文排版规范:Word与LaTeX终极对比及模板

提前演练:不要等到比赛开始才第一次使用排版工具。至少在赛前一个月完成1-2篇模拟论文的全流程排版练习。建立检查清单:基于国赛规范制定排版检查清单,在提交前逐项核对——公式编号连续?图表引用准确?参考文献完整?页数不超限?善用模板但不止于模板:模板提供的是起点而非终点。根据自身需求调整宏包配置和样式参数,理解每一行配置的含义。关注评审体验:从评委的视角审视论文——重点内容是否突出?逻辑结构是否清晰?视觉层次是否合理?备份与容错:无论使用何种工具,建立多级备份机制。本地、云端、U盘各存一份,且定期保存历史版本。

YOLO 210

【即插即用模块】Transformer篇 | CVPR 2025 | SADA:多尺度+可变形采样,完美替换自注意力实现涨点!

文章摘要 本文提出了一种尺度自适应可变形注意力模块(SADA),用于处理图像修复中的结构化伪影问题。SADA通过多尺度多头机制捕获远程依赖关系,并引入可变形采样偏移来有效处理非均匀空间分布的模式。该模块适用于底层视觉任务,可替代ViT自注意力,实验证明能显著提升性能。代码已开源,支持即插即用集成。 核心特点: 多尺度头适应不同大小的重复模式 可变形偏移优化非均匀分布采样 轻量级设计,易于集成到现有架构 适用场景:图像去噪、超分辨率等底层视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1431

【数据结构】基于哈夫曼树的数据压缩算法

本文详细介绍了哈夫曼编码系统的实现方法,包括数据结构设计、核心算法流程以及多语言实现。系统通过最小堆优化构建哈夫曼树的过程,将时间复杂度降至O(nlogn),实现了高频字符短编码、低频字符长编码的变长前缀编码方案。文章展示了从输入字符串到频度统计、树构建、编码生成,再到编解码验证的完整闭环流程,并通过C++、Python、Java三种语言的实现代码,以及运行结果示例,验证了算法的正确性和跨平台适用性。该系统有效平衡了编码效率与存储空间,具有内存安全、功能闭环等优点。

2401_84149564的博客 1419

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于哈夫曼树的英文文本数据压缩算法

数据结构相关算法

GodFishhh的博客 1643

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据结构 基于哈夫曼树的数据压缩算法

数据结构 基于哈夫曼树的数据压缩算法实验目的实验内容 实验目的 1.掌握哈夫曼树的构造算法。 2.掌握哈夫曼编码的构造算法。 实验内容 问题描述 输入一串字符串,根据给定的字符串中字符出现的频率建立相应的哈夫曼树,构造哈夫曼编码表,在此基础上可以对压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。 输入要求 多组数据,每组数据1行,为一个字符串(只考虑26个小写字母即可)。当输人字符串为“0”时,输入结束。 输出要求 每组数据输出2n+3行(n为输入串中字符类别的个数)。第1行

fzyz2333的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据结构“基于哈夫曼树的数据压缩算法”的实验报告

1. 【问题描述】 输入一串字符串,根据给定的字符串中字符出现的频率建立相应的哈夫曼树,构造哈夫曼编码表,在此基础上可以对压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)

weixin_62075168的博客 4037

基于哈夫曼树的数据压缩算法讲解

该算法通过构建一棵二叉树来实现对字符集的压缩,使得出现频率高的字符编码短,出现频率低的字符编码长,从而实现对数据的有效压缩。需要注意的是,在使用哈夫曼树进行数据压缩时,编码表必须与压缩的数据一起存储,否则解压缩时无法还原原始数据。同时,哈夫曼树的构建需要消耗一定的时间和空间,因此在实际应用中需要根据数据的特点进行权衡和选择。对于每个叶子节点,用从根节点到该叶子节点的路径上的 0 和 1 来表示该字符的编码,出现频率高的字符编码短,出现频率低的字符编码长。将字符集中的每个字符根据其对应的编码进行压缩。

weixin_39302449的博客 2254
上一篇: 求子串在母串中出现的次数(C++)
下一篇: 图的应用(校园导航图最短路径求解)
ଳxin
博客等级 码龄8年 83粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值