我们知道,霍夫曼编码的基础是进行词频统计。然后依据统计数据,构建霍夫曼树,进而得到霍夫曼编码表。利用霍夫曼编码表,就可以进行压缩工作了。
这里,用VBS的二维数组,来对一个字符串str = "0123456789abcdef2222222aaaaabbbcc",进行词频统计,然后进行排序。
Public Function cnt(str,x)
str = UCase(str)
x = UCase(x)
cnt = UBound(Split(str,x))
End Function
Dim a(15,1),i,j,k,l
str = "0123456789abcdef2222222aaaaabbbcc"
For i = & h0 To & hf
a(i,0) = Hex(i)
a(i,1) = cnt(str,Hex(i))
Next
For l = 0 To UBound(a)
data = data & "未排序结果为:" & a(l,0) & "出现次数" & a(l,1) & vbLf
Next
MsgBox data
data = ""
For j = 0 To 15
For k = j To 15
If a(j,1) < a(k,1)Then
tmp1 = a(j,1)
a(j,1) = a(k,1)
a(k,1) = tmp1
tmp2 = a(j,0)
a(j,0) = a(k,0)
a(k,0) = tmp2
End If
Next
Next
For l = 0 To UBound(a)
data = data & "排序后结果为;" & a(l,0) & "出现次数" & a(l,1) & vbLf
Next
MsgBox data
data = ""
有了这个基础的词频统计功能,那么,我们就可以继续进行字符串压缩工作了,更进一步,就是文件压缩了。
首先,用VBS将文件进行二进制读取;然后,用词频统计对文件词频进行统计;接着,依据统计数据,构建霍夫曼树,进而得到霍夫曼编码表;
最后,压缩。