最近研究了下LZW算法,也看了很多这个方面的资料。LZW适合于文本文件,对于稍稍大点的流文件则出现压缩出来的文件大于源文件的情况。LZW有很多著名的实现程序,下面的程序以动态增加位数为出发点,利用哈希表来实现LZW的压缩。 哈希算法有二个,一个被我注释掉,二个都可以用。具体哪个好,我自己也没有测试。
/**********************************************************************
***********************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define hashsize 4096
#define clear 256 /*清除标志位*/
#define teminate 257
#define not_used -1
#define MAXVAL(n) (( 1 <<( n )) -1)
#define max_bits 12
FILE *in;
FILE *out;
int bitsize = 9;
int maxcode;
/*字典数据结构*/
typedef struct prex_cha{
int value; /*值*/
unsigned int prefix; /*字符串*/
unsigned int character; /*追加的字母*/
}Hash_Table;