乾糧 — 電腦程式設計藝術(The Art of Computer Design) – 1

來源:互聯網
上載者:User

CHAPTER ONE

1.1   演算法

解決的問題:什麼是演算法.

 

舉例:

演算法E(歐幾裡得演算法):給定兩個正整數m和n,求他們的最大公因子.

E 1. (求餘數)以n除m並令r為所得餘數(0≤r<n).

E 2. (餘數為0?)若r=0 演算法結束;n即為答案.

E 3. (互換)令m←n, n←r,並返回步驟E1

框圖如下:

演算法的五個特性:

1)   有窮性 一個演算法必須總是在執行有窮步之後結束.演算法E是滿足該條件的.因為在步驟E1之後,r<n,所以如果r≠0,下一次執行步驟E1時,n的值已經減小,正整數的遞降序列一定會終止,因此對於任意的m和n,演算法E肯定會在有窮次後結束.

2)    確定性 演算法的每一個步驟必須是確切定義的

3)    輸入 一個演算法必須有0個或多個輸入(E中有兩個輸入m和n)

4)    輸出 一個演算法必須有一個或多個輸出(E中最終輸出的n)

5)    可行性 一般來說,還期望一個演算法是可行的.

演算法的5個特性中,有窮性顯然是不夠的,因為一個演算法不光要可以執行,而且要高效.

演算法的數學定義:

藉助數學的集合論思想,我們可以定義演算法如下:一個計算方法是一個四字式(Q,I,Ω,f),其中q是一個包含I和Ω的集合,f是由Q到它自身的一個函數. f應當保留Ω的每個元素不動(me:注意Ω是輸出集合.),也就是說,對於Ω中的所有元素q 必有f(q)=q. 這四個量Q,I, Ω,f 分別用來表示計算的狀態,輸入,輸出和計算的規則. 集合I中的每個輸入定義一個計算序列x0, x1, x2... 如下:

x0 = x 且 xk+1 = f(xk) 對於任意的 k≥0                                                                          (1)

如果有k是使得xk在Ω中的最小整數(此處的最小是k最小,而不是xk),則稱計算序列在第k步終止. 這種情況下也說:x產生輸出xk(注意,如果xk在Ω中,則xk+1也是,因為在這樣的情況下, xk+1=xk(me:對於輸出集合歐姆f將其中的任意元素q映射到自身q,即f(q)=q)).某些計算序列可能永不終止,而一個演算法是對於I中的所有元素x,都在有窮多的步驟內終止的一個計算方法.

(me:一個演算法是一個有窮的計算方法.而一個計算方法是一(Q,I,Ω,f)的四元組)

例子:演算法E,設Q為所有的單個數 (n) 所有的有序偶 (m,n) 和所有有序的四字式(四元組)(m,n,r,1),(m,n,r,2)以及(m,n,p,3)的集合,其中m,n和p為正整數,而r是一個非負整數.設I是所有有序偶(m,n)做成的子集,並設Ω是所有單個的數(n)的子集.設f定義如下:

f(m,n) = (m,n,0,1); f(n) = n;

f(m,n,r,1)  =  (m,n,m%n,2);

f(m,n,r,2)  =  (n) 如果r=0, 否則(m,n,r,3).

f(m,n,p,3)  =  (n,p,p,1)

這個更數學的方式表達的意思跟 演算法E 的各個步驟之間的對應關係式顯然的.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.