資料結構與演算法之美專欄學習筆記-跳錶
跳錶的概念
對連結串列建立n級索引,例如每兩個結點提取一個節點到上一層,稱之為索引層。
圖中的down表示down指標,指向下一級結點
跳錶的時間複雜度
跳錶的高度
跳錶的高度是log2n。
跳錶的時間複雜度
跳錶中查詢某個資料的時間複雜度是O(logn)。
跳錶的空間複雜度及優化
跳錶的空間複雜度
跳錶的空間複雜度為O(n)。
優化時間複雜度
如果連結串列有n個節點,每3或5個節點抽取抽出一個節點作為上一級索引的節點,
雖然跳錶的空間複雜度仍然是O(n),但和每2個節點抽取一次相比佔用的記憶體空間少了很多。
高效的動態插入和刪除
時間複雜度
跳錶本質上就是連結串列,所以僅插作,插入和刪除操時間複雜度就為O(1),
但在實際情況中,要插入或刪除某個節點,需要先查詢到指定位置,而這個查詢操作比較費時。
在跳錶中查詢操作的時間複雜度是O(logn),因此跳錶的插入和刪除操作的是時間複雜度也是O(logn)。
跳錶索引動態更新
當往跳錶中插入資料的時候,可以選擇同時將這個資料插入到部分索引層中,
可以通過隨機函式來決定將這個節點插入到哪幾級索引中,比如隨機函式生成了值K,那就可以把這個節點新增到第1級到第K級索引中。
跳錶程式碼實現
相關推薦
資料結構與演算法之美專欄學習筆記-跳錶
跳錶的概念 對連結串列建立n級索引,例如每兩個結點提取一個節點到上一層,稱之為索引層。 圖中的down表示down指標,指向下一級結點 跳錶的時間複雜度 跳錶的高度 跳錶的高度是log2n。 跳錶的時間複雜度 跳錶中查詢某個資料的時間複雜度是O(logn)。
資料結構與演算法之美專欄學習筆記-排序(上)
排序方法 氣泡排序、插入排序、選擇排序、快速排序、歸併排序、計數排序、基數排序、桶排序。 複雜度歸類 氣泡排序、插入排序、選擇排序 O(n^2) 快速排序、歸併排序 O(nlogn) 計數排序、基數排序、桶排序 O(n) 演算法的執行效率 1. 最
資料結構與演算法之美專欄學習筆記-排序(下)
分治思想 分治思想 分治,顧明思意就是分而治之,將一個大問題分解成小的子問題來解決,小的子問題解決了,大問題也就解決了。 分治與遞迴的區別 分治演算法一般都用遞迴來實現的。分治是一種解決問題的處理思想,遞迴是一種程式設計技巧。 歸併排序 演算法原理 歸併的思想 先把陣列從中間分
資料結構與演算法之美專欄學習筆記-線性排序
線性排序 線性排序的概念 線性排序演算法包括桶排序、計數排序、基數排序。 線性排序演算法的時間複雜度為O(n)。 線性排序的特點 此3種排序演算法都不涉及元素之間的比較操作,是非基於比較的排序演算法。 對排序資料的要求很苛刻,重點掌握此3種排序演算法的適用場景。 桶排序 演算法
資料結構與演算法之美專欄學習筆記-排序優化
選擇合適的排序演算法 回顧 選擇排序演算法的原則 1)線性排序時間複雜度很低但使用場景特殊,如果要寫一個通用排序函式,不能選擇線性排序。 2)為了兼顧任意規模資料的排序,一般會首選時間複雜度為O(nlogn)的排序演算法來實現排序函式。 3)同為O(nlogn)的快排和歸併排序相比,
資料結構與演算法之美專欄學習筆記-陣列
什麼是陣列 陣列(Array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。 線性表 線性表就是資料排成像一條線一樣的結構。 常見的線性表結構:陣列,連結串列、佇列、棧等。 非線性表有:二叉樹、圖、堆等。 連續的記憶體空間和相同型別的資料 優點:兩限制使得
資料結構與演算法之美專欄學習筆記-複雜度分析
複雜度分析 什麼是複雜度分析 資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。 複雜度描述的是演算法執行時間(或佔用空間)與資料規模的增長關係
資料結構與演算法之美專欄學習筆記-二分查詢(下)
四種常見的二分查詢變形問題 查詢第一個值等於給定值的元素 //查詢第一個等於給定值的元素 public static int BSearch2(int[] a, int n, int value){ //定義陣列頭尾索引 int low = 0, high = n - 1;
資料結構與演算法之美專欄學習筆記-雜湊演算法
雜湊演算法的定義和原理 將任意長度的二進位制串對映為固定長度的二進位制串。 這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制串就是雜湊值。 設計一個優秀的雜湊演算法需要滿足: 從雜湊值不能反向推匯出原始資料(所以雜湊演算法也叫單向雜湊演算法); 對輸入資料非常敏感,哪怕原始
資料結構與演算法之美專欄學習筆記-二叉樹基礎(上)
樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1 二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結
資料結構與演算法之美專欄學習筆記-二叉樹基礎(下)
二叉查詢樹 Binary Search Tree 二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現
《資料結構與演算法之美》專欄閱讀筆記5——散列表和雜湊函式
這應該是看完最呆(沒有想到的那種呆~)的一個小章節了,給作者鼓掌,講的好好。果然抽象能力才是王道 文章目錄 1、散列表 1.1、小概念 1.2、雜湊函式 1
《資料結構與演算法之美》專欄閱讀筆記4——二分查詢
找呀找呀找朋友 文章目錄 1、二分查詢 2、變形的二分查詢 2.1、查詢第一個、最後一個值等於給定值的元素 2.2、查詢第一個大於等於、最後一個小於等於給定值
《資料結構與演算法之美》專欄閱讀筆記3——排序演算法
上週排計劃,說花個一天的時間看完好了(藐視臉)~然後每天回家看一會,看了一個星期……做人,要多照鏡子好嘛 文章目錄 1、簡單排序 1.1 如何分析排序演算法
《資料結構與演算法之美》專欄閱讀筆記2——線性表
換個方式來寫筆記,最近啃完了《Thinking in Java》,想要在看專欄的時候多做點擴充套件性的東西,比如把難撩的泛型加進來做實現,程式碼還是要寫起來才曉得怎麼寫更酷。總之最近看書的過程中、搜尋答案的過程中發出了很多“哇~超厲害!超酷!我也要這樣棒棒噠!”的嘆聲。新的開始,
《資料結構與演算法之美》專欄閱讀筆記1——複雜度分析
蹭可愛的男朋友買的極客時間的專欄【資料結構與演算法之美】,作者讓大家定個學習的flag。o( ̄▽ ̄)o,好吧,最近喜歡做思維導圖(純粹因為好看!),所以flag就是每篇都要寫讀書筆記咯~ 文章目錄 1、如何抓住重點,系統
資料結構與演算法之美 課程筆記一 如何抓住重點,系統高效地學習資料結構與演算法?
什麼是資料結構?什麼是演算法? 從廣義上講,資料結構就是指一組資料的儲存結構。演算法就是操作資料的一種方法。 從狹義上講,是指某些著名的資料結構和演算法,比如佇列、棧、堆、二分查詢、動態規劃等。 那資料結構和演算法有什麼關係呢? 資料結構和演算法是相輔相成的。資料結構是為演算法服務的
《資料結構與演算法之美》專欄閱讀筆記2
換個方式來寫筆記,最近啃完了《Thinking in Java》,想要在看專欄的時候多做點擴充套件性的東西,比如把難撩的泛型加進來做實現,程式碼還是要寫起來才曉得怎麼寫更酷。總之最近看書的過程中、搜尋答案的過程中發出了很多“哇~超厲害!超酷!我也要這樣棒棒噠!
學習:資料結構與演算法之美(1-3)
第一課 基礎知識就像是一座大樓的地基,它決定了我們的技術高度。而要想快速做出點事情,前提條件一定是基礎能力過硬,“內功”要到位。 第二課 為什麼要學習資料結構和演算法(摘自網友極客時間留言) 直接好處是能夠寫出效能更優的程式碼, 演算法是一種解決問題的思路和方
資料結構與演算法之美-學習筆記
接上篇文章,在我意識到資料結構與演算法的重要性時,正好在群裡有人分享了極客時間的資料結構與演算法之美的課程,從入門篇、基礎篇、高階篇到實戰篇,由淺入深的講述常用的資料結構與演算法,特別是在留言區作者的留言"邁不過去你找我退錢",我就喜歡這種有自信的人,當然不是完全指望