算法學習之路(一)算法的概念

一,算法是什麼?

算法就是計算或解決問題的步驟,例如:菜譜,  是一種對按步驟解決問題的實現方式的描述,不同的是算法是嚴密的,而且算法的步驟都是用數據方式來描述,十分的明確

二,如何選擇算法

最重要的是算法的運行時間,即從輸入數據到輸出結果這個過程所花費的時間。當然計算器內存的大小也是考量之一。

三,初識算法

1,實現一個有50個不同數字組成的數列中從小到大排列  

1),全排列算法

全排列算法的一個重要思路,就是將數列中的元素的排列,與某種順序建立一一映射的關係,按照這種順序,將集合的所有排列全部輸出。這種順序需要保證,既可以輸出全部的排列,又不能重複輸出某種排列,或者循環輸出一部分排列。

假設數列爲 :321          

          321, 312,231,  213,  132, 123     6種方式

如果是:12345             那麼將有    120

               1。。。10       那麼將有    3628800

               。

               。

               1。。。50      大概有10^40種

2),實現思路

  ① 生成一個由n個數字構成的數列(不和前面生成的數列重複);

  ②如果①中生成的數列按從小到大的順序排列就將其輸出,否則回到步驟①。.

3),引入階乘概念

運氣好一次就行,假設運氣不好,最後一次實現,n個數字就有n!中不同的排列方式(n! = 1*2*3...(n-2)(n-1)n)。

n! = 1*2*3...(n-2)(n-1)n

階乘:自然數n的階乘寫作n!。
一個正整數的階乘是所有小於及等於該數的正整數的積,並且有0的階乘爲1。

2,那麼我們換一種方式,選擇排序算法

1)選擇排序算法

選擇排序法是一種不穩定的排序算法。它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的數據元素排完。

 

2)實現思路

①從數列種尋找最小值

②將最小值和數列的最左邊的數字進行交換,排序結束。回到①

 

首先,爲了在第一輪找到最小的數字,需要從左往右確認數列數字,只要查詢n個數字即可。在接下;來的第2輪中,需要從n-個數字中尋找最小值,所以這個步驟進行到第n輪的時候,需要查詢的次數如下。

n+(n-1)+(n-2)+...3+2+1=n(n+1)/2  <= n^2

n=50的時候 ,最多2500。假設一個數需要一秒,那顯然選擇排序比全排列算法效率要高的多。

 

四,計算運行時間的方法

 

單單考慮不同算法在運行時間上的區別,還要了解根據數據量的大小,算法的運行時間具體會產生多大的變化。

如果是一個兩位數的數列呢?那顯然全排列算法的2步要比選擇排序算法的3步更省時間。

 

1,如何求得運行時間

如果我們使用“步數”來描述運行時間,“1步”就是計算的基本單位。通過計算“計算從開始到結束總共執行了多少步”來算出運行時間。

①從數列種尋找最小值

②將最小值和數列的最左邊的數字進行交換,排序結束。回到①

如果數列種有n個數字,那麼①種“尋找最小值”的不走只需要確認n個數字即可,將“確認1個數字的大小”作爲操作的基本單位,需要的時間設爲T1  ,那麼步驟①的運行時間就是  : n * T1

接下來,把“對連個數字進行交換”也作爲操作的基本單位,需要的時間設爲T2。那麼①和②總共重複n次,每經過“1輪”,需要查找的數字就減少1個,因此總的運行時間如下

(n*T1 + T2)+(  (n-1)*T1 +T2)+...(2*T1 +T2)+(T1+T2)
=  1/2 T!n(n+1) + T2n
= 1/2 T1*n^2 + (1/2T1 +T2)n

我們已經得到了運行時間,但這個結果並不直觀,還可以簡化。T1,T2都是基本單位,與輸入無關。會根據輸入變化而變化的只有數列的長度n,所以接下來考慮n變大的情況。n越大,n^2也就越大,其他部分相對變小.所以說對結果影響最大的是n^2
1/2 T1*n^2 + (1/2T1 +T2)n = O(n^2)
o 這個符號表示忽略重要項目以外的內容,O(n^2)的含義就是:算法的運行時間最長也就是n^2的常數倍。
比如,當我們知道選擇排序的時間複雜度爲O(n^2),快速排序的時間複雜度爲O(nlogn)時,很快就能判斷出快速排序的運算更爲告訴,二者的運行時間根基輸入的n產生的變化程度也一目瞭然。

快速排序的時間複雜度

 

 

 

 

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章