matlab用雙重迴圈實現費諾編碼

2021-08-20 19:45:25 字數 2465 閱讀 9964

2.      費諾編碼實現的程式設計方向的選擇:遞迴or迴圈?

用遞迴方法實現費諾編碼,邏輯思路無疑是最清晰和最好理解的。

function [y]=fano(大小1xn的概率矩陣b)

***x;     %

排序,分組,分配0、

1碼等操作

if(不滿足遞迴返回條件)    %

遞迴返回判斷

fano(b的子矩陣1); %

以靠前的分組為新引數,呼叫自身

fano(b的子矩陣2);  %

以靠後的分組為新引數,呼叫自身

endend

函式基本的邏輯描述:

求分組概率和a,求前i項累加概率,若大於a/2,分配0/1碼à對兩個新分組再呼叫自身。

遞迴返回條件的討論:(如何判斷某一分支的編碼已經完成)

遞迴程式設計雖然非常簡單直觀,便於理解,但是非常的吃記憶體,而且matlab也不贊成遞迴,無論是直接的,還是間接的。詳見:

(只關注概率行向量裡的某乙個元素的編碼,在編碼過程中,對之進行」追蹤」,得到其費諾編碼。同樣的過程,對概率行向量裡的每個元素都進行一遍,即可得到所有元素的費諾編碼。

3.      用雙重迴圈實現費諾編碼的過程及步驟

用乙個while迴圈解決分組內元素數目大於2的情況

分組元素數目等於2時,另行處理

(分組內數目數目等於1時,其編碼在上一次分組時已經完成,故而不討論)

4.      不等長的費諾編碼的碼字儲存問題

解決辦法:利用

matlab

的字元向量元胞陣列

1.        將元胞字元向量轉化為一般字元向量(cell2mat)

char=cell2mat(c);

2.        對轉化後的字元向量執行連線』0』或者』1』的操作

char=[char '0'];或者char=[char '1'];

3.        將操作完成後的一般字元向量重新賦給元胞字元向量

c=;

程式設計思路:

1.引數a為待編碼的概率行向量,b為a的降序排序

2.用陣列z來儲存b中各個元素所在分組的元素總數(初始值為b的長度)

3.用m、n記錄b中當前正在編碼的元素所在的分組的起始和終止位置

4.用空的元胞字元向量陣列c存放編碼的碼字(c的長度等於b的長度)

實現**:

function y=fano_code(a)

b=fliplr(a);

[m,n]=size(b);

m=1;

n=n;

z=ones(1,n).*n;

for j=1:n

c(j)=;

endfor i=1:n

while(z(i)>2)

a=sum(b(1,m:n),2)/2;

for k=m:n

if sum(b(1,m:k),2)>=a

if i<=k

char=cell2mat(c(i));

char=[char '0'];

c(i)=;

n=k;

z(i)=n-m+1;

break;

else

char=cell2mat(c(i));

char=[char '1'];

c(i)=;

m=k+1;

z(i)=n-m+1;

break;

endend

endend

if z(i)==2

if i==m

char=cell2mat(c(i));

char=[char '0'];

c(i)=;

else

char=cell2mat(c(i));

char=[char '1'];

c(i)=;

endend

m=1;

n=n;

endcelldisp(c);

end

雙重while迴圈實現列印數字11 99

問題 為什麼下面的while雙重迴圈是這樣的結果?x 1 y 1while true while y 9 x x 1 y y 1 print x 10 y 執行結果 分析 這是程式執行流程 x 2,y 2,x 10 y 22 x 3,y 3,x 10 y 33 x 9,y 9 y之前為8,符合內層迴...

小程式雙重for迴圈實現tab切換小demo

pages test test.js page clickhandle e 生命週期函式 監聽頁面載入 onload function options console.log a,b this.setdata console.log this.data.a,jjj 生命週期函式 監聽頁面初次渲染完成...

怎樣用matlab實現do while

matlab 中的while迴圈只有 while statement end 這種迴圈結構。有時候由於問題的需要,使用do.while 結構能夠更好的解決問題。其實仔細分析一下,do while 的結構就是可以保證先執行一次操作,再進行判斷。而while 條件 是先對條件進行判斷來決定是否採取相應的...