日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1、數組和鏈表的區別

  • 從邏輯結構上來看
  • 數組必須實現定于固定的長度,不能適應數據動態增減的情況,即數組的大小一旦定義就不能改變。當數據增加是,可能超過原先定義的元素的個數;當數據減少時,造成內存浪費;鏈表動態進行存儲分配,可以適應數據動態地增減的情況,且可以方便地插入、刪除數據項。
  • 從內存存儲的角度看
  • 數組從棧中分配空間(用new則在堆上創建),對程序員方便快速,但是自由度小;鏈表從堆中分配空間,自由度大但是申請管理比較麻煩。
  • 從訪問方式類看
  • 數組在內存中是連續的存儲,因此可以利用下標索引進行訪問;鏈表是鏈式存儲結構,在訪問元素時候只能夠通過線性方式由前到后順序的訪問,所以訪問效率比數組要低。
10個數據結構高頻知識點(建議收藏)

 

2、簡述快速排序過程

1)選擇一個基準元素,通常選擇第一個元素或者最后一個元素,

2)通過一趟排序將待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的元素值比基準值大。

3)此時基準元素在其排好序后的正確位置

4)然后分別對這兩部分記錄用同樣的方法繼續進行排序,直到整個序列有序。

 

3、快速排序的改進

只對長度大于k的子序列遞歸調用快速排序,讓原序列基本有序,然后再對整個基本有序序列用插入排序算法排序。實踐證明,改進后的算法時間復雜度有所降低,且當k取值為 8 左右時,改進算法的性能最佳。

選擇基準元的方式

對于分治算法,當每次劃分時,算法若都能分成兩個等長的子序列時,那么分治算法效率會達到最大。也就是說,基準的選擇是很重要的。選擇基準的方式決定了兩個分割后兩個子序列的長度,進而對整個算法的效率產生決定性影響。最理想的方法是,選擇的基準恰好能把待排序序列分成兩個等長的子序列。

  • 方法1 固定基準元
  • 如果輸入序列是隨機的,處理時間是可以接受的。如果數組已經有序時,此時的分割就是一個非常不好的分割。
  • 方法2 隨機基準元
  • 這是一種相對安全的策略。由于基準元的位置是隨機的,那么產生的分割也不會總是會出現劣質的分割。在整個數組數字全相等時,仍然是最壞情況,時間復雜度是O(n2)。實際上,隨機化快速排序得到理論最壞情況的可能性僅為1/(2n)。所以隨機化快速排序可以對于絕大多數輸入數據達到O(nlogn)的期望時間復雜度。
  • 方法3 三數取中
  • 引入的原因:雖然隨機選取基準時,減少出現不好分割的幾率,但是還是最壞情況下還是O(n^2),要緩解這種情況,就引入了三數取中選取基準。

分析:最佳的劃分是將待排序的序列分成等長的子序列,最佳的狀態我們可以使用序列的中間的值,也就是第N/2個數。可是,這很難算出來,并且會明顯減慢快速排序的速度。這樣的中值的估計可以通過隨機選取三個元素并用它們的中值作為基準元而得到。事實上,隨機性并沒有多大的幫助,因此一般的做法是使用左端、右端和中心位置上的三個元素的中值作為基元。

 

4、各類排序算法對比

時間復雜度來說:

  1. 平方階(O(n))排序
  2. 各類簡單排序:直接插入、直接選擇和冒泡排序;
  3. 線性對數階(O(nlog2n))排序
  4. 快速排序、堆排序和歸并排序;
  5. O(n))排序,§是介于0和1之間的常數。
  6. 希爾排序
  7. 線性階(O(n))排序
  8. 基數排序,此外還有桶、箱排序。

說明:

  • 當原表有序或基本有序時,直接插入排序和冒泡排序將大大減少比較次數和移動記錄的次數,時間復雜度可降至O(n);
  • 而快速排序則相反,當原表基本有序時,將蛻化為冒泡排序,時間復雜度提高為O(n);
  • 原表是否有序,對簡單選擇排序、堆排序、歸并排序和基數排序的時間復雜度影響不大。

穩定性:

排序算法的穩定性:若待排序的序列中,存在多個具有相同關鍵字的記錄,經過排序,這些記錄的相對次序保持不變,則稱該算法是穩定的;若經排序后,記錄的相對次序發生了改變,則稱該算法是不穩定的。

穩定的排序算法:冒泡排序、插入排序、歸并排序和基數排序

不是穩定的排序算法:選擇排序、快速排序、希爾排序、堆排序

 

選擇排序算法準則:

一般而言,需要考慮的因素有以下四點:

設待排序元素的個數為n.

1)當n較大,則應采用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序序。

2)當n較大,內存空間允許,且要求穩定性:歸并排序

3)當n較小,可采用直接插入或直接選擇排序。

直接插入排序:當元素分布有序,直接插入排序將大大減少比較次數和移動記錄的次數。

直接選擇排序 :元素分布有序,如果不要求穩定性,選擇直接選擇排序

5)一般不使用或不直接使用傳統的冒泡排序。

6)基數排序

它是一種穩定的排序算法,但有一定的局限性:

  1. 關鍵字可分解。
  2. 記錄的關鍵字位數較少,如果密集更好
  3. 如果是數字時,最好是無符號的

 

5、冒泡排序算法的改進

  1. 設置一標志性變量pos,用于記錄每趟排序中最后一次進行交換的位置。由于pos位置之后的記錄均已交換到位,故在進行下一趟排序時只要掃描到pos位置即可。
  2. 傳統冒泡排序中每一趟排序操作只能找到一個最大值或最小值,我們考慮利用在每趟排序中進行正向和反向兩遍冒泡的方法一次可以得到兩個最終值(最大者和最小者) , 從而使排序趟數幾乎減少了一半。

6、鄰接矩陣與鄰接表

  • 鄰接矩陣表示法:在一個一維數組中存儲所有的點,在一個二維數組中存儲頂點之間的邊的權值
  • 鄰接表表示法:圖中頂點用一個一維數組存儲,圖中每個頂點vi的所有鄰接點構成單鏈表

對比

  1. 在鄰接矩陣表示中,無向圖的鄰接矩陣是對稱的。矩陣中第 i 行或 第 i 列有效元素個數之和就是頂點的度。
  2. 在有向圖中 第 i 行有效元素個數之和是頂點的出度,第 i 列有效元素個數之和是頂點的入度。
  3. 在鄰接表的表示中,無向圖的同一條邊在鄰接表中存儲的兩次。如果想要知道頂點的度,只需要求出所對應鏈表的結點個數即可。
  4. 有向圖中每條邊在鄰接表中只出現一次,求頂點的出度只需要遍歷所對應鏈表即可。求入度則需要遍歷其他頂點的鏈表。
  5. 鄰接矩陣與鄰接表優缺點:
  6. 鄰接矩陣的優點是可以快速判斷兩個頂點之間是否存在邊,可以快速添加邊或者刪除邊。而其缺點是如果頂點之間的邊比較少,會比較浪費空間。因為是一個 n∗n 的矩陣。

而鄰接表的優點是節省空間,只存儲實際存在的邊。其缺點是關注頂點的度時,就可能需要遍歷一個鏈表。

 

7、用循環比遞歸效率高嗎?

遞歸和循環兩者完全可以互換。不能完全決定性地說循環地效率比遞歸的效率高。

遞歸算法:

  • 優點:代碼簡潔、清晰,并且容易驗證正確性。
  • 缺點:它的運行需要較多次數的函數調用,如果調用層數比較深,需要增加額外的堆棧處理(還有可能出現堆棧溢出的情況),比如參數傳遞需要壓棧等操作,會對執行效率有一定影響。但是,對于某些問題,如果不使用遞歸,那將是極端難看的代碼。在編譯器優化后,對于多次調用的函數處理會有非常好的效率優化,效率未必低于循環。

循環算法:

  • 優點:速度快,結構簡單。
  • 缺點:并不能解決所有的問題。有的問題適合使用遞歸而不是循環。如果使用循環并不困難的話,最好使用循環。

8、解決哈希沖突的方法

哈希表(Hash table,也叫散列表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。

1)線性探測法

2) 平方探測法

3) 偽隨機序列法

4) 拉鏈法

9、KMP算法

在一個字符串中查找是否包含目標的匹配字符串。其主要思想是每趟比較過程讓子串先后滑動一個合適的位置。當發生不匹配的情況時,不是右移一位,而是移動(當前匹配的長度– 當前匹配子串的部分匹配值)位。

 

10、B樹

根據B類樹的特點,構造一個多階的B類樹,然后在盡量多的在結點上存儲相關的信息,保證層數盡量的少,以便后面我們可以更快的找到信息,磁盤的I/O操作也少一些,而且B類樹是平衡樹,每個結點到葉子結點的高度都是相同,這也保證了每個查詢是穩定的。

B樹和B+樹的區別,以一個m階樹為例。

  1. 關鍵字的數量不同;B+樹中分支結點有m個關鍵字,其葉子結點也有m個,其關鍵字只是起到了一個索引的作用,但是B樹雖然也有m個子結點,但是其只擁有m-1個關鍵字。
  2. 存儲的位置不同;B+樹中的數據都存儲在葉子結點上,也就是其所有葉子結點的數據組合起來就是完整的數據,但是B樹的數據存儲在每一個結點中,并不僅僅存儲在葉子結點上。
  3. 分支結點的構造不同;B+樹的分支結點僅僅存儲著關鍵字信息和兒子的指針(這里的指針指的是磁盤塊的偏移量),也就是說內部結點僅僅包含著索引信息。
  4. 查詢不同;B樹在找到具體的數值以后,則結束,而B+樹則需要通過索引找到葉子結點中的數據才結束,也就是說B+樹的搜索過程中走了一條從根結點到葉子結點的路徑。

------本文完結-------

分享到:
標簽:數據結構
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定