MIT演算法導論公開課之第12課 跳躍表
動態搜尋結構
跳躍表(skip list)
樹堆(treap)
紅黑樹(red black tree)
B樹(B tree)
跳躍表
一種簡單、高效的動態搜尋結構,使用了隨機化演算法。
插入刪除操作的期望的執行時間為O(lgn),並且這種情況有很高的概率(≈1-1/n^α)。
有序的連結串列
搜尋一個排好序的連結串列所用時間為O(n),因為連結串列不支援隨機訪問。
改進連結串列
使用兩個有序的連結串列,以加快查詢速度。
Ex(紐約地鐵第七大道線):
- 站號(快線和慢線):
14、23、34、42、50、59、66、72
79、86、96、103、110、116、125 - 結構示意圖:
L2儲存所有的元素,L1儲存某些子集元素,L1和L2中鍵值相同的元素之間有連結。
- 站號(快線和慢線):
查詢過程:
- Search(x):
在頂層連結串列L1中從左向右遍歷,直到走過頭,後退一個結點,然後向下繼續走下層連結串列L2直到x。
- Search(x):
關於建立L1:
最好均勻的選取結點作為L1中的結點。
=>搜尋時間≈|L1|+|L2|/|L1|(|L2|=n)
最小化|L1|+n/|L1|:
當|L1|=n/|L1|能得到最小值,此時|L1|=n^(1/2),最小值為2·n^(1/2)。
一般化分析:
使用2個有序的連結串列,執行時間為O(2·n^(1/2))。
使用3個有序的連結串列,執行時間為O(3·n^(1/3))。
使用k個有序的連結串列,執行時間為O(k·n^(1/k))。
k選取為lgn時,執行時間為O(lgn·n^(1/lgn))=O(lgn·2^(lgn/lgn))=O(2lgn)。
一共有lgn層,所有相鄰兩層比值的乘積應該等於n,即r^(lgn)=n=>r=2。
相鄰兩層比值為2。
跳躍表
實現插入和刪除,並能儘量好的維護這個結構,使搜尋代價仍為O(lgn)。
- 跳躍表操作:
Insert(x):
確定x在底層連結串列中的位置,把x插入到此位置。
確定是否將該元素提升到上一層:
拋一枚硬幣,正面就提升到上一層連結串列,並再拋一次硬幣,反面就結束操作。
注:為保證能從多層連結串列的左上角開始操作,將每一層開始結點值設為負無窮。
高度提升到lgn以上的概率為(1/2)^lgn=1/(2^lgn)=1/n。
演算法對輸入序列無要求,但這個資料結構執行速度快的高概率要求每次隨機拋硬幣。
delete(x):
在每一層中找到x,並刪除。
- 跳躍表特性:
相關推薦
MIT演算法導論公開課之第12課 跳躍表
動態搜尋結構 跳躍表(skip list) 樹堆(treap) 紅黑樹(red black tree) B樹(B tree) 跳躍表 一種簡單、高效的動態搜尋結構,使用了隨機化演算法。 插入刪除操作的期望的執行時間為O(lgn),並且這種情
MIT演算法導論公開課之第18課 最短路徑演算法、Bellman和差分約束系統
Bellman-Ford 演算法 圖G=(V,E),選取s∈V作為圖的原點,此演算法可計算最短路徑δ(s,v)(v∈V)或報告出圖中存在負權值的環路。 Exercise 在路徑中存在負權值的環路時,將δ(s,v)設定為-∞。 Bellman-F
MIT演算法導論公開課之第15課 動態規劃、最長公共子序列
動態規劃(Dynamic programming) 動態規劃是一種設計技巧,而不是一種特定的演算法,就像分治法一樣。 最長公共子序列(Longest common subsequence)問題 有兩個序列,序列x[1~m],序列y[1~n],找到它們的最長
MIT演算法導論公開課之第3課 分治法
分治法 1. 將一個問題劃分為若干個子問題。 2. 遞迴的解決每一個子問題。 3. 將子問題的解合併成為整個大問題的解。 歸併排序 1. 將一個數組分為兩個子陣列。 2. 遞迴的對每一個子陣列進行排序。 3. 合併兩個有序子陣列。 執行
MIT演算法導論公開課第八講全域雜湊和完全雜湊
全域雜湊 對於任意雜湊函式而言,都存在一個不好的健集,使得所有的健都會雜湊到同一個槽裡去,那麼如何解決這種情況呢?如何防止對某個鍵集永遠有較差的表現?如何防止競爭對手使用這個鍵集來降低你的效能表現? 一個詞解決這個問題 —— 隨機! 全域雜湊的方法
【問鏈-EOS公開課】第八課 EOS 資料庫與持久化 API(一)
在 EOS 中,智慧合約執行完畢後,所佔用的記憶體會釋放。程式中的所有變數都會丟失。如果智慧合約裡要持久地記錄資訊,比如遊戲智慧合約要記錄每位使用者遊戲記錄,本次合約執行完畢後資料不能丟失,就需要將資料儲存到 EOS 資料庫中。與資料庫互動的 API 被官方成為 Persistence API,中文可以叫做持
【問鏈-EOS公開課】第九課 EOS 資料庫與持久化 API(二)
上次的文章詳細講解了 EOS 資料庫的架構,本文將以官方示例為基礎,詳解 EOS 資料庫的開發實戰。 基本步驟 在智慧合約裡與 EOS 資料庫互動,首先要定義儲存的資料: 定義物件:具體就是定義一個 C++ 類或者 C++ 結構體,資料表就由一個個物件組成。 定
【問鏈-EOS公開課】第十課 EOS 錯誤碼整理
EOS 目前大約有180種錯誤型別,雖然有錯誤碼,但是還是很籠統的,具體的報錯資訊還得看detail裡面的內容 一、常見的錯誤碼以及issue上對應的錯誤記錄 3010001 Invalid name 賬戶名格式1-12位(a-z,1-5,“.” ) 且”.”不
【問鏈-EOS公開課】第十三課 EOS外掛機制深入解析
外掛體系 EOS外掛由三層類來實現。 最頂層是抽象類abstract_plugin,定義了外掛的基本介面。 中間層是外掛模板類plugin,主要用來解決外掛之間依賴呼叫。 最底層是具體外掛類,專注單個外掛的業務功能實現。 nodeos程序啟動後第一步是註冊外掛
韋東山嵌入式Linux學習筆記之——第12課第8節 字元裝置驅動程式之定時器防抖動
注:本文部分內容摘自《魚樹學員筆記》。 當按鍵按得比較快的時候,這裡出現了兩次中斷值,也即產生了抖動。 這裡產生了“抖動”,按鍵是機械開關,按下鬆開時裡面的金屬彈片可能抖動了好幾次。這種抖動產生了多次“脈衝”導致多次中斷。 方法: 使用定時器來防抖動。
機器學習公開課筆記第九周之大數據梯度下降算法
機器學習 nbsp gradient min 三種 依次 再看 獲得 mini 一,隨機梯度下降法(Stochastic Gradient Descent) 當訓練集很大且使用普通梯度下降法(Batch Gradient Descent)時,因為每一次\(\theta\)
MIT線性代數公開課學習筆記第16~20課
ots 正交 其中 圖片 線性 現在 出現 正交化 play 十六、投影矩陣和最小二乘 給出\(n\)組\(m-1\)個自變量的數據點(用\(n\times m\)大小的矩陣\(A\)表示,其中第一列均為1,代表常數項),以及它們的真實取值(用n維列向量\(b\)表示),現
MIT線性代數公開課學習筆記第21~25課
幾何 教材 線性 學習 標量 求解 一個 spa lambda 二十一、特征值和特征向量 1、特征值和特征向量的定義、求解 給出\(n\)階方陣\(A\),若存在\(n\)維列向量\(x\)和標量\(\lambda\),有\(Ax=\lambda x\),則\(x\)是\(
MIT線性代數公開課學習筆記第31~35課
圖像 .com 小波 要求 小波變換 ron 現在 alpha times 三十一、線性變換及對應矩陣 定義線性變換: \[T:\mathbb{R}^n\to \mathbb{R}^m\] 表示的是n維列向量到m維列向量的映射,該映射是可以線性組合的,即: \[T(ax+b
MIT演算法導論第三節筆記——分治思想
這一節主要講了分治思想,首先我應該向大家推薦兩本參考書:《演算法導論》和《演算法概論》,很多講課內容都在這兩本書上,但不限於這兩本書。 這次視訊中設計的演算法如下: 歸併排序 折半查詢 求X的冪 斐波那契數,包括1. 遞迴演算法;2. 用儲存每一個計算過的斐波那契數的方式
MIT演算法導論——第七講.雜湊表
從作用上來講,構建雜湊表的目的是把搜尋的時間複雜度降低到O(1),考慮到一個長度為n的序列,如果依次去比較進行搜尋的話,時間複雜度是θ(n),或者對其先進行排序然後再搜尋會更快一些,但這兩種方法都不是最快的方法。 第一個話題: 計算機裡面所有儲存的內容都是數字,因此我
公開課 之 tony 電子時鐘 (課堂筆記)
des %x 行程 設置背景圖片 自動填充 star init qpi RF # tony 之電子時鐘from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QDesktopWidget, QVBox
《Java從小白到大牛》之第12章 繼承與多態
數值類型 大牛 聲明 清華 school 重寫 協作圖 類型變量 caf 《Java從小白到大牛》紙質版已經上架了!!! 類的繼承性是面向對象語言的基本特性,多態性前提是繼承性。Java支持繼承性和多態性。這一章討論Java繼承性和多態性。 Java中的繼承 {#java}
【問鏈-EOS公開課】第十五課 用cleos註冊EOS主網賬戶、投票和發幣
第一步: 安裝docker https://www.docker.com/community-edition #install docker for CentOS. (其他作業系統看上面連結) sudo yum install -y yum-utils device-mapper-
【問鏈-EOS公開課】第十四課 EOS從單簽名到多簽名
一、基本知識 賬戶:是儲存在區塊鏈上的人們可識別的ID。 許可權:每個事務都有,它是由已配置許可的賬戶所評估的。 閾值:每個被命名的許可權都有一個有效範圍,必須滿足是在許可下的一個簽名事務,將被視為有效。 簽名:事務的簽名是通過利用一個客戶端來執行,該客戶端擁有一個已載入並已解鎖的錢包。