最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)

2022-11-22 20:47 作者:WZCYNL  | 我要投稿

Dijistra算法(最短路徑)

  1. 初始化
  2. 選擇
  3. 更新
  4. 頂點(diǎn)進(jìn)入S集合,T集合中移除

折半查找

適用于有序表


分塊查找

①建立索引表,分塊記錄每一塊的最大值

②在索引表中查找,確定是在哪一塊

③塊內(nèi)進(jìn)行順序查找

平均查找長(zhǎng)度:ASL=Lb+Lw(索引表+塊內(nèi))

Lb = log2(n+1)(n:s總元素/每一塊的元素 = 塊)

Lw = (s/2)(s:總元素)

樹表的查找

二叉排序樹

左子樹小于根、右子樹大于等于根

中序遍歷是遞增有序的序列

遞歸查找

最多比較次數(shù):數(shù)的深度

平均查找長(zhǎng)度:和數(shù)的形態(tài)有關(guān),O(log2n)

二叉排序樹插入:都在葉結(jié)點(diǎn)上,修改指針,不需要移動(dòng)元素

二叉排序樹生成:依次插入,重復(fù)元素不插入

輸入序列不同,生成的二叉樹不一樣,查找效率也不一樣

二叉排序樹刪除:

  • 刪除的結(jié)點(diǎn)是葉子結(jié)點(diǎn):直接刪掉就行
  • 刪除的結(jié)點(diǎn)是根結(jié)點(diǎn):如果只存在左孩子或者右孩子,就用孩子替換它;
  • 刪除的結(jié)點(diǎn)有兩個(gè)孩子的結(jié)點(diǎn):
  • 右子樹中的最小的結(jié)點(diǎn)代替這個(gè)被刪的結(jié)點(diǎn),將右子樹中最小的結(jié)點(diǎn)刪除;
  • 左子樹中找到最大的結(jié)點(diǎn),并刪除這個(gè)結(jié)點(diǎn),將這個(gè)結(jié)點(diǎn)的值放在被刪的結(jié)點(diǎn)里面


平衡二叉樹(AVL)

平衡因子:左子樹與右子樹的高度差

BF = 結(jié)點(diǎn)左子樹的高度 - 結(jié)點(diǎn)右子樹的高度

BF = -1、0、1(就是平衡二叉樹)

失衡二叉樹的分析與調(diào)整(四種類型)

LL型、LR型、RL型、RR型

①降低樹的高度

②保持二叉排序樹的性質(zhì)(左<根<右)

  1. LL型
  2. B結(jié)點(diǎn)帶左子樹C一起上升
  3. A結(jié)點(diǎn)成為B的右孩子
  4. 原來的B結(jié)點(diǎn)的右子樹作為A的左子樹


散列表

基本思想:記錄的存儲(chǔ)位置與關(guān)鍵字之間存在的對(duì)應(yīng)關(guān)系

hash函數(shù)

看下面這個(gè)散列表:

根據(jù)散列函數(shù)來查找:H(key) = k

優(yōu)點(diǎn):查找效率高

缺點(diǎn):空間效率低

例如:H(k) = k mod n(n:元素個(gè)數(shù)+1)

沖突:k1≠k2 但是H(k2)=H(k2)

減少?zèng)_突:優(yōu)化散列函數(shù)

散列函數(shù)的構(gòu)造方法需要考慮的問題:

  1. 執(zhí)行速度
  2. 關(guān)鍵字的長(zhǎng)度
  3. 散列表的大小
  4. 關(guān)鍵字的分布情況
  5. 查找頻率

直接定值法:關(guān)鍵字構(gòu)成某種線性函數(shù)

解決沖突:如果找到的地址已經(jīng)存儲(chǔ)了值了,就移動(dòng)到下一個(gè)地址

解決沖突的方法:

除留余數(shù)法:Hi = (Hash(key)+di) mod m(di為增量序列)

  1. 線性探測(cè)法:di為1,2,...m-1
  2. 二次探測(cè)法:di為1^2,-1^2,2^2,-2^2,...,q^2
  3. 偽隨機(jī)探測(cè)法:di為偽隨機(jī)數(shù)序列

例如:{47,7,29,11,16,92,22,8,3}【線性探測(cè)法】

m=11 散列函數(shù)為:Hash(key) = key mod 11

鏈地址法:余數(shù)相同的鏈接在一個(gè)單鏈表上(頭插法)

例如:{19,14,23,1,68,20,84,27,55,11,10,79}

優(yōu)點(diǎn):非同義詞不會(huì)沖突,無聚集現(xiàn)象;適用表長(zhǎng)不確定。

散列表的查找ASL:每個(gè)元素查找的次數(shù)之和 / 元素總個(gè)數(shù)


排序

排序方法的分類

  1. 存儲(chǔ)介質(zhì):內(nèi)部排序(內(nèi)存)、外部排序(內(nèi)+外)
  2. 比較器個(gè)數(shù):串行排序(單處理)、并行排序(多)
  3. 主要操作:比較排序(插入、交換、選擇、歸并)、基數(shù)排序
  4. 輔助空間:原地排序(不需要額外的空間)、非原地排序(需要輔助空間)
  5. 穩(wěn)定性:穩(wěn)定排序(直接插入排序,相等元素排序后不變)、非穩(wěn)定排序(簡(jiǎn)單選擇排序,相等元素排序后改變)
  6. 自然性:自然排序(有序快)、非自然排序(有序慢)

按排序依據(jù)原則

  1. 插入排序:直接插入排序(順序)、折半插入排序(二分)、希爾排序(縮小增量)
  2. 交換排序:冒泡排序、快速排序
  3. 選擇排序:簡(jiǎn)單選擇排序、堆排序
  4. 歸并排序:2-路歸并排序
  5. 基數(shù)排序

排序算法的好壞

  1. 時(shí)間效率
  2. 空間效率
  3. 穩(wěn)定性


插入排序

插入排序:在有序序列中插入一個(gè)元素,保持序列有序

1.直接插入排序:順序查找插入的位置,還可以使用哨兵模式

算法效率:比較+移動(dòng)

2. 二分插入排序:查找插入位置時(shí)采用折半查找法,使用哨兵。


3. 希爾排序:分割若干個(gè)子序列,分別進(jìn)行直接插入排序;定義遞減的增量序列,比如5、3、1,最后一個(gè)增量必須為1


交換排序

交換排序:兩兩比較,如果發(fā)生逆序就交換

1.冒泡排序:每一趟不斷將記錄兩兩比較,并按“前小后大”規(guī)則交換

2.快速排序:任取一個(gè)元素為中心,所有比它小的元素一律前放,比它大的元素一律后放,形成左右子表(交替式逼近法,遞歸);


選擇排序

1.簡(jiǎn)單選擇排序:在等待排序的數(shù)據(jù)中選出最大(小)的元素放在其最終位置。

例如:直接選出最小的 放在第一個(gè)位置


2.堆排序

小根堆:根都小于等于左右結(jié)點(diǎn)

大根堆:根都大于等于左右結(jié)點(diǎn)

完全二叉樹的非葉子結(jié)點(diǎn)(位置i):i > n/2

無序序列建立成一個(gè)堆: 將元素直接排成堆 然后再調(diào)整

歸并排序

歸并排序:將兩個(gè)或者兩個(gè)以上的有序序列“歸并”為一個(gè)有序序列。

1.二路歸并排序

排序完成需要log2n次。

基數(shù)排序

1. 基數(shù)排序:分配+收集


排序總結(jié)






數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
聂拉木县| 松溪县| 秦皇岛市| 思南县| 安吉县| 乐平市| 钟祥市| 同心县| 离岛区| 务川| 定襄县| 宜城市| 梁山县| 鹰潭市| 江源县| 宁津县| 海门市| 离岛区| 高州市| 闽清县| 新巴尔虎左旗| 隆化县| 乐亭县| 墨江| 青铜峡市| 苍山县| 镇雄县| 达日县| 稻城县| 南平市| 彩票| 布尔津县| 新津县| 襄城县| 甘孜| 巴南区| 沈阳市| 嘉禾县| 禄劝| 郎溪县| 崇仁县|