原创 紅黑樹(刪除操作)

上一篇文章主要講到了紅黑樹的基本性質以及插入節點的操作,有了上面的基礎後,今天就把紅黑樹剩餘的一個難點也就是刪除節點的操作詳細的講一下。 紅黑樹節點的刪除方法一開始的操作和二叉搜索樹差不多,都是首先判斷需要刪除的節點,分爲三種情況,一是如

原创 現代操作系統筆記 1

操作系統的任務是爲用戶程序提供一個更好、更簡單、更清晰的計算機模型,管理計算機硬件設備。 用戶與操作系統之間進行交互的程序,基於文本的稱爲shell,基於圖形的稱爲GUI,他們實際上並不是操作系統的一部分。 操作系統的簡化視圖如下: 多

原创 紅黑樹(基本性質及插入操作)

從二叉查找樹中我們可以看到,一些基本的動態操作如查詢,求後繼、前驅,插入,刪除等,其時間複雜度都與樹的高度有關,當樹的高度較低,也就是二叉樹比較平衡的時候,這些操作執行的就會很快;但當樹的高度較高時,例如每次向二叉樹插入節點都一直向右,那

原创 優先級隊列(大頂堆實現)

使用大頂堆可以高效的實現優先級隊列,具體大頂堆的用法,可參考:堆排序 優先級隊列是用來維護一組元素構成的集合S 的數據結構,每一個元素都含有一個關鍵字key。一個最大優先級隊列支持一下操作: Insert(S,x):把元素x插入到隊列中,

原创 現代操作系統筆記2(操作系統概念和系統調用)

操作系統概念: 1.進程 本質上是正在執行的一個程序,進程在其地址空間內讀寫,該地址空間存放有可執行程序、程序的數據以及程序的堆棧,進程的資源集包括寄存器、打開文件的清單、突出的報警、有關進程的清單。進程基本上是容納一個程序所需要所有信息

原创 堆排序

堆:可以被視爲一個完全二叉樹,樹的每一層都是填滿的,除最後一層外。表示堆的數組A具有兩個屬性:length[A]是數組中元素的個數,heap_size[A]是存放在A中的堆的元素的個數。就是說,A[heap_size[A]]之後的元素都不

原创 計數排序(BitMap實現)

計數排序假設n個輸入元素中的每一個都是介於0到k之間的整數,對每一個輸入元素x,確定出小於x的元素的個數,就可以把x直接放到最終輸出數組的位置上。例如有17個元素小於x,那麼x位於第18個輸出位置。而當有幾個元素相同時,方案需要修改,

原创 鏈表

鏈表: 順序由各對象的指針決定,可以靈活的表示動態集合,但效率不及數組高,形式如下圖所示: next[x]指向鏈表中x的下一個元素,prev[x]指向上一個元素,head[L]指向第一個元素,若head[L]=NULL,則該鏈表爲空。

原创 動態順序統計

在之前的隨機選擇算法中,我們可以很快的在集合中尋找到第i小的元素,然而,這樣的集合並不支持動態的擴充。這一節裏,將介紹通過紅黑樹(具體可參考紅黑樹1,紅黑樹2兩篇文章)的擴充,使得任意的順序統計量都可以在短時間內查找到,而這樣的數據結構同

原创 插入排序

插入排序是對少量元素進行排序的有效算法。 其工作原理與打牌類似,開始摸牌時,我們的左手是空的,一次從桌上摸起一張牌,插入到左手牌中正確的位置上。爲了找到這個正確的位置,需要將它與手中已有的每一張牌從右到左進行比較。無論什麼時候,左手的牌總

原创 歸併排序

在介紹歸併排序之前,首先需要介紹一下分治法的思想 很多算法在結構上是遞歸的,算法需要一次或多次調用自身來解決相應的子問題,即將原問題劃分成n個規模較小而結構與原問題相似的子問題,遞歸的解決這些子問題,然後合併其結果,就得到原問題的解。 分

原创 窮竭搜索

窮極搜索主要包括兩個方面: 1.深度優先搜索 2.廣度優先搜索 一些基本的思想 1.遞歸函數 在函數中調用自己的函數就是遞歸函數,例如階乘函數可以定義爲: int fact(int n) { if (n == 0) return

原创 Python文件處理(1)

讀取文件 解決方案: 最簡單的就是一次性讀取所有的內容放在一個大字符串中  all_the_text=open('thefile.txt').read() all_the_data=open('abinfile','rb').read()

原创 三行快排

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than

原创 Python字典處理技巧

從字典中取值(不想由於搜索的鍵不存在而異常) 解決方法: 使用字典的get方法 (get方法只讀取字典的值而不會去修改字典) d={'key':'value'} print d.get('key','not found') print d