1. 程式人生 > >演算法設計技巧與分析筆記 第一章

演算法設計技巧與分析筆記 第一章

1.搜尋:設A【1……n】為一個n個元素的陣列,判定給定元素x是否在A中

線性搜尋:直接掃描A中所有專案,將每個專案與x做比較。

二分搜尋

A【low……high】為有序非空陣列(假定為升序),A【mid】為中間元素

假定x>A【mid】,則丟棄A【low…mid】,繼續搜尋A【mid+1…high】;

假定x<A【mid】,則丟棄A【mid…high】,繼續搜尋A【low…mid-1】;

若x=A【mid】,返回mid,結束搜尋。

演算法分析:時間複雜度:O(log n)

2.排序設A【1……n】為一個n個元素的陣列,將A中元素進行排序

選擇排序(SELECTIONSORT):

首先找到最小元素,並將其放在A【1】中,然後找到剩下n-1個元素中最小元素,放入A【2】中,重複值數列有序

元素比較次數:n(n-1)/2;

插入排序(INSERTIONSORT):

從大小為1的A【1】開始,它自然是已排序的,則接下來的第i次中,將A【i】插入到已排序的子陣列A【1…i-1】中的合適位置,重複直到數列有序。

元素比較次數:n-1到n(n-1)/2之間,元素比較次數取決於輸入元素的順序;

自底向上排序(BOTTOMUPSORT):

將元素分為以1為單位的陣列,先合併為一個2元素的排序序列,然後將每兩個連續的2元素序列合併為大小為4的排序序列,……在第j次迭代中,合併n/2^j(下取整)對大小為2^(j-1)的排序序列,若剩餘k個元素,1<=k<=2^(j-1)時,將k放在下一次合併中,若2^(j-1)<k<2^j,則將它們合併。

元素比較次數:(nlogn)/2到nlogn-n+1之間;元素比較次數與元素輸入次序有關;

演算法思想結合下圖:


相關推薦

演算法設計技巧分析筆記 第一

1.搜尋:設A【1……n】為一個n個元素的陣列,判定給定元素x是否在A中 線性搜尋:直接掃描A中所有專案,將每個專案與x做比較。 二分搜尋: A【low……high】為有序非空陣列(假定為升序),A【mid】為中間元素 假定x>A【mid】,則丟棄A【low…mid】

010-最近點對問題-分治法-《演算法設計技巧分析》M.H.A學習筆記

設S是平面上n個點的集合,在S中找到兩點p、q,使得他們的歐幾里得距離d(p,q)是所有點對中最小的。 樸素的演算法是計算所有點對的距離,在求出最小的,需要Ω(n2)。 採用分治法可以在Θ(nlogn)完成任務。 基本思路: 我們用分治正規化來解釋這一過程: (a)劃

021-回溯法深搜的關係-《演算法設計技巧分析》M.H.A學習筆記

關於回溯法與深搜的關係,一直沒有很好的搞明白,其實百度百科已經寫得很好了: 回溯法的基本思想: 在包含問題的所有解的解空間樹中,按照深度優先搜尋的策略,從根結點出發深度探索解空間樹。當探索到某一結點

009-矩陣乘法-分治法-《演算法設計技巧分析》M.H.A學習筆記

A、B是兩個n*n的矩陣,計算C=A*B。傳統演算法: 按照下面公式計算,需要n3次乘法和n3-n2次加法,時間複雜度為Θ(n3)。 遞迴演算法: 假定n為2的冪,將A、B、C分成4個大小為(n/2)*(n/2)的子矩陣。 用分治法來計算C。 需要8次(n/2)*(n/2

005-二分搜尋-分治法-《演算法設計技巧分析》M.H.A學習筆記

二分搜尋又稱折半查詢,用於在排序好的序列表中進行搜尋,搜尋效率高,可在最壞的情況下用O(log n)完成搜尋任務。 基本思想: 將n個元素分成個數大致相同的兩半,取a[n/2]與欲查詢的x作比較,如果x=a[n/2]則找到x,演算法終止。如 果x<a[n/2],

007-尋找第k小元素-分治法-《演算法設計技巧分析》M.H.A學習筆記

在n個元素的陣列中查詢第k小的元素。Θ(n) 顯然先排序的話,複雜度為O(nlogn)。 但我們還有一個很漂亮的Θ(n)的演算法。 先說一下分治法的閾值:我們有一種吊炸天的分治演算法,可以用很好的效率求解出某個問題,分治演算法當然在達到一個非常小的規模時,會能

011-最長公共子序列-動態規劃-《演算法設計技巧分析》M.H.A學習筆記

給出兩個長度分別為n和m的字串A和B,確定A和B中最長公共子序列的長度。 樸素演算法:列舉A中所有的子序列2n個,並逐個判斷其是否在B中(Θ(m)耗費)。時間複雜度為Θ(m2n)。 利用動態規劃可

【 專欄 】- 《演算法設計技巧分析》M.H.A學習筆記

《演算法設計技巧與分析》M.H.A學習筆記 期末到了開始複習演算法,順便寫寫部落格,看的書是M.H.Alsuwaiyel的《演算法設計技巧與分析》,書挺好的,就是有一些解釋不是很清楚。 這裡寫我自己的理解,重新簡單排版下一些有價

演算法設計技巧分析(中文版)》下載

2018年11月01日 21:04:02 qq_43580768 閱讀數:1 標籤: 程式設計 資料

演算法設計技巧分析)CloseStpair

#include<iostream> #include<time.h> #include<math.h> using namespace std; class Point { public: int x; int y; void

演算法設計技巧分析)LCS

#include<iostream> #include<stack> using namespace std; void LCS(int **,char[],int,char[],int); void LCS_print(int **,stack&

《資料探勘資料化運營實戰:思路、方法、技巧應用》第一 什麼是資料化運營

《資料探勘與資料化運營實戰:思路、方法、技巧與應用》電子書地址:http://www.chforce.com/books/datamining-om-by-data/index.html 資料化運營實施的前提條件包括企業級海量資料儲存的實現、精細化運營的需求(與傳統的粗放型運營相對比)、資料分析

《現代作業系統》精讀思考筆記 第一 引論

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   課後習題的選擇標準:儘量避免單純的概念考察

《資料結構演算法分析》學習筆記-第十-演算法設計技巧

[toc] *** ## 10.1 貪婪演算法 貪婪演算法分階段的工作,在每個階段,可以認為所做決定是最好的,而不考慮將來的後果。一般來說,這意味著選擇的是某個區域性的最優。當演算法終止時,我們希望區域性最優就是全域性最優。如果是這樣的話,那麼演算法就是正確的,否則,演算法得到的是一個次最優解。如果不要求絕

《資料結構演算法分析》學習筆記-第一-引論

自述 自從工作之後,就沒有再寫部落格了,一方面是因為自己初入職場還不能很好的適應職場生活。另一方面也是對前途有些不知所措。現在工作已經快三年了,我慢慢找到了自己的節奏,也許還是有很多不成熟的地方,但是我已經想開啦。做自己真正喜歡的事就好了,遵循自己的內心。在職場的這些年我寫了很多筆記,但是沒有時間整理出來,後

《數據庫設計入門經典》讀書筆記——第一:數據庫建模的過去現在

port 混合 如果 執行 很好 創建表 規則 什麽 增長 《數據庫設計入門經典》,現在學習的是這本書,雖然以前就看過類似的書,可能由於之前經驗不足,書中說的某些東西只消化了一部分,現在重溫一邊好懂多了。所以說讀第一遍讀不懂不要緊,過個一年半載的再來讀,還是會讀不懂的,哈哈

演算法設計分析第一週作業

《演算法設計與分析》第一週作業 標籤(空格分隔): 課堂作業 姓名:李** 學號:16340114 題目:Valid Parentheses(https://leetcode.com/problems/valid-parentheses/description/) 題目

演算法設計分析第1 演算法概述

第1章 演算法概述(窮舉演算法) 重要人物:Alan Turing(圖靈機)、Donald Knuth(TEX系統) 演算法:解決問題的一種方法或一個過程 特性:有窮性(Finiteness)、確定性(Definiteness)、可行性(effectivenes

演算法設計分析筆記——合併排序

簡介 合併排序演算法是用分治策略實現對n個元素進行排序的演算法。其 基本思想 是:將待排序元素分成大小大致相容的2個子集合,分別等於2個子集合進行排序,最終將排好序的子集合合併成為所要求的排好序的集合。 · 圖解: 非遞迴合併排序演算法

演算法設計分析筆記之(2):遞迴分治策略

宣告 1)本文僅供學術交流,非商用。具體引用的資料請看參考文獻。如果某部分不小心侵犯了大家的利益,請聯絡博主刪除。 2)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。 聯