資料結構與演算法(一)
Q1:紅黑樹的性質?
1.只有黑色紅色
2.根節點是黑色
3.葉子節點是黑色
4.紅節點下必是黑節點
5.由一個節點到其子孫節點,所有路徑的黑色節點數量一樣
Q2:HashMap,LinkedHashMap,紅黑樹與B樹使用場景?
儲存維度:
紅黑樹當資料較大時,深度較大,IO操作就會頻繁,複雜度變高,所以適合小資料量的記憶體環境,如TreeMap,TreeSet;
B樹由於深度小,IO操作少,適合大資料量的外存。
排序維度:
紅黑樹排序時間複雜度O(lg10)比連結串列排序等的時間複雜度(O(n))要小很多。
簡單的增刪改查:
HashMap與LinkedHashMap時間複雜度都是O(1),考慮使用HashMap;
增刪改查並保證排序:
LinkedHashMap額外保證了Map的遍歷順序與put順序一致的有序性,考慮使用LinkedHashMap;
Q3:紅黑樹的基本操作:
相關推薦
資料結構與演算法(一)--- 資料結構與演算法概念
一、資料結構 資料結構是計算機儲存、組織資料的方式。(資料結構是指資料與資料之間的關係。) 資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。
資料結構與演算法(一)---重點複習知識
吐槽 國慶假期第二天,去實驗室開門,給貓貓鏟醜醜,然後給她換貓糧,換水,喂這貨吃的emmmmmm,然後今天就把之前在極客時間上買的資料結構與演算法的專欄好好看下,然後總結下。 為什麼要學習資料結構和演算法? 之前自己大二時候把這個學校的課堂過了一遍,當時老師要求
資料結構與演算法(一)——複雜度分析(上)
資料結構與演算法(一)—— 複雜度分析(上) 基礎知識就像是一座大樓的地基,只有打好基礎,才能造成萬丈高樓。資料結構與演算法是一個程式設計師的內功,只有基礎足夠紮實,才能有效提高自己的技術能力,寫出更高效、擴充套件性更好的優秀程式碼。寫這個系列記錄一下自己學習的
資料結構與演算法(一)
Q1:紅黑樹的性質? 1.只有黑色紅色 2.根節點是黑色 3.葉子節點是黑色 4.紅節點下必是黑節點 5.由一個節點到其子孫節點,所有路徑的黑色節點數量一樣 Q2:HashMap,LinkedHashMap,紅黑樹與B樹使用場景? 儲存維度: 紅黑樹當資料
Java資料結構與演算法(一)
一、學習資料結構與演算法的目的 預估程式在大量的資料集上執行時需要的時間成本和空間成本。 二、遞迴簡介 遞迴的四條基本法則: 一個簡單的遞迴案例: 三、實現泛型特性構建 pre-java5 1.引入泛
資料結構與演算法(一):帶你瞭解時間複雜度和空間複雜度到底是什麼?
1. 前言 演算法(Algorithm)是指用來操作資料、解決程式問題的一組方法。對於同一個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢? 主要還是從演算法所佔用的「時間」和「空間」兩個維度去考量。 時間
Java 內功修煉 之 資料結構與演算法(一)
一、基本認識 1、資料結構與演算法的關係? (1)資料結構(data structure): 資料結構指的是 資料與資料 之間的結構關係。比如:陣列、佇列、雜湊、樹 等結構。 (2)演算法: 演算法指的是 解決問題的步驟。 (3)兩者關係: 程式 = 資料結構 + 演算法。 解決問題可以有很多種方式,
資料結構與演算法(二)--遞迴
遞迴條件: 1.遞迴條件:每次調自己,然後記錄當時的狀態 2.基準條件:執行到什麼時候結束遞迴,不然遞迴就會無休止的呼叫自己, 遞迴的資料結構:棧(先進先出)和彈夾原理一樣,每一次呼叫自己都記錄了當時的一種狀態,然後把這種狀態的結果返回。 棧相對應的資料結構:佇列(先進後出
資料結構與演算法(2)—— 棧(java)
1 棧的實現 1.1 簡單陣列實現棧 package mystack; public class ArrayStack { private int top; //當前棧頂元素的下標 private int[] array; public ArraySt
Java資料結構和演算法(一):簡介
本系列部落格我們將學習資料結構和演算法,為什麼要學習資料結構和演算法,這裡我舉個簡單的例子。 程式設計好比是一輛汽車,而資料結構和演算法是汽車內部的變速箱。一個開車的人不懂變速箱的原理也是能開車的,同理一個不懂資料結構和演算法的人也能程式設計。但是如果一個開車的人懂變速箱的原理,比如降低速
python資料結構與演算法(1)
資料結構與演算法(Python) Why?我們舉⼀個可能不太恰當的例⼦:如果將開發程式的過程⽐喻為作戰,我們碼農便是指揮作戰的將軍,⽽我們 所寫的程式碼便是⼠兵和武器。那麼資料結構和演算法是什麼?答⽈:兵法!我們可以不看兵法在戰場上⾁搏,如此,可能會勝利,可能會失敗。即使勝 利,可能也會付出巨⼤的代價。我們寫
python資料結構與演算法(6)
Python中的順序表Python中的list和tuple兩種型別採⽤了順序表的實現技術,具有前⾯討論的順 序表的所有性質。tuple是不可變型別,即不變的順序表,因此不⽀持改變其內部狀態的任何操 作,⽽其他⽅⾯,則與list的性質類似。list的基本實現技術Python標準型別list就是⼀種元素個數可變的
python資料結構與演算法(10)
棧棧(stack),有些地⽅稱為堆疊,是⼀種容器,可存⼊資料元素、訪問元 素、刪除元素,它的特點在於只能允許在容器的⼀端(稱為棧頂端指標,英 語:top)進⾏加⼊資料(英語:push)和輸出資料(英語:pop)的運算。 沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存⼊的 那個元素,確定了⼀種預
python資料結構與演算法(9)
指定位置插⼊節點 def insert(self, pos, item): """在指定位置新增節點""" if pos <= 0:
python資料結構與演算法(8)
連結串列與順序表的對⽐連結串列失去了順序表隨機讀取的優點,同時連結串列由於增加了結點的指標域,空 間開銷⽐較⼤,但對儲存空間的使⽤要相對靈活。連結串列與順序表的各種操作複雜度如下所示:注意雖然表⾯看起來複雜度都是 O(n),但是連結串列和順序表在插⼊和刪除時進 ⾏的是完全不同的操作。連結串列的主要耗時操作是遍
python資料結構與演算法(7)
單鏈表的操作is_empty() 連結串列是否為空 length() 連結串列⻓度 travel() 遍歷整個連結串列add(item) 連結串列頭部新增元素 append(item) 連結串列尾部新增元素 insert(pos, item) 指定位置新增元素 remove(item) 刪除節點 search
python資料結構與演算法(11)
佇列佇列(queue)是隻允許在⼀端進⾏插⼊操作,⽽在另⼀端進⾏刪除操作的 線性表。佇列是⼀種先進先出的(First In First Out)的線性表,簡稱FIFO。允許插⼊ 的⼀端為隊尾,允許刪除的⼀端為隊頭。佇列不允許在中間部位進⾏操作! 假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,
python資料結構與演算法(12)
排序與搜尋排序演算法(英語:Sorting algorithm)是⼀種能將⼀串資料依照特定順序進⾏ 排列的⼀種演算法。排序演算法的穩定性穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如 果⼀個排序演算法是穩定的,當有兩個相等鍵值的紀錄R和S,且在原本的列表 中R出現在S之前,在排序過的列表
python資料結構與演算法(13)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如
python資料結構與演算法(15)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如