第五章 字串 一 《演算法》讀書筆記

2022-06-09 17:06:10 字數 2501 閱讀 5722

目錄5.1.2 低位優先的字串排序

5.1.3 高位優先的字串排序

5.1.4 三向字串快速排序

5.1.5 字串排序演算法的選擇

高位優先(msd)的字串排序:從左到右檢查鍵中的字元

5.1.1.1 頻率統計

for(int i = 0; i < n; i++)

count[a[i].key() + 1]++;

5.1.1.2 將頻率轉換為索引
for(int r = 0; r < r; r++)

count[r+1] += count[r];

5.1.1.3 資料分類
for(int i = 0; i < n; i++)

aux[count[a[i].key()]++] = a[i];

5.1.1.4 回寫
for(int i = 0; i < n; i++)

a[i] = aux[i];

鍵索引計數法排序n個鍵為0到r-1之間的整數的元素需要訪問陣列11n+4r+1次。

public class lsd

}}

低位優先的字串排序演算法能夠穩定地將定長字串排序。

對於基於r個字元的字母表的n個以長為w的字串為鍵的元素,低位優先的字串排序需要訪問~7wn+3wr次數組,使用的額外空間與n+r成正比。

5.1.3.1 對字串末尾的約定

此外,增加乙個條件語句以在子陣列較小時切換至插入排序

public class msd

public static void sort(string a)

private static void sort(string a, int lo, int hi, int d)

int count = new int[r+2]; //計算頻率

for(int i = lo; i <= hi; i++)

count[charat(a[i], d) + 2]++;

for(int r = 0; r < r + 1; r++) //將頻率轉換為索引

count[r+1] += count[r];

for(int i = lo; i <= hi; i++) //資料索引

aux[count[charat(a[i], d) + 1]++] = a[i];

for(int i = lo; i <= hi; i++) //回寫

a[i] = aux[i - lo];

for(int r = 0; r < r; r++) //遞迴地以每個字元為鍵進行排序

sort(a, lo + count[r], lo + count[r+1] - 1, d+1);

}}

5.1.3.7 效能
要將基於大小為r的字母表的n個字串排序,高位優先的字串排序演算法平均需要檢查nlogrn個字元;訪問陣列的次數在8n+3r到~7wn+3wr之間,其中w是字串的平均長度;最壞情況下所需的空間與r乘以最長的字串的長度之積成正比。

public class quick3string

public static void sort(string a)

private static void sort(string a, int lo, int hi, int d)

//a[lo..lt-1] < v = a[lt..gt] < a[gt+1..hi]

sort(a, lo, lt-1, d);

if(v > 0) sort(a, lt, gt, d+1);

sort(a, gt+1, hi, d);

}}

5.1.4.4 效能
要將含有n個隨機字串的陣列排序,三向字串快速排序平均需要比較字元~2nlnn次。

演算法

是否穩定

原地排序

執行時間

額外空間

優勢領域

字串的插入排序是是

n到n2之間

1小陣列或是已經有序的陣列

快速排序否是

nlog2n

logn

通用排序演算法,特別適合用於空間不足的情況

歸併排序是否

nlog2n

n穩定的通用排序演算法

三向快速排序否是

n到nlogn之間

logn

大量重複鍵

低位優先的字串排序是否

nwn較短的定長字串

高位優先的字串排序是否

n到nw之間

n+wr

隨機字串

三向字串快速排序否是

n到nw之間

w+logn

通用排序演算法,特別適合用於含有較長公共字首的字串

第五章 讀書筆記

第五章 搭建s3c6410開發板的測試環境 一.s3c6410開發板簡介.s3c6410是三星公司推出的一款低功耗,高價效比的risc處理器,它基於arm11核心,可廣泛應用於移動 和通用處理器等領域。該處理器有乙個非常先進的3d加速器,能實現4m s的3d加速 二.安裝串列埠除錯工具 minico...

C Template 讀書筆記 第五章

內容 技巧性基礎知識 關鍵字 typename template this 模板的模板引數 零初始化 字串的模板實參 具體內容描述 1.對模板使用typename 場景 template class test 這裡需要增加typename,需要標記告訴編譯器這個是宣告乙個模板引數型別t裡面的subt...

C 讀書筆記 第五章 語句

空語句 程式某處語法上需要一條語句而邏輯上不需要 建議使用時加注釋 while cin s s sought 空塊的作用等同於空語句 上面的 也可以用 代替 懸垂 else switch case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整形常量表示式 case 3.14 錯誤 不...