小弟初學演算法,總結以下自己的心得,如有不對的地方請大家見諒,正所謂一切都是由易入難,所以我也從簡單演算法入手,請大家不要見笑。學習簡單的演算法不需要太多的額外知識,但是學習高階演算法時,離散數學和概率論時學習演算法的前提條件,如果這兩個不太好的話,就趕緊學習相應的知識吧。啊哈哈
計算機系統的各種軟體,都是由大大小小的各種軟體組成部分構成,各自按照特定的演算法來實現,演算法的好壞直接決定了軟體的效能的優劣。用什麼方法來設計演算法、演算法需要什麼樣的資源、以及演算法的執行時間、儲存空間、判斷演算法的好壞,在實現乙個軟體時這些問題都需要面對的。
下面說一下我的第乙個正式學習的演算法,求兩個數的最大公約數
最大公約數定義:如果有乙個自然數a能被自然數b整除,則稱a為b的倍數,b為a的約數。幾個自然數公有的約數,叫做這幾個自然數的公約數。公約數中最大的乙個公約數,稱為這幾個自然數的最大公約數。
了解了最大公約數的定義,知道了目的是求兩個數的最大公約數那麼我們就把它轉化為程式語言
1public
int euclid(int a, intb)2
10while (r!=0
);11
12return
a;13 }
在演算法的第6行把a除以b的餘數賦值給r,第7行把b賦值給a,第8行把r賦值給b,第10行判斷r是否為0,不為0轉入迴圈,為0則進行返回,按照以上規則如果給定任意兩個正整數,都能得到它的最大公約數則證明是正確的。
學習總結:數學中的演算法轉入程式,可以抓住定義中的關鍵字,以上演算法抓住了整出這個關鍵字,也就是程式中的取模,模為整數時自然是公約數了,而第乙個肯定為最大的那個公約數。我是乙個菜鳥,所說之處如果不對,請大家見諒並給予指正。謝謝大家的支援。
歐幾里德演算法
歐幾里德演算法稱為輾轉相除法,用來求已知m n兩個自然數的公因數。結合程式說明一下輾轉相除的具體情況。首先看遞迴實現 1 int getcd int m,intn 2 6if m if m n 1316 else 1720 主要計算過程分為三個步驟 1 對輸入的兩個自然數m n取餘數r,使得0 r ...
擴充套件歐幾里德演算法
擴充套件歐幾里德演算法已經搞了好幾天了,今天終於看明白,小做總結。講擴充套件歐幾里得演算法之前,先講歐幾里得演算法和貝祖定理。歐幾里得演算法 歐幾里得演算法就是輾轉相除法,即gcd a,b gcd b,a b 簡單證明一下 r gcd a,b a nr,b mr。a b n n m m r。因為gc...
歐幾里德演算法 冪運算
文中x n 表示x的n次方 計算x n 的明顯演算法是使用n 1次乘法自乘,有一種遞迴演算法更好 n 1是這種遞迴的基準情形,否則若n為偶數,我們有x n x n 2 x n 2 若x為奇數,則x n x n 1 2 x n 1 2 x 例如 為了計算x 62 演算法將如下進行,它只用到9次乘法 在...