问题描述:利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码;
在接收端将传来的数据进行译码(复原)。
对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
试为这样的信息收发站写一个哈夫曼码的编译码系统。
基本要求:一个完整的系统应具有以下功能:(l)I:初始化(Initialization)。
从终端读入字符集大小n,及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。
(2)C:编码(Coding)。
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
(3)D:编码(Decoding)。
利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。
(4)P:印代码文件(Print)。
将文件codefile以紧凑格式显示在终端上,每行50个代码。
同时将此字符方式的编码文件写入文件codeprint中。
(5)T:印哈夫曼树(Treeprinting)。
将已在内存中的哈夫曼树以直观的方式(树或凹入表方式)显示在终端上,同时将此字符方式的哈夫曼树写入文件treeprint中。
实现提示根据题目要求把程序划成5个模块,设计成菜单方式,每次执行一个模块后返回菜单。
除了初始化(I)过程外,在每次执行时都经过一次读取磁盘文件数据。
这是为了如果在程序执行后一直没有进行初始化(I)过程,为了能使后面的操作顺利进行,可以通过读取旧的数据来进行工作。
比如:如果程序的工作需要的字符集和权值数据是固定的,只要在安装程序时进行一次初始(I)化操作就可以了。
再在次运行程序时,不管进行那项操作都可以把需要的数据读入到内存。
算法分析本程序主要用到了三个算法。
(1)哈夫曼编码在初始化(I)的过程中间,要用输入的字符和权值建立哈夫曼树并求得哈夫曼编码。
先将输入的字符和权值存放到一个结构体数组中,建立哈夫曼树,将计算所的哈夫曼编码存储到另一个结构体数组中。
(2)串的匹配在编码(D)的过程中间,要对已经编码过的代码译码,可利用循环,将代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较,如果相等就回显并存入文件。
(3)二叉树的遍历在印哈夫曼树(T)的中,因为哈夫曼树也是二叉树,所以就要利用二叉树的先序遍历将哈夫曼树输出。
[测试数据]根据实验要求,在tobetrans.dat中输入"THISPROGRAMISMYFAVORITE",字符集和其频度如下:字符 __ A B C D E F G H I J K L M频度 186 64 23 22 32 103 21 15 47 57 1 5 32 20字符 N O P Q R S T U V W X Y Z 频度 20 56 19 2 50 51 55 30 10 11 2 21 2
2021/11/10 18:15:21 4KB 课程设计 c/c++ 哈夫曼树 编码
1
CreateReactApp入门该项目是通过。
可用脚本在项目目录中,可以运行:yarnstart在开发模式下运行应用程序。
打开在浏览器中查看。
如果进行编辑,页面将重新加载。
您还将在控制台中看到任何棉绒错误。
yarntest在交互式监视模式下启动测试运行程序。
有关更多信息,请参见关于的部分。
yarnbuild构建生产到应用程序build文件夹。
它在生产模式下正确捆绑了React,并优化了构建以获得最佳功能。
最小化构建,文件名包含哈希。
您的应用已准备好进行部署!有关更多信息,请参见有关的部分。
yarneject注意:这是单向操作。
eject,您将无法返回!如果您对构建工具和配置选择不满意,则可以随时eject。
此命令将从项目中删除单个构建依赖项。
相反,它将所有配置文件和传递依赖项(webpack,Babel,ESL
2019/3/11 7:38:34 216KB JavaScript
1
下载解压后安装必要的py程序库再打开cardshiping运行程序及可,详细说明见博主相关引见。
2015/3/20 12:26:19 41.07MB python 车牌识别
1
Isight集成UG和Ansys(包含ugupdata和Isight运行程序及自己写的使用说明),只需安装Isight5.7(及以上版本即可运行),并在软件包中给出了一个集成实例,及本人自己写的完整的说明(内有截图)
2017/7/6 5:56:41 433KB Isight ugupdata Ansys UG
1
该项目是通过。
可用脚本在项目目录中,可以运行:npmstart在开发模式下运行应用程序。
打开在浏览器中查看。
如果进行编辑,页面将重新加载。
您还将在控制台中看到任何棉绒错误。
npmtest在交互式监视模式下启动测试运行程序。
有关更多信息,请参见关于的部分。
npmrunbuild构建生产到应用程序build文件夹。
它在生产模式下正确捆绑了React,并优化了构建以获得最佳功能。
最小化构建,文件名包含哈希。
您的应用已准备好进行部署!有关更多信息,请参见有关的部分。
npmruneject注意:这是单向操作。
eject,您将无法返回!如果您对构建工具和配置选择不满意,则可以随时eject。
此命令将从项目中删除单个构建依赖项。
而是将所有配置文件和传递依赖项(Webpack,Babel,ESLint等)直接复制到您的项目中,以
2021/5/16 11:48:45 395KB JavaScript
1
#OOP(机试)本程序总结文章:http://blog.qiji.tech/?p=10344---##程序基本要求一、项目名称:AirInfomationProgramming基于控制台的航班信息程序,简称AIP二、具体要求如下:(1)显示航班信息程序主菜单,如图-1所示,包括:*1)列出所有航班*2)按起飞时间查询*3)按目的地查询*4)删除航班*5)更新航班*6)退出系统(2)列出所有航班:查出所有航班的信息,以列表方式显示,包括:编号,航班号,目的地,起飞日期。
(3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。
(4)按目的地查询:输入目的地,查出所有飞往此地的航班。
(5)删除航班:删除指定编号的航班。
(6)更新航班:更新指定编号的航班。
(7)退出系统。
三、类的设计需要定义如下类*航班信息实体类(AirInfo)*航班编号(id)*航班号(flight_number)*目的地(destination)*起飞日期(flight_date)*航班信息管理类AirInfoManager类*程序入口类TestAirInfo类四、具体要求及推荐实现步骤1.创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。
1.创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出程序的方法。
2.创建TestAirInfo类,启动和运行程序。
3.航班的信息用ArrayList(或数组)保存。
4.要求代码规范,命名正确。
---
1
把该程序包解压后即可直接运行,程序中设置了GUI界面方便操作,对倾斜的车牌添加了倾斜矫正程序,内含车牌的素材和程序报告!
2019/10/16 14:19:04 19.55MB 车牌识别 Matlab
1
《数据结构》(C语言版)算法源码及运行演示系统使用说明一、启动演示系统双击演示系统应用程序文件“DS_VC_ALGO.EXE”启动演示系统,出现图1所示界面。
图1《数据结构》(C语言版)算法源码及运行演示系统主界面二、演示系统使用步骤除了个别算法之外,演示系统给出了《数据结构》(C语言版)书中算法对应的程序代码(CPP文件)和测试运行程序(VC++6.0的EXE文件)。
通过本系统,可以显示算法的源代码以及运行结果。
具体操作步骤如下:1.选择相应章单击演示系统界面右侧章选择按钮。
例如,要选择第6章,则单击“第6章”选择按钮。
当相应章被选择后,窗口的右侧部分将列出本章的算法选择按钮。
例如,选择第6章后,窗口的右侧部分将显示第6章中的算法6.1-6.13和6.15的选择按钮。
由于书中的算法6.14和6.16只是示意性算法,故未给出源码,其按钮上的文字为灰色,处于“无效”状态。
2.选择相应章中的算法单击窗口右侧部分所列举的本章某个算法选择按钮,被选择的算法的源码将在窗口左侧空白区域中显示。
对于较长的源码,单击显示区域后,可用键盘的光标键和翻页键浏览源码。
例如,选择了第6章中的算法6.5后界面如图2所示:图2选择算法6.53.运行测试程序单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。
若运行按钮为灰色,表示该算法无单独测试程序。
例如,算法6.5的测试运行窗口如图3所示:图3测试运行窗口测试运行说明:测试运行窗口显示程序的执行过程及结果。
若在显示过程中出现运行窗口无法正常演示的情况,只需调节运行窗口大小即可正常显示(调节最小化按钮或窗口最大化/还原按钮“”)。
三、退出演示系统使用完毕后,单击窗口右上角关闭按钮“”退出演示系统。
四、测试程序示例在《数据结构》的课程教学中,各抽象数据类型的设计与实现是重要的学习和实践环节。
为此,本系统只给出了各算法源码的测试程序的可执行文件。
在此,给出算法6.5的测试程序示例,以供参考。
算法6.5是中序遍历线索二叉树的非递归算法,要对其源码进行测试,可首先调用算法6.6及6.7建立中序线索二叉树。
以下是测试程序的源码,相关类型和辅助函数定义在文件include06.h和include06.cpp中,此略。
//test0605.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"include06.h"//相关类型和辅助函数的定义BiThrTreepre;//线索二叉树遍历辅助变量#include"algo0607.cpp"//算法6.7源码#include"algo0606.cpp"//算法6.6源码#include"algo0605.cpp"//算法6.5源码intmain(intargc,char*argv[]){chargl_str[64];BiThrTreeT;BiThrTreeThrt;printf("*******************************************\n");printf("*《数据结构》(C语言版)严蔚敏,吴伟民*\n");printf("*算法6.5,6.6&6.7*\n");printf("*******************************************\n");srand((unsigned)time(NULL));//随机函数初始化T=NULL;//空二叉树Tfor(intpass=0;pass<5;pass++){//测试运行5次,第一次为空树outBiThrTree(T,gl_str);//以类广义表的方式输出二叉树T到gl_strprintf("T=%s\n",gl_str);//显示pre=NULL;Statusr=InOrderThreading(Thrt,T);//算法6.6,6.7,中序线索化printf("InOrderThreading(Thrt,T):%s\n",(r)?"OK":"ERROR");initVisitStr();//将visitStr清为空串InOrderTraverse_Thr(Thrt,v
2018/10/26 23:48:18 2.92MB 严蔚敏 数据结构 C语言 源代码
1
go开发实战.doc非常实用的快速入门手册,知识点很全面,例子也比较丰富。
目录1.初识Go语言11.1Go语言引见11.1.1Go语言是什么11.1.2Go语言优势11.1.3Go适合用来做什么21.2环境搭建21.2.1安装和设置21.2.2标准命令概述21.2.3学习资料21.3第一个Go程序31.3.1HelloGo31.3.2代码分析31.3.3命令行运行程序42.基础类型42.1命名42.2变量52.2.1变量声明52.2.2变量初始化62.2.3变量赋值62.2.4匿名变量62.3常量72.3.1字面常量(常量值)72.3.2常量定义82.3.3iota枚举82.4基础数据类型102.4.1分类102.4.2布尔类型112.4.3整型112.4.4浮点型112.4.5字符类型112.4.6字符串122.4.7复数类型122.5fmt包的格式化输出输入132.5.1格式说明132.5.2输出142.5.3输人142.6类型转换152.7类型别名153.运算符153.1算术运算符153.2关系运算符163.3逻辑运算符163.4位运算符163.5赋值运算符173.6其他运算符173.7运算符优先级174.流程控制184.1选择结构184.1.1if语句184.1.2switch语句194.2循环语句204.2.1for204.2.2range204.3跳转语句214.3.1break和continue214.3.2goto215.函数225.1定义格式225.2自定义函数225.2.1无参无返回值225.2.2有参无返回值235.2.3无参有返回值245.2.4有参有返回值255.3递归函数265.4函数类型275.5匿名函数与闭包275.6延迟调用defer305.6.1defer作用305.6.2多个defer执行顺序305.6.3defer和匿名函数结合使用315.7获取命令行参数315.8作用域325.8.1局部变量325.8.2全局变量335.8.3不同作用域同名变量336.工程管理346.1工作区346.1.1工作区引见346.1.2GOPATH设置356.2包356.2.1自定义包356.2.2main包366.2.3main函数和init函数366.2.4导入包386.3测试案例406.3.1测试代码406.3.2GOPATH设置426.3.3编译运行程序436.3.4goinstall的使用437.复合类型457.1分类457.2指针457.2.1基本操作457.2.2new函数467.2.3指针做函数参数467.3数组477.3.1概述477.3.2操作数组477.3.3在函数间传递数组487.4slice497.4.1概述497.4.2切片的创建和初始化497.4.3切片的操作507.4.4切片做函数参数527.5map537.5.1概述537.5.2创建和初始化537.5.3常用操作547.5.4map做函数参数557.6结构体567.6.1结构体类型567.6.2结构体初始化577.6.3结构体成员的使用577.6.4结构体比较587.6.5结构体作为函数参数597.6.6可见性598.面向对象编程618.1概述618.2匿名组合618.2.1匿名字段618.2.2初始化628.2.3成员的操作628.2.4同名字段638.2.5其它匿名字段648.3方法658.3.1概述658.3.2为类型添加方法668.3.3值语义和引用语义678.3.4方法集688.3.5匿名字段708.3.6表达式718.4接口738.4.1概述738.4.2接口的使用738.4.3接口组合758.4.4空接口778.4.5类型查询779.异常处理799.1error接口799.2
1
这是《Linux内核完全剖析》一书中的例子,书中是用AS汇编语言格式写的,网上也有用NASM语言改写,这里只是将前人的工作重做一次,里面有完整的源代码,文档,可运行程序。
看懂这个例子,对看Linux内核很有协助,相信我,没错。
2020/4/27 8:04:09 114KB 多任务 内核
1
共 232 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡