完整资料进入【数字空间】查看——baidu搜索"writebug"
该软件可实现如下功能:
用户可以通过点击“打开文件”按钮打开本地计算机中任意一个文本文件,点击确认将其文本导入到程序输入文本框中,也可以直接在文本框中通过键盘键入文本。
文本支持 UTF-8 格式,可以随意输入英文、数字和中文交给程序运行处理。
点击“开始”按钮可以开始程序,点击后该按钮变成“终止”按钮,点击即可终止程序。程序执行过程中,首先将字符逐个添加到右侧的编码表中,新添加一栏或者频率加一,正在处理的字符在文本框和编码表内都会有高亮颜色突出显示,不同的字符也会随机赋予不同的颜色显示,进行有效区分。
会按照字符出现频率将字符从上到下排序,出现频率即对应权重,首先将所有字符输入到树结构中当做初始节点,然后按照构建哈夫曼树的算法逐渐把节点按权重升序添加到哈夫曼树中,中间的树视图会将这一过程进行动态展示,过程中会对当前添加节点进行高亮颜色突出显示。
哈夫曼树建好之后,根据各个节点在树上的位置,对各个字符进行编码,显示到右侧的编码表中。
获得了字符编码后,即可对字符串的哈夫曼编码进行动态输出,输出在左下角的富文本框中,同样的,输出过程会有当前字符及其对应编码的高亮显示。
点击“停止”按钮可在程序执行过程中暂停程序,点击后按钮变为“继续”,再次点击即可继续执行。
当上一步点击“停止”后,可以点击“下一步”按钮,一步步的进行程序运行,仔细观察程序运行的每一步。
配有速度拖动条可以动态调节程序执行速度,每一步 1ms-1800ms 的变化区间,非常灵活,是通过控制 timer 控件的间隔来实现的。
程序会显示当前的运行步骤,主要有五个阶段(终止,读入,建树,编码,输出)
随机生成颜色种子,不同的字符会有不同的颜色显示,包括其对应的编码。
通过 ToolTip 控件,当程序执行完后,鼠标落在树节点上会显示树节点的路径权重编码信息,直观明了。
设计思想
可视化图形界面采用 C# .net framwork 编写,初步接触窗体程序设计,感觉和网页页面的前端后端类似,“前端”即窗体程序显示界面,通过.net framework 框架工具箱里的各个组件灵活进行搭配,至于“后端”,即各个模块对应的处理程序代码及其相应的算法。题目要求通过多种方式读入字符串,我考虑通过调用计算机本地文本文件或者直接输入两种方式输入字符串,这就需要一个按钮调用 openFileDialog 组件和一个文本输入框,题目要求给出哈夫曼树的构建显示过程并输出哈夫曼编码,没有涉及到解码过程,这就简单多了,哈弗曼编码的过程简单说就是先对所有字符排序,把它们当做初始节点,然后按照权重由小到大一个一个往哈夫曼树里增添。最后根据字符在哈夫曼树中的位置,进行相应的 0、1 编码,这样每个字符都会获得自己的一个独有的编码,最后按照字符串中字符的顺序依次输出编码,初始想法是这样。因此需要输入模块、控制模块、执行模块、输出模块,每个模块都会有不同的属性和功能。因此,首先通过 VS 可视化操作将整体页面设计完善,然后进入代码页面赋予对应模块相应的功能,最后达到程序正常运转。之后考虑到调整程序速度或者逐步执行以便详细观察哈夫曼编码过程,考虑添加 timer 计数器模块,通过控制其计时间隔控制程序执行速度,开始或者暂停。