算法知識整理 1 - 常用排序方法的時間與空間複雜度

常用排序算法時間、空間複雜度 Time and Space Complexity of Commonly Used Sorting Algorithm
在這裏插入圖片描述
Recursion
遞歸就是指程序調用自身的編程思想,即一個函數調用本身;遞歸有兩部分組成:遞歸體和遞歸出口 or 遞歸體和遞歸出口
Iteration
迭代是利用已知的變量值,根據遞推公式不斷演進得到變量新值的編程思想。

假設順序表中包含5個關鍵字{a,b,c,d,e},它們的查找概率分別爲{0.25,0.3,0.2,0.1,0.15},爲了使查找成功時的平均查找長度達到最小,則順序表中數據元素的出現順序是( )
Answer: b,a,c,e,d
類似於哈夫曼編碼的思想,讓概率大的查找次數少就可以保證總的查找次數最小,所以對序列依照查找概率排序,概率最大的找的次數最小,
根據題乾的“使查找成功時的平均查找長度達到最小”,所以將經常需要查找(查找概率大)的數據放在順序表中較前的位置。
所以b的查找概率0.3最大,應放在順序表最前位置。d的查找概率爲0.1最小,放在最後位置。

哪些排序在某趟排序結束後不一定能選出一個元素放在其最終位置上?
Answer: 希爾排序。。。and???
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。 所以每一趟選擇的元素都會放在他的最終位置

冒泡排序, 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。比如按照升序排序則每一趟會將前面未排序部分的最大的往後交換到已排序的最前面,爲其最終位置

堆排序如果要求升序則建立大根堆,降序則建立小根堆,堆頂元素爲最大或者最小的元素,將這個元素與最後一個位置的元素交換,再將剩餘元素還原成大小跟堆,每一趟都會選出一個未排序中的最大或者最小放大他的最終位置

希爾排序由於是按照增量排序,步長不同可能元素不一定到他最終位置

將一個遞歸算法轉換爲非遞歸算法,通常需要借用的數據結構是( 棧 )
解析:棧和遞歸的原理是一樣的。。。
棧是後進先出,遞歸何嘗不是。
遞歸的第一次判斷先‘進’,最後返回;終止條件最後‘進’,第一個返回
自己的理解:遞歸可用來查找或者刪除。比方說遞歸在很多嵌套文件夾裏面找一個要找的文件,那麼,每一個路過的文件夾或文件就相當於壓進棧的元素。當找到目標文件後,目標文件就是最後一個進棧的元素,而也是第一個出棧的元素,明顯對應棧的"LIFO"後進先出。

用鄰接矩陣存儲有n個結點(0,1,…,n)和e條邊的有向圖(0≤e≤n(n-1))。在鄰接矩陣中刪除結點i(0≤i≤n-1)的時間複雜度是(O(n))
解析:
鄰接矩陣用一個一維數組存放圖中所有頂點數據;用一個二維數組存放頂點間關係(邊或弧)的數據。
刪除一個節點,需要對比所有元素,所以是n。
在這裏插入圖片描述
一個算法應該是(B)
A 程序 B 問題求解步驟的描述 C要滿足五個基本特性

解析:算法是思想,不一定是程序,可以使描述解決問題的方法,所以a不選;c只是算法的必要條件,不是充分條件

算法(algorithm)是對特定問題求解步驟的一種描述,它是指令的有序序列,其中每一條指令表示一個或多個操作;此外,一個算法還具有下列5個重要特徵(本部分可參考本問ocean老哥回答):(1)有窮性;(2)確定性;(3)可行性;(4)輸入(>=0);(5)輸出(>=1)。
所以答案選B。

精儉排序,即一對數字不進行兩次和兩次以上的比較,以下是“精儉排序”的是 AB在這裏插入代碼片
插入排序
歸併排序
選擇排序
堆排序

A.插入排序,前面是有序的,後面的每一個元素與前面有序的元素比較,比較過的就是有序的了,不會再比較一次,例如:
3 2 1 5 第一趟:【2,3,1,5】,2和3比較,3後移;第二趟:【1,2,3,5】,1和2,1和3比較,而2,3不會比較。
B.每次合併後,內部都是有序的,內部的元素之間不用再比較
C.選擇排序,每次在後面的元素中找到最小的,找最小元素的過程是在沒有排好序的那部分進行,所有肯定會比較多次;
D.堆排序:每次要調整堆,舉個例子試試,很容易看出來。

總之,只要是每次操作是在排好序的那部分元素之間操作,就符合題意,否則不是。

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