發(fā)現(xiàn) 自己寫個小程序 - 文本存儲二叉結(jié)構(gòu)的hashMap。 那個費勁! 痛下決心 仔細學(xué)習(xí) 算法 。
(如果大家有興趣就跟我一起 - 《算法導(dǎo)論》,也望大家監(jiān)督我能每天拿出一小時和大家分享算法,算法代碼我會盡量使用 py 和 解決一些分析日志的應(yīng)用上靠 (其實,上面費勁的 二叉hash 是為了分析日志中 - 希望能實現(xiàn) 多個大文件不需要合并就能根據(jù)某列排序輸出! 目前的解決辦法 find .. -exec cat {} \; | perl |sort 的笨方法 )
1. 算法在計算中的作用 (筆記) :
算法(algorithm):就是定義良好的計算過程,它取一個或一組作為輸出,并產(chǎn)生一個或一組自作為輸出。
一些函數(shù)運行級別 # http://www.wolframalpha.com/ 函數(shù)都可在網(wǎng)站里運行
這里 n=一億條數(shù)據(jù) :
log_2(n) 30
n^0.5 31622
n 10^9
n*log_2(n) 2.9^10
n^2 10^18
n^3 10^27
2^n 無窮
n! 10^362880
需要知道的復(fù)雜度 - 在某一個臨界點后 合并會別插入要快的
插入排序 復(fù)雜度 n^2 http://www.wolframalpha.com/input/?i=n^2
合并排序 復(fù)雜度 n*log_2(n) http://www.wolframalpha.com/input/?i=n*log_2%28n%29+
網(wǎng)上的查找到的一些名稱:參考 http://www.51testing.com/?uid-130868-action-viewspace-itemid-66729
1.1穩(wěn)定排序 非穩(wěn)定排序 -
穩(wěn)定排序是所有相等的數(shù)經(jīng)過某種排序方法后,仍能保持它們在排序之前的相對次序,。反之,就是非穩(wěn)定的排序。
1.2內(nèi)排序 外排序
在排序過程中,所有需要排序的數(shù)都在內(nèi)存,并在內(nèi)存中調(diào)整它們的存儲順序,稱為內(nèi)排序; 在排序過程中,只有部分數(shù)被調(diào)入內(nèi)存,并借助內(nèi)存調(diào)整數(shù)在外存中的存放順序排序方法稱為外排序。
1.3算法的時間復(fù)雜度 空間復(fù)雜度
所謂算法的時間復(fù)雜度,是指執(zhí)行算法所需要的計算工作量。 一個算法的空間復(fù)雜度,一般是指執(zhí)行這個算法所需要的內(nèi)存空間。
幾種常見的算法復(fù)雜度:
2.1冒泡排序 (Bubble Sort) O(n^2)
2.2選擇排序 (Selection Sort) O(n^2 )
2.3插入排序 (Insertion Sort) O(n^2)
2.4堆排序 O( nlog(n) )
2.5歸并排序 O( nlog_2(n) )
2.6快速排序 最好 O( nlog_2(n) ) 最壞 O(n^2)
wiki 參考 :http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95
穩(wěn)定的
整理 www.aygfsteel.com/Good-Game
(如果大家有興趣就跟我一起 - 《算法導(dǎo)論》,也望大家監(jiān)督我能每天拿出一小時和大家分享算法,算法代碼我會盡量使用 py 和 解決一些分析日志的應(yīng)用上靠 (其實,上面費勁的 二叉hash 是為了分析日志中 - 希望能實現(xiàn) 多個大文件不需要合并就能根據(jù)某列排序輸出! 目前的解決辦法 find .. -exec cat {} \; | perl |sort 的笨方法 )
1. 算法在計算中的作用 (筆記) :
算法(algorithm):就是定義良好的計算過程,它取一個或一組作為輸出,并產(chǎn)生一個或一組自作為輸出。
一些函數(shù)運行級別 # http://www.wolframalpha.com/ 函數(shù)都可在網(wǎng)站里運行
這里 n=一億條數(shù)據(jù) :
log_2(n) 30
n^0.5 31622
n 10^9
n*log_2(n) 2.9^10
n^2 10^18
n^3 10^27
2^n 無窮
n! 10^362880
需要知道的復(fù)雜度 - 在某一個臨界點后 合并會別插入要快的
插入排序 復(fù)雜度 n^2 http://www.wolframalpha.com/input/?i=n^2
合并排序 復(fù)雜度 n*log_2(n) http://www.wolframalpha.com/input/?i=n*log_2%28n%29+
網(wǎng)上的查找到的一些名稱:參考 http://www.51testing.com/?uid-130868-action-viewspace-itemid-66729
1.1穩(wěn)定排序 非穩(wěn)定排序 -
穩(wěn)定排序是所有相等的數(shù)經(jīng)過某種排序方法后,仍能保持它們在排序之前的相對次序,。反之,就是非穩(wěn)定的排序。
1.2內(nèi)排序 外排序
在排序過程中,所有需要排序的數(shù)都在內(nèi)存,并在內(nèi)存中調(diào)整它們的存儲順序,稱為內(nèi)排序; 在排序過程中,只有部分數(shù)被調(diào)入內(nèi)存,并借助內(nèi)存調(diào)整數(shù)在外存中的存放順序排序方法稱為外排序。
1.3算法的時間復(fù)雜度 空間復(fù)雜度
所謂算法的時間復(fù)雜度,是指執(zhí)行算法所需要的計算工作量。 一個算法的空間復(fù)雜度,一般是指執(zhí)行這個算法所需要的內(nèi)存空間。
幾種常見的算法復(fù)雜度:
2.1冒泡排序 (Bubble Sort) O(n^2)
2.2選擇排序 (Selection Sort) O(n^2 )
2.3插入排序 (Insertion Sort) O(n^2)
2.4堆排序 O( nlog(n) )
2.5歸并排序 O( nlog_2(n) )
2.6快速排序 最好 O( nlog_2(n) ) 最壞 O(n^2)
wiki 參考 :http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95
穩(wěn)定的
- 冒泡排序(bubble sort) — O(n2)
- 雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)
- 插入排序 (insertion sort)— O(n2)
- 桶排序 (bucket sort)— O(n); 需要 O(k) 額外空間
- 計數(shù)排序 (counting sort) — O(n+k); 需要 O(n+k) 額外空間
- 合併排序 (merge sort)— O(n log n); 需要 O(n) 額外空間
- 原地合併排序 — O(n2)
- 二叉排序樹排序 (Binary tree sort) — O(n log n)期望時間; O(n2)最壞時間; 需要 O(n) 額外空間
- 鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外空間
- 基數(shù)排序 (radix sort)— O(n·k); 需要 O(n) 額外空間
- Gnome sort — O(n2)
- Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外空間
[編輯] 不穩(wěn)定
- 選擇排序 (selection sort)— O(n2)
- 希爾排序 (shell sort)— O(n log n) 如果使用最佳的現(xiàn)在版本
- Comb sort — O(n log n)
- 堆排序 (heapsort)— O(n log n)
- Smoothsort — O(n log n)
- 快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數(shù)串列一般相信是最快的已知排序
- Introsort — O(n log n)
- Patience sorting — O(n log n + k) 最壞情況時間,需要 額外的 O(n + k) 空間,也需要找到最長的遞增子序列(longest increasing subsequence)
[編輯] 不實用的排序演算法
- Bogo排序 — O(n × n!) 期望時間,無窮的最壞情況。
- Stupid sort — O(n3); 遞迴版本需要 O(n2) 額外記憶體
- Bead sort — O(n) or O(√n), 但需要特別的硬體
- Pancake sorting — O(n), 但需要特別的硬體
整理 www.aygfsteel.com/Good-Game