摘要:
· 大量筆記存放在Github Java文件中,請移步查看:https://github.com/iGuure/AndroidCodeHub/tree/master/Java%20pratice/Thinking%20in%20Java/Collection · 容器類: 1. Collection
閱讀全文
摘要:
2.5.1 將各種數(shù)據(jù)排序 · 交易事務(wù) · 指針排序 · 不可變的鍵 · 廉價的交換 · 多種排序方法 · 多鍵數(shù)組 · 使用比較器實現(xiàn)優(yōu)先隊列 · 穩(wěn)定性:能夠保留數(shù)組中重復(fù)元素的相對位置 穩(wěn)定:插入排序、歸并排序 不穩(wěn)定:選擇排序、希爾排序、快速排序、堆排序 2.5.2 我應(yīng)該使用哪種排序算法
閱讀全文
摘要:
定義:一種支持刪除最大元素和插入元素的數(shù)據(jù)結(jié)構(gòu)。 經(jīng)典實現(xiàn):基于二叉堆數(shù)據(jù)結(jié)構(gòu)。 2.4.1 API 1. 只要我們能夠高效地實現(xiàn)insert()和delMin(),下面的優(yōu)先隊列用例中調(diào)用了MinPQ的TopM就能使用優(yōu)先隊列解決這個問題。 2.4.2 初級實現(xiàn) 1. 數(shù)組實現(xiàn)(無序):修改pop
閱讀全文
摘要:
public class Quick { public static void sort(Comparable[] a) { StdRandom.shuffle(a); // 消除對輸入的依賴 sort(a, 0, a.length - 1); } private static void sort(
閱讀全文
摘要:
歸并:將兩個有序的數(shù)組歸并成一個更大的有序數(shù)組。 歸并算法:先(遞歸地)將它分為兩半分別排序,然后將結(jié)果歸并起來。 · 優(yōu)點:保證將任意長度為N的數(shù)組排序所需時間和NlogN成正比; · 缺點:所需的額外空間和N成正比。 2.2.1 原地歸并的抽象方法 public static void merg
閱讀全文
摘要:
2.1.1 游戲規(guī)則 1. 排序成本模型:在研究排序算法時,我們需要計算比較和交換的數(shù)量。對于不交換元素的算法,我們會計算訪問數(shù)組的次數(shù)。 2. · 原地排序算法:除了函數(shù)調(diào)用所需的棧和固定數(shù)目的實例變量之外無需額外內(nèi)存的原地排序算法; · 其他排序算法:需要額外內(nèi)存空間來儲存另一份數(shù)組副本。 2.
閱讀全文
摘要:
問題→ 動態(tài)連通性:當程序從輸入中讀取了整數(shù)對p q時,如果已知的所有整數(shù)對都不能說明p和q是相連的,那么則將這一對整數(shù)寫入到輸出中。如果已知的數(shù)據(jù)可以說明p和q 是相連的,那么程序應(yīng)該忽略p q這對整數(shù)并繼續(xù)處理輸入中的下一對整數(shù)。 該問題的應(yīng)用→ 網(wǎng)絡(luò),變量名等價性,數(shù)字集合等。 設(shè)計API→
閱讀全文
摘要:
總結(jié):本小節(jié)總結(jié)了編程領(lǐng)域中的兩大錯誤。 重點: 1. 常見錯誤一:過于關(guān)注程序的性能。 · 常常會降低生產(chǎn)效率,因為它會產(chǎn)生復(fù)雜而難以理解的代碼 · 如果降低成本帶來的效益并不明顯,那么對運行時間的改進就不值得了 2. 常見錯誤二:完全忽略了程序的性能。 · 浪費了大量的時間 3. 改進程序,使之
閱讀全文
摘要:
總結(jié):本小節(jié)講述了Java的內(nèi)存分配機制以及各種數(shù)據(jù)結(jié)構(gòu)所使用的內(nèi)存量。 重點: 1. 計算機中的電路很大一部分的作用就是幫助程序保存一些值并在稍后取出它們。 2. 計算機上的Java對內(nèi)存的使用經(jīng)過了精心的設(shè)計(程序的每個值在每次運行時所需的內(nèi)存量都是一樣的),但實現(xiàn)了Java的設(shè)備非常多,而內(nèi)存
閱讀全文
摘要:
總結(jié):如題。 重點: 1. 處理對于輸入的依賴的有效方法: · 更加小心地對我們所要解決的問題所處理的輸入建模 · 對最壞情況下的性能的保證 在計算機系統(tǒng)中最壞情況是非常現(xiàn)實的憂慮,因為程序的輸入可能來自另外一個(可能是惡意的)用戶而非自然界。例如,沒有使用提供性能保證算法的網(wǎng)站無法抵御拒絕服務(wù)攻擊
閱讀全文