1-1設計乙個演算法的步驟:
steps to developing a usable algorithm.
・model the problem.
・find an algorithm to solve it.
・fast enough? fits in memory?
・if not, figure out why.
・find a way to address the problem.
・iterate until satisfied.
總結:如何使用演算法?首先,問題建模,關鍵是理解問題四什麼?有哪些元素?然後找乙個可以解決這個問題的演算法。若有很多可用的演算法,想明白要如何選擇(要空間還是時間?),明白到底要滿足什麼,然後不斷找出最佳解決辦法。
動態連通性
對連線做如下定義:
1.自反:p連線於自身
2.對稱:若p連線於q,則q連線於p
3.傳遞:若p連線q,q連線r那麼p連線r
連通分量:最大可以連通物件的集合,有兩個特點:1)連通分量內部任意兩個物件都是相連通的;2)連通分量內部的物件不與外部物件相連通。
功能實現:
需要設計乙個類,該模型具有如下功能:
解決這類問題的第一種方法:quick find
quick find:
快速查詢基於貪心策略,支援這個演算法的資料結構是乙個簡單的物件索引整數陣列。
演算法效率:對**進行演算法複雜度分析
假設我們用這個演算法最後得到乙個完整的連通分量,那至少需要呼叫n-1次union(),每次union中至少需要2+n+1次訪問陣列:兩次訪問pid和qid,for迴圈中有n次訪問陣列比較操作,以及至少一次的賦值操作。所以我們可以得知,對於最終只得到少數連通分量而言,這種方案一般是平方級別的:(n+3)*(n-1)~n^2.我們盡量避免使用平方級別的演算法。
普林斯頓演算法課第一二三周有感
1.棧有兩種實現方式 鍊錶和可變化大小的陣列 鍊錶優點 每次push和pop得時間是一定的,總的操作時間比陣列大 陣列優點 在擴張 壓縮陣列的插入 刪除花費時間大,但均攤下來每次插入和刪除都比鍊錶快速,顯得總的操作時間小。q 何時採用鍊錶方法?a 飛機場停飛機,網路中源源不斷收到資料報。因為這樣情況...
普林斯頓公開課 演算法2 7 棧
棧和佇列都是乙個元素的集合,都能提供增加 刪除 迭代 判斷是否為空4個操作。在棧中,刪除操作刪除的是最後新增的元素。在佇列中,刪除操作刪除的是最早新增的元素。push pop isempty 將乙個鍊錶中第乙個節點刪掉,並將第二個節點設為首節點。將新的節點加入到鍊錶的頭部。在最壞情況下,每個操作的複...
普林斯頓大學演算法公開課筆記 插入排序
演算法 排序,algorithms part1插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。極客學院 演算法描述 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在...