1. 程式人生 > >MIT演算法導論第三節筆記——分治思想

MIT演算法導論第三節筆記——分治思想

這一節主要講了分治思想,首先我應該向大家推薦兩本參考書:《演算法導論》和《演算法概論》,很多講課內容都在這兩本書上,但不限於這兩本書。

這次視訊中設計的演算法如下:

歸併排序

折半查詢

求X的冪

斐波那契數,包括1. 遞迴演算法;2. 用儲存每一個計算過的斐波那契數的方式,降低計算次數;3. 利用公式(受計算機精度的限制;4. 利用定理(2*2的矩陣冪的形式),再次降低計算次數。

矩陣乘法,包括1. 普素演算法,演算法複雜度n^3;2. 分塊矩陣思想(沒能降低演算法次數);3. Volker Strassen演算法,使演算法低於n^3.

完全二叉樹在VLSI佈線(使佔用的面積最小),包括:1. 樸素佈線 ;2. 採用分治思想後的佈線。

相關推薦

MIT演算法導論三節筆記——分治思想

這一節主要講了分治思想,首先我應該向大家推薦兩本參考書:《演算法導論》和《演算法概論》,很多講課內容都在這兩本書上,但不限於這兩本書。 這次視訊中設計的演算法如下: 歸併排序 折半查詢 求X的冪 斐波那契數,包括1. 遞迴演算法;2. 用儲存每一個計算過的斐波那契數的方式

MIT演算法導論——七講.雜湊表

從作用上來講,構建雜湊表的目的是把搜尋的時間複雜度降低到O(1),考慮到一個長度為n的序列,如果依次去比較進行搜尋的話,時間複雜度是θ(n),或者對其先進行排序然後再搜尋會更快一些,但這兩種方法都不是最快的方法。 第一個話題: 計算機裡面所有儲存的內容都是數字,因此我

MIT演算法導論第一節筆記

演算法分析——研究效能和資源利用的 演算法設計 什麼比效能更重要? 為什麼要學習演算法? 1. 解決最前沿的東西(重複十年前的東西,一般不需要演算法); 2. 是更好使用者體驗的基礎,更好安全性的保障; 3. 效能是最底層的東西,相當於“貨幣”; 4.有趣。 虛擬碼的好

MIT演算法導論第二節筆記

本節主要講了一些演算法分析的內容 4種漸近符號 求解遞迴式的三種方法:(P38) 1. 代換法(通常可以) 2. 遞迴樹方法(對所有都可以,但不嚴謹) 3. 主方法-主定理(只對特等的遞迴式有效,包含三種情況)

演算法導論 十三章:紅黑樹 筆記(紅黑樹的性質、旋轉、插入、刪除)

紅黑樹(red-black tree) 是許多“平衡的”查詢樹中的一種,它能保證在最壞情況下,基本的動態集合操作的時間為O(lgn) 。 紅黑樹的性質: 紅黑樹是一種二叉查詢樹,但在每個結點上增加一個儲存位表示結點的顏色,可以是RED或BLACK 。通過對任何一條從根到葉子的路徑上各個結

演算法導論 十二章:二叉查詢樹 筆記(二叉查詢樹、查詢二叉查詢樹、插入和刪除、隨機構造的二叉查詢樹)

二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅

演算法導論 十一章:散列表 筆記(直接定址表、散列表、通過連結法解決碰撞、雜湊函式、開放定址法、完全雜湊)

前面討論的各種資料結構中,記錄在各種結構中的相對位置是隨機的,和在記錄的關鍵字之間不存在有確定的關係,因此在查詢記錄是需要進行一系列和關鍵字的比較。而理想的情況是不希望進行任何的比較,一次存取便能得到所查記錄。那就必須在記錄的儲存位置和它的關鍵字之間建立一種確定的關係f,使每個關鍵字和結構中有一

演算法導論 七章:快速排序 筆記(快速排序的描述、快速排序的效能、快速排序的隨機化版本、快速排序分析)

快速排序的最壞情況時間複雜度為Θ(n^2)。雖然最壞情況時間複雜度很差,但是快速排序通常是實際排序應用中最好的選擇,因為它的平均效能很好。它的期望執行時間複雜度為Θ(n lg n),而且Θ(n lg n)中蘊含的常數因子非常小,而且它還是原址排序的。 快速排序是一種排序演算法,對包含n個數的

演算法導論 六章:堆排序 筆記(堆、維護堆的性質、建堆、堆排序演算法、優先順序佇列、堆排序的程式碼實現)

堆排序(heapsort) 像合併排序而不像插入順序,堆排序的執行時間為O(nlgn) 。像插入排序而不像合併排序,它是一種原地( in place) 排序演算法:在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。 堆: (二叉)堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。樹

演算法導論 五章:概率分析和隨機演算法 筆記(僱傭問題、指示器隨機變數、隨機演算法、概率分析和指示器隨機變數的進一步使用)

僱傭問題: 假設你需要僱用一名新的辦公室助理。你先前的僱傭嘗試都以失敗告終,所以你決定找一個僱用代理。僱用代理每天給你推薦一個應聘者。你會面試這個人,然後決定要不要僱用他。你必須付給僱用代理一小筆費用來面試應聘者。要真正地僱用一個應聘者則要花更多的錢,因為你必須辭掉目前的辦公室助理,還要付一

演算法導論 四章:遞迴式 筆記(代換法、遞迴樹方法、主方法、主定理的證明)

三種解遞迴式的方法:代換法、遞迴樹方法、主方法。 代換法: 用代換法解遞迴式需要兩個步驟: 猜測解的形式; 用數學歸納法找出使解真正有效的常數。 如: T(n) = 2T(n/2) + n,這個是合併排序的執行時間的遞迴表示式。歸併排序法的執行時間是O(nlgn),那麼我

演算法導論 三章:函式的增長 筆記(Θ記號、O記號、Ω記號、o記號、ω記號、漸近記號的性質、標準記號與常用函式)

Θ記號: 該記號圓圈中是個M。Θ記號漸近地給出一個函式的上界和下界。 對於一個給定的函式g(n),我們用Θ(g(n))來表示以下函式的集合: Θ(g(n))={f(n):存在正常量c1、c2和n0,使得對於所有n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n)}。 即若存在正常

【學習筆記演算法導論2章:演算法基礎

//====================================== //Ch2_1_Basic_Sort_Algorthm //====================================== #include<iostream> #

演算法導論三版六章 合併K個有序連結串列的三種解法(最小堆法和分治遞迴法)

題目要求是將k個有序連結串列合併為一個連結串列,時間複雜度限定為O(nlogk)。下面給出應用最小堆方法的兩個程式,最後再貼上利用分治遞迴法的程式碼,雖然時間複雜度不及堆方法,但思路相對簡單好理解。 (1)最小堆方法1 用一個大小為K的最小堆(用優先佇列+自定義降序實現)(

MIT演算法導論公開課之18課 最短路徑演算法、Bellman和差分約束系統

Bellman-Ford 演算法 圖G=(V,E),選取s∈V作為圖的原點,此演算法可計算最短路徑δ(s,v)(v∈V)或報告出圖中存在負權值的環路。 Exercise 在路徑中存在負權值的環路時,將δ(s,v)設定為-∞。 Bellman-F

MIT演算法導論公開課之12課 跳躍表

動態搜尋結構 跳躍表(skip list) 樹堆(treap) 紅黑樹(red black tree) B樹(B tree) 跳躍表 一種簡單、高效的動態搜尋結構,使用了隨機化演算法。 插入刪除操作的期望的執行時間為O(lgn),並且這種情

演算法導論-六部分-讀書筆記

第二十一章 用於不相交集合的資料結構 第二十一章本來是第五部分裡的,但它的內容和第六部分關係更為密切,所以放到了這裡。 21.1 不相交集合的操作 不相交集合資料結構(disjoint-set data structure):維護了一個不相交可變集

MIT演算法導論公開課之15課 動態規劃、最長公共子序列

動態規劃(Dynamic programming) 動態規劃是一種設計技巧,而不是一種特定的演算法,就像分治法一樣。 最長公共子序列(Longest common subsequence)問題 有兩個序列,序列x[1~m],序列y[1~n],找到它們的最長

[演算法導論]網易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 第

MIT演算法導論公開課八講全域雜湊和完全雜湊

全域雜湊            對於任意雜湊函式而言,都存在一個不好的健集,使得所有的健都會雜湊到同一個槽裡去,那麼如何解決這種情況呢?如何防止對某個鍵集永遠有較差的表現?如何防止競爭對手使用這個鍵集來降低你的效能表現? 一個詞解決這個問題 —— 隨機! 全域雜湊的方法