日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

發布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

曉強Deep Learning的讀書分享會,先從這里開始,從大學開始。大家好,我是曉強,計算機科學與技術專業研究生在讀。我會不定時的更新我的文章,內容可能包括深度學習入門知識,具體包括CV,NLP方向的基礎知識和學習的論文;網絡表征學習的相關論文解讀。當然我每天的讀書心得也會分享給大家,可能涉及我們生活各個方面的書籍。我也會不定時回答大家的問題與大家一同進步,共同交流,互相監督,結交更多的朋友。希望大家多留言,多交流,多多關照。我在這里等你一同學習,如果需要相關資料也可以私信我,進入我們的群大家庭。

【曉白】最近的更新有些少了,因為白天事情很多,沒有能夠騰出時間來寫文章。我注意到一個現象就是我回答關于CBA的問題閱讀量卻達到了幾千,但是不忘初心,牢記使命。我還是希望在這里分享一下技術文章。所以想一想有時間還是要整理寫一篇技術類文章啦,以對得起粉絲們對我的支持。以后我會不定期更文章,先從計算機視覺開始,逐步更新多個深度學習應用領域的知識點,如有錯誤大家多指正,多交流,多討論,共同學習,互相進步。如果內容對大家有一些幫助,請大家多點贊支持,分享。算法的設計與分析是程序員的基本功,所以我也會寫一些算法類的文章,供大家學習,討論。今天先從算法設計與分析的第一章開始。請關注我的文章鏈接,以后我會繼續更新,敬請期待。

算法定義:算法是解決某個問題的方法或過程,在整個計算機領域,算法無處不在!

(1) 操作系統的進程管理,內存管理,……

(2) 編譯系統的語法分析、詞法分析、代碼優化 …….

(3) 數據庫管理系統的數據操作算法、查詢優化算法……

(4) Google、Baidu等搜索引擎使用PageRank算法……

(5) …….

主要更新內容包括:設計算法及分析算法的理論、方法和技術;

可計算問題的算法設計與分析。

主要算法設計方法:

遞歸與分治策略

動態規劃

貪心算法

樹形搜索算法

近似算法

隨機算法

算法的分析方法:不同的設計方法有不同的分析方法 。

第一節 算法在計算機科學中的地位

算法是計算機科學的重要主題

70年代前

計算機科學基礎的主題沒有被清楚地認清

70年代

Knuth出版了《The Art of Computer Programming》

以算法研究為主線確立了算法為計算機科學基礎的重要主題

1974年獲得圖靈獎

70年代后

算法作為計算機科學核心推動了計算機科學技術飛速發展

計算機科學技術的體系:解決一個計算問題的過程

可計算理論:

計算模型

可計算問題/不可計算問題

計算模型的等價性--圖靈/Church命題

計算模型

計算模型是刻畫計算的抽象的形式系統或數學系統。在計算科學中,計算模型是指具有狀態轉換特征,能夠對所處理對象的數據或信息進行表示、加工、變換和輸出的數學機器。

圖靈機是圖靈機理論中提出的理想模型,其可以實現任意復雜的計算。

英國數學家艾倫·圖靈在1936年提出了「圖靈機」的理論。「圖靈機」設想有一條無限長的紙條,紙條上有一個個方格,每個方格可以存儲一個符號,紙條可以向左或向右運動。

圖靈機可以做下面三個基本的操作:

1、讀取指針頭指向的符號。

2、修改方框中的字符。

3、將紙帶向左或向右移動,以便修改其臨 ,近方框的值。

用圖靈機完成異或操作。

嘗試將1 1 0做一個異或操作,即將1 1 0變成0 0 1。要圖靈機完成計算,就類似于向圖靈機輸入以下操作指令,這些指令組成了一個小程序。

圖靈機的意義:

思考:我有許多很復雜的公式需要計算,如果自己一個人算的話時間會很久。

思考:能不能有一個東西能幫我實現公式的計算,無論這個公式有多復雜?

思考:我能不能設計一個模型來證實這個實行是可行的?(數學家最喜歡建模型來證明了~)

思考:提出「圖靈機」理論,任何計算都可以簡化成固定的步驟,無論多復雜的計算都能實現了。

某些動手能力強的數學家利用電子工程學知識將許多真空管組成了一套設備,實現了「圖靈機」理論模型。隨著電子工程的不斷發展,原本龐大的計算機不斷變小,慢慢地變成了今天的計算機。

等價機器,除了圖靈機以外,人們還發明了很多其它的計算模型。包括:寄存器機

遞歸函數,λ演算,生命游戲,馬爾可夫算法。然而這些模型無一例外地都和圖靈機的計算能力等價,因此邱奇,圖靈和哥德爾提出了著名的邱奇-圖靈論題:一切直覺上能行可計算的函數都可用圖靈機計算,反之亦然。

通俗地說,停機問題就是判斷任意一個程序是否在有限的時間內結束運行的問題。

程序簡單時容易做出判斷,當例子復雜時會遇到較大的困難,而在某些情況下則無法預測。

可計算理論

計算模型

可計算問題/不可計算問題

計算模型的等價性--圖靈/Church命題

計算復雜性理論

在給定的計算模型下研究問題的復雜性

固有復雜性

復雜性下界

平均復雜性

復雜性問題的分類: P=NP?

公理復雜性理論

算法設計和分析

設計算法的理論、方法和技術

分析算法的理論、方法和技術

計算機軟件

系統軟件

工具軟件

應用軟件

第二節 算法與程序

算法(Algorithm)的概念

通俗地講算法是指解決問題的一種方法或一個過程。

嚴格地講,算法是由若干條指令組成的有窮序列,且滿足下述性質:

(1)輸入: 有零個或多個由外部提供的量作為算法輸入。

(2)輸出: 算法產生至少一個量作為輸出。

(3)確定性: 組成算法的每條指令是清晰的,無歧義的。

(4)有限性: 算法中每條指令的執行次數是有限的, 執行每條指令的時間也是有限的。

算法與程序的區別

程序是算法用某種程序設計語言的具體實現;

程序可以不滿足算法的性質(4)----有限性。

例如:

操作系統,它是一個在無限循環中執行的程序,因而不是算法。可把操作系統的各種任務看成是一些單獨的問題,每個問題由操作系統中的一個子程序通過特定的算法來實現。

算法描述

描述算法可以有多種形式。可以用C/C++,python等編程語言或偽代碼描述算法。

第三節 算法復雜性分析

算法復雜性的含義

一個算法的復雜性的高低體現在運行該算法所需的計算機資源(主要指時間和空間資源)的多少上。

算法的復雜性主要分為:

時間復雜性

空間復雜性

算法的復雜性分析的用處途: 為求解一個問題選擇最佳算法、最佳設備

隨著計算機要解決的問題越來越復雜,規模越來越大,對求解這類問題的算法作復雜性分析具有特別重要的意義。

隨著計算機技術的迅速發展,對空間的要求往往不如對時間的要求那樣強烈。因此我們這里的分析主要強調時間復雜性的分析。

考慮時間復雜性的理由:

某些用戶需要提供程序運行時間的上限(用戶可接受的);所開發的程序需要提供一個滿意的實時反應。一般考慮最壞情況;最好情況;平均情況。

時間復雜性的計算方法(即估算運行時間的方法): 加、減、乘、除、比較、賦值等操作,一般被看作是基本操作,并約定所用的時間都是一個單位時間;通過計算這些操作分別執行了多少次來確定程序總的執行步數。 一般地,一些關鍵操作執行的次數決定了算法的時間復雜度。

例1:二分查找算法

template<class T>

int Max(T a[], int n)

{//尋找a[0:n-1]中的最大元素

int pos=0;

for (int i=1; i<n; i++)

if (a[pos]<a[i])

pos=i;

return pos;

}

例2:尋找最大元素:T(n)= O(n)

例3:非遞歸的折半搜索算法

while的每輪以減半的比例縮小搜索范圍,所以該循環在最壞的情況下需要執行 O (log(n))次;每輪耗時 O(1) 。所以,T(n)=O(logn)。

例4:插入排序算法

排序算法對比算法:插入排序算法的時間復雜性是an2;歸并排序算法的時間復雜性是a’nlog2n;

計算機A: 109指令/秒, 計算機B: 107指令/秒

隨著輸入的規模增加,歸并排序要遠遠優于插入排序

當n=106時, A需要 ( 2(106)2指令)/(109指令/秒) = 2000秒

B需要 (50(106)log2106指令)/(107指令/秒)≈100秒

當n=107時, A需要 2.3天

B需要 20分鐘

漸近復雜性分析: 確定程序的操作計數和執行步數的目的是為了比較兩個完成同一功能的程序的時間復雜性,預測程序的運行時間隨著問題規模變化的變化量。

設T(n)是算法A的時間復雜性函數。 是算法A當n→∞時的漸近時間復雜性,是T(n)中略去低階項所留下的主項。#T(n ) 進一步分析可知,漸近復雜性分析只要關心 #T(n )的階就夠了,不必關心包含在 #T(n ) 中的常數因子。所以,我們還可對 #T(n ) 的分析進一步簡化。

綜上分析,我們已經給出了簡化算法復雜性分析的方法和步驟,即只考慮當問題的規模充分大時,算法復雜性在漸近意義下的階。為此引入漸近符號。在那之前,首先給出常用的漸近函數。

常用的階

第四節 計算復雜性函數的階

若用f(n)表示一個程序的時間或空間復雜性,則它是問題規模n的函數。由于程序的時間或空間需求是一個非負實數,即函數f(n)對于n (n≥0)的所有取值均為非負實數。

(1)高階函數記號

f(n)=O(g(n))當且僅當存在正的常數C和n0,使得對于所有的n≥n0,有f(n)≤ Cg(n)。此時,稱g(n)是f(n)的一個上界函數。

三點注意事項:(1)用來作比較的函數g(n)應該盡量接近所考慮的函數f(n)。

如:3n+2=O(n2) 松散的界限;

3n+2=O(n) 較好的界限。

(2)不要產生錯誤界限。

如: n2+100n+6

當n<3時,n2+100n+6<106n,由此就認為n2+100n+6=O(n)是錯誤的!

事實上,對任何正常數C,只要n>C-100就有n2+100n+6>C×n。

同理,3n2+4×2n=O(n2)是錯誤的界限。

(3)f(n)=O(g(n))不能寫成g(n)=O(f(n))。因為兩者并不等價。

(2)低階函數記號:

f(n)=Ω(g(n)) 當且僅當存在正的常數C和n0, 使得對于所有的n≥ n0 ,有f(n)≥C(g(n))。

此時,稱g(n)是 f(n)的下界

(3)同階函數記號:

設f(n)和g(n)是正值函數,f(n)=Θ(g(n))當且僅當存在正常數和C1,C2和n0,使得對于所有的n≥n0, 有C1(g(n))≤f(n)≤ C2(g(n))。此時,稱f(n)與g(n)同階

例: 3n+2= Θ(n)

5×2n +n2= Θ(2n)

(4)嚴格高階函數記號:

設f(n)和g(n)是正值函數。如果?c>0, 存在n0 , ?n>n0, f(n)<cg(n),則稱f(n)嚴格比g(n)低階,或g(n)是f(n)的嚴格上界,記作f(n)=o(g(n))。

(5)嚴格低階函數記號:

設f(n)和g(n)是正值函數。如果?c>0, 存在n0 , ?n>n0, f(n)>cg(n),則稱f(n)嚴格比g(n)高階,或g(n)是f(n)的嚴格下界函數,記作f(n)= ?(g(n))。

例: 3n2 +2= ? (n)

是否所有的函數之間都是可比的?

第五節 遞歸方程解的漸近階的求法三種求遞歸方程解的漸近階的方法:

(1)代入法(Substitution Method)

(2)迭代法 (Iteration Method)

(3)套用公式法(Master method)

(1)代入法(Substitution Method)

Substitution方法Ⅰ:聯想已知的T(n) ;

----Guess first, 然后用數學歸納法證明.

例1. 求解2T(n/2) + n

例2. 求解2T(n/2 + 17) + n

證明:用數學歸納法

Substitution方法II:上擠下壓

例2. 求解T(n) =2T(n/2)+n

Substitution方法III:變量替換----經變量替換把遞歸方程變換為熟悉的方程.

(2)迭代法 (Iteration Method)

方法:

循環地展開遞歸方程, 把遞歸方程轉化為和式,然后可使用求和技術解之。

(3)套用公式法(Master method)

這個方法為估計形如T(n)=aT(n/b)+f(n)

的遞歸方程解的漸近階提供三個可套用的公式。

注:上式是一個遞歸方程,其中:a≥1和b>1是常數,f(n)是一個確定的正函數。

Master 定理:設a≥1和b>1是常數,f(n)是一個確定的正函數。T(n)是定義在非負集上的函數T(n)=aT(n/b)+f(n) .

T(n)可以如下求解:

直觀地說,可用f(n)與nlogba作比較:

(1)若 nlogba的階較大, 則T(n)=Θ(nlogba)。

(2)若 f(n)和nlogba同階 ,則T(n)=Θ(nlogbalogn) 。

(3)若f(n)的階較大, 則T(n)=Θ(f(n))。

例1: T(n)=9T(n/3)+n

此時,a=9,b=3,f(n)=n,

∴ nlogba = nlog39= n2

可套用第一類情況得T(n)= Θ (n2)。

例2: T(n)=T(2n/3)+1

此時,a=1,b=3/2,f(n)=1,

∴ nlogba = nlog3/21= n0=1

可套用第二類情況得T(n)= Θ (logn) 。

例3:T(n)=3T(n/4)+nlogn

此時,a=3,b=4,f(n)=nlogn,

∴nlogba = nlog43= O(n0.793)

可套用第三類情況得T(n)= Θ (nlogn)。

例4: T(n)=2T(n/2)+nlogn

此時,a=2,b=2,f(n)=nlogn,

∴ nlogba = nlog22=n

此時f(n)在第二類情況和第三類情況的間隙 里,本方法對它無能為力。

注意:在第一類情況下, f(n)的階不僅必須比nlogba的階小,而且必須是多項式地比 nlogba的階小,即f(n)必須漸近地小于nlogba與n-ε的積,ε是某個正常數。

在第三類情況下, f(n)的階不僅必須比nlogba的階大,而且必須是多項式地比 nlogba的階大,即f(n)必須漸近地大于nlogba與n+ε的積,ε是某個正常數。

【曉議】今天技術文章更新完畢,算法設計與分析計算機基礎知識的第一篇。如果有需要繼續補充的,我會在后面繼續更新。每一部分的代碼講解,請關注我之后私信我,我會發給大家。您如果在計算機入門時或者想轉行學習計算專業的知識,有什么問題也可以一起討論解決。謝謝大家的關注和分享。如果對您有幫助,請幫我點贊,謝謝。附上之前的文章連接,方便大家學習。關注我,看更多更精彩的文章,我會按每天的進度安排,不定時更新對大家有益的內容。

曉強DL:圖像處理必讀論文之AlexNet?zhuanlan.zhihu.com曉強DL:Opencv圖像處理(一)?zhuanlan.zhihu.com曉強DL:OpenCV圖像處理(二)?zhuanlan.zhihu.com曉強DL:Opencv圖像處理(三)?zhuanlan.zhihu.com曉強DL:Opencv圖像處理 (四)?zhuanlan.zhihu.com

總結

以上是生活随笔為你收集整理的哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。