【需求驅動】what why how
所有的學習從需求開始,學習任何知識要想事半功倍,一定要先搞清楚它存在的意義和價值
目錄
1、什麼是演算法?
2、演算法好壞的評判標準
2.1 時間複雜度(流程決定)
2.2 額外空間複雜度(流程決定)
2.3 常數項時間(實現細節決定)
what:【總而言之:演算法就是解決指定問題的方案】
微觀或數學的角度:計算方法,解決一道題的步驟。
巨集觀:乙個需求的解決方案,實現過程。
why: 降低成本,提高效率
how:通過資料結構來實現,資料結構是我們玩演算法的基礎,使我們解決問題的方案。
資料結構的概念:資料通過特定的規則分布,或者說有規律的一組資料,方便查詢。舉個例子:比如說曹操要去學校找曹植,但是去了發現所有的學生正在操場做午操,這時候如果想找到曹植,就需要乙個乙個找,但是好在學校午間操是按照班級排隊,而且操場知道自己兒子在那個班級,知道班級的情況下就可以直接去班級找,大大降低了查詢成本。學生按照班級排列這種方式就是一種資料結構。
概念:乙個演算法從頭到尾到底進行了多少次常數級別的操作,表示式建立以後,只留高階項,低階項和高階項的常數項都去掉,標記為o(忽略係數的高階項)。
常數級別的操作:【概念:乙個操作的執行時間不以具體樣本量為轉移,每次執行時間都是固定時間的操作】陣列的定址、算術運算(+ - * /)、位運算(>> >>> & ^ | ~)
非常數級別的操作:找到linkedlist中找元素。
如何確定演算法流程的總算子與樣本數量之間的表示式關係
1、想象該演算法流程所處理的最差的情況
2、把整個流程徹底拆分為乙個個基本動作,保證每個動作都是【常數時間操作】
3、如果資料量為n,看看基本動作的數量和n是什麼關係
概念:如果求解的過程中,沒有開闢新的空間,或者只是申請了幾個變數,那麼額外空間複雜度就是o(1),如果申請了新的記憶體空間比如乙個陣列,那麼額外空間複雜度就是o(n)
額外空間的定義:與功能無關,自己實現功能的過程中,必須要申請的空間才算額外空間,如果是需求要求的不算,比如說需求就要求返回乙個新陣列,那麼這個陣列不算額外空間。
概念:常數項執行時間,衡量這個指標最好的方式就是拿大樣本量去跑。
實現細節常識: 同樣是a/2這個功能,a>>1 就比 a/2高, 【>> ^ 優於 +- 優於 * /】
演算法(資料結構)
空間不夠儲存 給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 40億個數空間儲存的問題 利用對映 分析 unsigned 範圍是2 32 40億大約大約4g個數不到,常規方法肯定是不行的 我們你可以利用 伴隨陣列 那種思想利用記...
演算法 資料結構
演算法是程式的核心,演算法的好壞直接決定了程式的好壞 基礎的幾種演算法 二分查詢 氣泡排序 插入排序 選擇排序 快速排序 二分查詢 假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功 若x小於當前位置值,則在數列的前半段中查詢 若x大於當前位置值則在數...
查詢演算法 資料結構
查詢演算法總體分為靜態查詢,和動態查詢,其中靜態查詢法,不改變查詢表結構,動態查詢表,可以進行插入和刪除操作。一 查詢的基本概念 查詢,也可稱檢索,是在大量的資料元素中找到某個特定的資料元素而進行的工作。查詢是一種操作。二 順序查詢 針對無序序列的一種最簡單的查詢方式。時間複雜度為o n 三 折半查...