求高手C演算法指導

2021-03-06 02:44:50 字數 1451 閱讀 1003

1樓:匿名使用者

算術編碼用c++的實現

算術編碼在圖象資料壓縮標準(如jpeg,jbig)中扮演了重要的角色。在算術編碼中,訊息用0到1之間的實數進行編碼。算術編碼用到了兩個基本的引數:

符號的概率和它的編碼間隔。信源符號的概率決定壓縮編碼的效率,也決定編碼過程中信源符號的間隔,而這些間隔包含在0到1之間。編碼過程中的間隔決定了符號壓縮後的輸出。

算術編碼需要輸入的是符號,各個符號的概率還有需要編碼的符號串行,根據概率可以算出初始編碼間隔,先設幾個變數在後面可用:high——當前編碼的上限,low——當前編碼的下限,high——中間變數,用來計算下乙個編碼符號的當前間隔的上限,low——中間變數,用來計算下乙個編碼符號的當前間隔的下限,d——當前間隔之間的距離。第1個編碼符號的當前間隔為其初始的編碼間隔,第i個編碼符號的當前間隔為第i-1個編碼後的[low,high),第i+1個編碼符號的當前間隔演算法如下:

high=low+d*第i+1個初始編碼符號對應的上限,low=low+d*第i+1個編碼符號對應的下限,然後high=high,low=low,d=d*第i個編碼符號的概率。

編碼程式如下:

#include

#define m 100

#define n 4

class suanshu

void get_number();

void get_code();

void coding();

~suanshu(){}

};void suanshu::get_number()

if(i==20)

cout<<"the number is full."<>length;

while(length>=m)

for(int i=0;i>code[i];}}

void suanshu::coding()

else

}else continue;

}cout<<"the result is:"<

}int main()

本程式在vc6.0和xp專業版下執行通過,這是我個人第一次用c++寫的比較完整的程式,還有些不盡人意的地方,比如變數和函式命名不太專業,以後會注意,慢慢也會好的。呵呵~

2樓:匿名使用者

將n劃分成k個數的劃分法:

dp[n][k]= dp[n-k][k]+ dp[n-1][k-1];

方法可以分為兩類:

第一類: n 份中不包含 1 的分法,為保證每份都 >= 2,可以先拿出 k 個 1 分到每乙份,然後再把剩下的 n- k 分成 k 份即可,分法有: dp[n-k][k]

第二類: n 份中至少有乙份為 1 的分法,可以先那齣乙個 1 作為單獨的1份,剩下的 n- 1 再分成 k- 1 份即可,分法有:dp[n-1][k-1]

3樓:匿名使用者

c語言語法不會還是演算法不會?

matlab em演算法 求高手看看哪裡錯了

我執行了你的程式,可以執行,但是輸出結果全是nan。原因在與你的x1 x2 y1 y2 z,x y z本應該是個50 1的陣列,但是你這的y只有y 1 的值,所以,x i y i 的值都是無意義的nan值,如有沒有搞錯的話,你看是不是定義了x y陣列的值,把定義的陣列值給上。如何用matlab實現e...

數學題求高手指導

觀察規律 1.1004 1 1004 1 2.1003 1 0 1 1003 2 3.1002 1 0 0 0 1 1002 2 4.1001 1 0 1 0 1 0 1 1001 4 5.1000 1 0 0 0 0 0 0 0 1 1000 2 6.0999 1 0 1 0 0 0 0 0 1 ...

求c語言程式設計高手幫忙,求C語言程式設計高手幫忙!!!

初看,程式應先宣告乙個包含20個整型數元素的陣列,但從程式目標來看,根本不需要所有的數,而只需找出次大的數而已,所以只要宣告三個整型變數 輸入 input 最大數 max 次大數 sec 即可。而且從記憶體利用率來看,這樣也更節省記憶體空間。以下程式你的所有要求都滿足了,僅供參考 include c...