一、题目简介 一套完整的编码译码系统应该具有以下功能:(1)I:初始化(initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树。并将他存于文件hfmtree.txt中。(2)E:编码(encoding)。利用已经建立好的赫夫曼树(如不在内存,则从文件hfmtre...
分类:
其他好文 时间:
2015-04-26 16:30:05
阅读次数:
208
杂谈:最近有点慵懒,不好不好。好几天都没写代码,原本准备上星期完结 树 这一章节的。现在 又耽误了。哎。要抓紧时间啊。
下面直接上代码:
可以到我的网盘下载源代码,或者 直接拷贝下面的源代码 运行
// HuffmanTree.cpp : 定义控制台应用程序的入口点。
//哈弗曼编码,译码
#include "stdafx.h"
#include
#include
enum E_...
分类:
其他好文 时间:
2015-03-31 16:09:19
阅读次数:
177
一、赫夫曼树定义与原理
1.路径长度:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径的长度;
2.树的路径长度:即从树根到每一结点的路径长度之和;
3.结点的带权的路径长度:即从该结点从到树根之间的路径长度与结点上权的乘积;
4.树的带权路径长度:为树中所有叶子结点的带权路径长度之和;
5.赫夫曼树定义:假设有n个权值{w1,w2,....,wn},...
分类:
其他好文 时间:
2015-03-20 01:25:30
阅读次数:
141
原文:经典算法题每日演练——第十三题 赫夫曼树 赫夫曼树又称最优二叉树,也就是带权路径最短的树,对于赫夫曼树,我想大家对它是非常的熟悉,也知道它的应用场景,
但是有没有自己亲手写过,这个我就不清楚了,不管以前写没写,这一篇我们来玩一把。 一:概念
赫夫曼树里面有几个概念,也是非常简单的,先来看下面的...
分类:
编程语言 时间:
2015-01-16 12:46:45
阅读次数:
296
既然我们要学习赫夫曼树,那么我们首先就要知道什么叫赫夫曼树。那么什么叫赫夫曼树呢?一、什么叫赫夫曼树?书上说:“赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,但是我们仅学习最优二叉树。”看到这个还是不明白什么意思,因此在学习之前我们要结合这个图了解几个基本概念。路 径:由一结点....
分类:
其他好文 时间:
2014-12-31 22:44:57
阅读次数:
215
头文件huffman.h
#ifndef _HUFFMAN_H_
#define _HUFFMAN_H_
#define MAX_WEIGHT 10000
typedef struct _HTNode
{
int weight;
int parent,lchild,rchild;
char data;
}HTNode,*pHTNode;
ty...
分类:
其他好文 时间:
2014-12-28 10:30:09
阅读次数:
117
使用 最小优先队列存放要编码的key,和合并之后内部节点,注意最小优先队列,获得最小值时会把最小是删掉,下面是java实现。
package Algorithms;
class MinQueue>{
int heapSize;
T[] heap;
int capacity;
public MinQueue(int capaticty)
{
this.capacity=capatic...
分类:
其他好文 时间:
2014-11-16 18:46:06
阅读次数:
305
采用优先队列把一个普通线性表改造成赫夫曼树,再进行赫夫曼编码,得到一个同时记录了明文和对应编码的密码本。使用优先队列(最小堆)构造赫夫曼树是一种高效的方法,比每次都遍历整个线性表要快很多。我在构造密码本时确保密码本数组递增排序,这样每次插入新结点时可以折半查找插入,效率较高。有序的密码本在把明文编码成密文时也可以大大提高查找效率。...
分类:
其他好文 时间:
2014-09-28 16:14:43
阅读次数:
319
赫夫曼树及其应用赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用。最优二叉树(Huffman树)1 基本概念① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径。② 路径长度:结点路径上的分支数目称为路径长度。③ 树的路径长度:从树根到每一个结...
分类:
编程语言 时间:
2014-08-07 12:12:30
阅读次数:
385
关于赫夫曼编码和赫夫曼树的相关知识可参考之前两篇文章(由二叉树构造赫夫曼树、赫夫曼编码)。本文介绍另一种构建赫夫曼树的方式,采用优先队列.
步骤:
1.首先我们需要统计不同字符出现的次数。一个字符出现的次数越多,说明其优先级越高,其赫夫曼编码应该越短;
2.将待编码的字符(即带权节点)存入优先级队列,优先级即字符出现的次数;
3.不断迭代队列,直到队列中剩下一个元素...
分类:
其他好文 时间:
2014-06-22 13:53:31
阅读次数:
255