2005年にMizki_Fさんがese-packという圧縮/解凍ソフトを作っていますね
その中に外部DLL不要でハフマン符号化できるモジュールが入っています
http://www.onionsoft.net/hsp/contest2005/list_n4.html
考えることは同じようですねw
2つの速度を比較するソースを書いてみました
#uselib "winmm.dll"
#cfunc msec "timeGetTime"
#include "mod_bitio.hsp"
#include "mod_huffman.hsp"
#include "Huffman4hsp.as"
filename = "Huffman4hsp.as"
s_time = 0
e_time = 0
encsize = 0
exist filename
filesize = strsize
sdim filedata,filesize+1
sdim encdata,filesize*2
sdim decdata,filesize+1
bload filename,filedata
mes "入力ファイルサイズ " +filesize+"B"
mes
mes "mod_huffmanで符号化開始"
init_huffman
s_time = msec()
h_encode encdata,filedata,filesize
encsize = stat
e_time = msec()
mes " 出力ファイルサイズ " +encsize+"B"
mes " 圧縮率 "+((1.0*encsize)/(1.0*filesize)*100)+"%"
mes " 符号化にかかった時間 "+(e_time-s_time)+"ms"
mes "mod_huffmanで復号開始"
s_time = msec()
h_decode decdata,encdata,filesize,encsize
e_time = msec()
mes " 復号にかかった時間 "+(e_time-s_time)+"ms"
//初期化
sdim encdata,filesize*2
sdim decdata,filesize+1
s_time = 0
e_time = 0
encsize = 0
plabel = *label
mes
mes "Huffman4hspで符号化開始"
s_time = msec()
hfmn4hsp_enc filedata, filesize, encdata, plabel, 0x7FFFFFFF
encsize = stat
e_time = msec()
mes " 出力ファイルサイズ " +encsize+"B"
mes " 圧縮率 "+((1.0*encsize)/(1.0*filesize)*100)+"%"
mes " 符号にかかった時間 "+(e_time-s_time)+"ms"
mes "Huffman4hspで復号開始"
s_time = msec()
hfmn4hsp_dec encdata, decdata, plabel, 0x7FFFFFFF
e_time = msec()
mes " 復号にかかった時間 "+(e_time-s_time)+"ms"
stop
*label
return
mod_huffman.hspは進捗をtitleで表示する機能がありますが計算部分を含めてコメントアウトしています
結果として、Huffman4hspがmod_huffmanと比較して符号化は2倍ほど早く、復号化が4倍ほど遅いようです
しかしそれは数百KBのデータの話で、数MBあるデータをHuffman4hspで復号化すると符号化に比べ10倍以上遅くなります
なんででしょう…