資訊理論上學習了fano編碼,所以就嘗試著自己寫一遍fano編碼
#include "iostream"
#include #include "map"
#include "string"
#include "math.h"
using namespace std;
multimap> w;
void show(multimap> word);
typedef decltype(w.begin()) map_pointer;
int initial(string file_name, int max));
} if ((probability - 1) < 0.0001)else
}int make_code(map_pointer high_pointer, map_pointer low_pointer)
if (lp != low_pointer)
return 1;
}else if (high_value >= low_value)else }}
void show(multimap> word)
}int main()else
system("pause");
}
需要注意的地方是,initial函式初始化時讀取的text文字請按以下格式
最後上傳乙個68個字元概率的檔案(空格用下劃線_代替)
0.02 _
0.012 ,
0.009 .
0.0037 ?
0.0009 ;
0.0031 !
0.00029 a
0.0014 b
0.00072 c
0.0009 d
0.0006 e
0.00071 f
0.0037 g
0.00051 h
0.00032 i
0.001 j
0.00081 k
0.00022 l
0.00021 m
0.00023 n
0.00024 o
0.00002 p
0.00038 q
0.0002 r
0.0005 s
0.0007 t
0.00027 u
0.00003 v
0.0008 w
0.0017 x
0.0003 y
0.0019 z
0.064 a
0.013 b
0.0061 c
0.0246 d
0.0663 e
0.0111 f
0.0913 g
0.0555 h
0.09 i
0.02173 j
0.002 k
0.0064 l
0.0084 m
0.1254 n
0.07 o
0.0068 p
0.0059 q
0.0083 r
0.0219 s
0.0172 t
0.0936 u
0.00001 v
0.017 w
0.009 x
0.054 y
0.03 z
0.00131 0
0.00131 1
0.00131 2
0.00131 3
0.00131 4
0.00131 5
0.00131 6
0.00131 7
0.00131 8
0.00131 9
遞迴 遞迴演算法的非遞迴優化
一 遞迴 在方法內部呼叫自身方法的過程稱為遞迴,下面給出乙個遞迴方法的示例。class program 使用遞迴,實現求前n項和 public static int getsum int n int result getsum n 1 在方法體中呼叫方法本身 return result n 需要注意...
huffman編碼的MATLAB遞迴實現
huffman.m huffman編碼的遞迴實現。輸入 input 第一列為值,第二列為各個值的概率。codein,輸入即可,沒用,作遞迴時用到。輸出 output 排序後的input。code 對應p每行的huffman編碼。key 沒用,設為 即可,作遞迴時用到。參看測試 huffmantest...
演算法 遞迴演算法
遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...