MFC 已知结点的权值,画出最优二叉树,动态显示

qq_35703670 2017-07-12 03:50:34
MFC 已知结点的权值,画出最优二叉树,动态显示
...全文
168 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-07-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/qq_28410301/article/details/49884631
1.纸牌游戏 任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些? 题目比较简单。但用了MFC的一些知识,实现了图形化,比较形象。 2.哈弗曼压缩 实现哈弗曼压缩及解压缩功能,并计算压缩前后文件占用空间比 模型建立与题目分析 压缩: 以二机制可读形式打开源文件,以二进制可写形式打开压缩目标文件。每次从源文件读取八个比特(一字节),作为一个ASCII码,并统计所有出现的字节的频率,将字节作为哈夫曼数的叶子结点插入到一个链表中。然后根据链表建立哈夫曼树,按照哈夫曼算法对所有出现的字节编码。然后重新从头开始读源文件,每次读入一字节,从哈夫曼树相应叶子结点移到树的根结点,在找的过程中,把其哈夫曼编码存入一个栈,把栈中所有元素(0或1)写到缓冲区,如果缓冲区比特数到8了,则将缓冲区的8个比特(一个字节)写入压缩文件。如果最后缓冲区不到8比特,则在低位补零,补齐8位后写入压缩文件。 解压: 以二进制可读形式打开解压文件,以二进制可写形式打开解压目标文件。每次从解压文件读一个字节,放入缓冲区,然后从缓冲区每次读一个比特。在建立的哈夫曼树中,从根结点开始,取出的比特为0则取左孩子,为1取右孩子,直至到叶子结点,把叶子结点的字节(ASCII码)写入解压目标文件。读到缓冲区为空时,再读入一个字节,重复上述操作,直到读完压缩文件。 模型实质: 以二进制读取文件。从源文件每次读一个字节(8比特),并统计所有出现字节的频率,根据频率对所有字节以频率作为权值建立哈夫曼树,对每个字节重新编码。根据新的编码进行编码译码。 算法设计与分析 如果已知出现字符的出现频率,将较短的比特串分给高频字符,将较长的比特串分给低频字符,则会到压缩文件的目的。哈夫曼编码就是利用这一点,以字符作为叶子结点,以其频率作为权值,建立最优二叉树。 一 下面先重点讨论一下建立哈夫曼数的算法。哈夫曼算法: 根据给定叶子结点及其权值(这里即字符及其频率)构成二叉树的集合,每个叶子结点作为一棵树的根结点。 在二叉树集合中选取根结点权值最小的树作为左右子树构造新的二叉树,且新二叉树的权值为左右子树权值之和。 从二叉树集合中删除这两棵树,将新构造的树加入集合 4 . 重复2,3,直至二叉树集合中只有一棵树。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧