MIT演算法導論第一節筆記
演算法分析——研究效能和資源利用的
演算法設計
什麼比效能更重要?
為什麼要學習演算法?
1. 解決最前沿的東西(重複十年前的東西,一般不需要演算法);
2. 是更好使用者體驗的基礎,更好安全性的保障;
3. 效能是最底層的東西,相當於“貨幣”;
4.有趣。
虛擬碼的好處:使演算法描述簡潔,易書寫。
三種演算法分析:
最壞時間分析——執行的上界,使用者承諾時間
平均時間分析(需要假設統計分佈)
最好時間分析——沒什麼用
漸近分析:去掉與機器相關的常量,關注時間增長。
排序問題:
插入排序:與輸入的情況有關(如:已經排好序)
與輸入規模有關
當N很小時,快;N較大時,慢
歸併排序:當N大於30時,快
用遞迴樹方法得到遞迴算式的界值。
只學習演算法分析並不能成為程式設計高手,還要結合工程實際(什麼時候問題與演算法相關,什麼時候不相關)
個人總結:MIT的課程讓人感覺講的讓人明白,不僅講了什麼,還講了為什麼,這樣做的好處及不足是什麼。
相關推薦
MIT演算法導論第一節筆記
演算法分析——研究效能和資源利用的 演算法設計 什麼比效能更重要? 為什麼要學習演算法? 1. 解決最前沿的東西(重複十年前的東西,一般不需要演算法); 2. 是更好使用者體驗的基礎,更好安全性的保障; 3. 效能是最底層的東西,相當於“貨幣”; 4.有趣。 虛擬碼的好
MIT演算法導論第二節筆記
本節主要講了一些演算法分析的內容 4種漸近符號 求解遞迴式的三種方法:(P38) 1. 代換法(通常可以) 2. 遞迴樹方法(對所有都可以,但不嚴謹) 3. 主方法-主定理(只對特等的遞迴式有效,包含三種情況)
MIT演算法導論第三節筆記——分治思想
這一節主要講了分治思想,首先我應該向大家推薦兩本參考書:《演算法導論》和《演算法概論》,很多講課內容都在這兩本書上,但不限於這兩本書。 這次視訊中設計的演算法如下: 歸併排序 折半查詢 求X的冪 斐波那契數,包括1. 遞迴演算法;2. 用儲存每一個計算過的斐波那契數的方式
演算法導論 第一章:演算法在計算中的作用 筆記
文章目錄 演算法 NP完全問題 插入排序和合並排序 演算法 演算法(algorithm) 就是定義良好的計算過程,它取一個或一組值作為輸入, 併產生出一個或一組值作為輸出。也就是說,演算法就是一系列的計算步驟,用來將輸入資料轉換成輸
[演算法導論]網易MIT演算法導論課筆記(簡略版)
Introduction to Algorithm 說明lgn是以2為底的對數 編譯環境:g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 g++ -std=c++11 XX.cpp -o XX 第
《演算法導論》讀書筆記(01)——ch02 演算法基礎【插入排序、歸併排序】
《演算法導論》第二章主要討論了兩個演算法問題:插入排序和歸併排序,在介紹兩個演算法的同時,對兩個演算法從執行效率上做了分析。最後對分治演算法進行了做了簡要介紹。下面對這兩種演算法從頭開始分析,並用C語言和JAVA語言進行實現。 目錄 1.插入排序 1.1 演算法思路
n階矩陣一般乘法-《演算法導論》學習筆記五
A、B兩個矩陣均是nxn的矩陣,則兩個矩陣的乘法: 一般的矩陣乘法程式碼: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <
【演算法導論】【筆記】【分治法】最近點對問題
尋找最近點對 目錄 尋找最近點對 問題分析 分治法 時間複雜度 題目:在一個 n≥2 個點的集合 Q 中尋找距離最近的點對 問題分析 首先很容易想到暴力破解的方法,但是需要 O(n2) 的時間複雜度,所以考慮使用分治法,但
MIT演算法導論公開課之第18課 最短路徑演算法、Bellman和差分約束系統
Bellman-Ford 演算法 圖G=(V,E),選取s∈V作為圖的原點,此演算法可計算最短路徑δ(s,v)(v∈V)或報告出圖中存在負權值的環路。 Exercise 在路徑中存在負權值的環路時,將δ(s,v)設定為-∞。 Bellman-F
桶排序-《演算法導論》學習筆記九
桶排序要求資料均勻、獨立分佈在某個區間上,然後將待排序值按某個區間劃分為幾個區間陣列,然後將待排序的數按這個區間劃分公式有序放入對應桶中,這樣放完之後再按順序從桶中拿出來一個一個放入原陣列。 c程式碼桶可以用連結串列,如待排序陣列的值為0-99,那麼桶可以劃分
MIT演算法導論公開課之第12課 跳躍表
動態搜尋結構 跳躍表(skip list) 樹堆(treap) 紅黑樹(red black tree) B樹(B tree) 跳躍表 一種簡單、高效的動態搜尋結構,使用了隨機化演算法。 插入刪除操作的期望的執行時間為O(lgn),並且這種情
MIT演算法導論——第七講.雜湊表
從作用上來講,構建雜湊表的目的是把搜尋的時間複雜度降低到O(1),考慮到一個長度為n的序列,如果依次去比較進行搜尋的話,時間複雜度是θ(n),或者對其先進行排序然後再搜尋會更快一些,但這兩種方法都不是最快的方法。 第一個話題: 計算機裡面所有儲存的內容都是數字,因此我
MIT演算法導論公開課之第15課 動態規劃、最長公共子序列
動態規劃(Dynamic programming) 動態規劃是一種設計技巧,而不是一種特定的演算法,就像分治法一樣。 最長公共子序列(Longest common subsequence)問題 有兩個序列,序列x[1~m],序列y[1~n],找到它們的最長
MIT演算法導論公開課第八講全域雜湊和完全雜湊
全域雜湊 對於任意雜湊函式而言,都存在一個不好的健集,使得所有的健都會雜湊到同一個槽裡去,那麼如何解決這種情況呢?如何防止對某個鍵集永遠有較差的表現?如何防止競爭對手使用這個鍵集來降低你的效能表現? 一個詞解決這個問題 —— 隨機! 全域雜湊的方法
trie樹-《演算法導論》學習筆記十四
引用一下百度百科的話吧: Trie樹,又稱單詞查詢樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串
MIT演算法導論-第二講-漸進符號,遞迴及解法
1.漸進符號 Θ符號,f(n) = Θ(g(n)),表示f(n)的複雜度既大於等於*g(n)的複雜度,又小於等於g(n)的複雜度,即於g(n)的複雜度相當*。 O符號,f(n) = O(g(n)),表示f(n)的複雜度最多與g(n)一個數量級,即小於等於。
MIT演算法導論公開課之第3課 分治法
分治法 1. 將一個問題劃分為若干個子問題。 2. 遞迴的解決每一個子問題。 3. 將子問題的解合併成為整個大問題的解。 歸併排序 1. 將一個數組分為兩個子陣列。 2. 遞迴的對每一個子陣列進行排序。 3. 合併兩個有序子陣列。 執行
《演算法導論》第一章第一節習題(沒有答案)
1.1-1 給出一個真實世界的例子, 其中包含著下列某種計算問題:排序, 確定多矩陣相乘的最佳順序, 或者找出凸殼。 1.1-2 除了執行速度以外,在真實世界問題背景中,還可以使用哪些效率指標? 1.1-3 選擇你見過的某種資料結構, 討論一下其長處和侷限性。 1.1-4 上文中給出的最短路
《演算法導論》第二章第一節練習題——同位二進位制數相加
需求: 用兩個同長度為n的int陣列描述兩個同位二進位制數。 用一個長度為n+1的陣列表示這兩個陣列以二進位制相加 #include<stdio.h> #define N 8 int m
【讀書筆記】演算法導論(第三版)第一章
練習: 1.1-1 給出現實生活中需要排序的一個例子或者現實生活中需要計算凸殼的一個例子 排序:淘寶銷量排序,凸殼:淘寶綜合排序 注:凸殼是一個點集中最小點集,就像一碗盛著飯的碗,凸殼就是那個碗 1.1-2 除速度外,在真實環境中還可能使用