整出演算法中
⑴ 什麼叫演算法演算法有哪幾種表示方法
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。計算機科學家往往將「演算法」一詞的含義限定為此類「符號演算法」。「演算法」概念的初步定義:一個演算法是解決一個問題的進程。而並不需要每次都發明一個解決方案。
已知的演算法有很多,例如「分治法」、「枚舉測試法」、「貪心演算法」、「隨機演算法」等。
(1)整出演算法中擴展閱讀
演算法中的「分治法」
「分治法」是把一個復雜的問題拆分成兩個較為簡單的子問題,進而兩個子問題又可以分別拆分成另外兩個更簡單的子問題,以此類推。問題不斷被層層拆解。然後,子問題的解被逐層整合,構成了原問題的解。
高德納曾用過一個郵局分發信件的例子對「分治法」進行了解釋:信件根據不同城市區域被分進不同的袋子里;每個郵遞員負責投遞一個區域的信件,對應每棟樓,將自己負責的信件分裝進更小的袋子;每個大樓管理員再將小袋子里的信件分發給對應的公寓。
⑵ 數據結構的排序演算法中,哪些排序是穩定的,哪些排序是不穩定的
快速排序、希爾排序、堆排序、直接選擇排序不是穩定的排序演算法。
基數排序、冒泡排序、直接插入排序、折半插入排序、歸並排序是穩定的排序演算法。
⑶ 如何分析時間復雜度(線性表)
演算法分析
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
1、時間復雜度
(1)時間頻度
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
(2)時間復雜度
在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間復雜度概念。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值為不等於零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n2+3n+4與T(n)=4n2+2n+1它們的頻度不同,但時間復雜度相同,都為O(n2)。
按數量級遞增排列,常見的時間復雜度有:
常數階O(1),對數階O(log2n),線性階O(n),
線性對數階O(nlog2n),平方階O(n2),立方階O(n3),...,
k次方階O(nk),指數階O(2n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
2、空間復雜度
與時間復雜度類似,空間復雜度是指演算法在計算機內執行時所需存儲空間的度量。記作:
S(n)=O(f(n))
我們一般所討論的是除正常佔用內存開銷外的輔助存儲單元規模。
⑷ 數據結構的排序演算法中,哪些排序是穩定的,哪些排序是不穩定的
一、穩定排序演算法
1、冒泡排序
2、雞尾酒排序
3、插入排序
4、桶排序
5、計數排序
6、合並排序
7、基數排序
8、二叉排序樹排序
二、不穩定排序演算法
1、選擇排序
2、希爾排序
3、組合排序
4、堆排序
5、平滑排序
6、快速排序
排序(Sorting) 是計算機程序設計中的一種重要操作,它的功能是將一個數據元素(或記錄)的任意序列,重新排列成一個關鍵字有序的序列。
一個排序演算法是穩定的,就是當有兩個相等記錄的關鍵字R和S,且在原本的列表中R出現在S之前,在排序過的列表中R也將會是在S之前。
不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地實現為穩定。
做這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個對象間之比較,就會被決定使用在原先數據次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。
(4)整出演算法中擴展閱讀:
排序演算法的分類:
1、通過時間復雜度分類
計算的復雜度(最差、平均、和最好性能),依據列表(list)的大小(n)。
一般而言,好的性能是 O(nlogn),且壞的性能是 O(n^2)。對於一個排序理想的性能是 O(n)。
而僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要 O(nlogn)。
2、通過空間復雜度分類
存儲器使用量(空間復雜度)(以及其他電腦資源的使用)
3、通過穩定性分類
穩定的排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。