



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計與分析談到計算機方面的專業(yè)課程,我覺得數(shù)據(jù)結(jié)構(gòu)算是一門必不可少的課了,它是計算機從業(yè)和研究人員了解、開發(fā)及最大程度的利用計算機硬件的一種工具。數(shù)據(jù)結(jié)構(gòu)與算法分析是兩門緊密聯(lián)系的課程,算法要靠好的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),二者的關(guān)系是密不可分的,談到算法不得不講數(shù)據(jù)結(jié)構(gòu),談數(shù)據(jù)結(jié)構(gòu)也不可避免的要了解算法,好的算法一定有一個好的數(shù)據(jù)結(jié)構(gòu),很多算法實際上是對某種數(shù)據(jù)結(jié)構(gòu)實行的一種變換,研究算法也就是研究在實行變換過程中數(shù)據(jù)的動態(tài)性質(zhì)。這兩門課程分別是我在大二和研一的時候?qū)W的,因為它們密切的聯(lián)系,這里將其放在一起總結(jié)如下。什么是數(shù)據(jù)結(jié)構(gòu)呢?研究數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)(物理結(jié)構(gòu))以及它們之間的
2、關(guān)系,且為該結(jié)構(gòu)定義相應(yīng)的運算設(shè)計相應(yīng)的算法。這里的數(shù)據(jù)是指可輸入到計算機能被程序處理的符號的集合。其中,數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)之間邏輯關(guān)系的描述,邏輯結(jié)構(gòu)的分類有線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在計算機中存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu),它有4類基本的存儲映射方法:1.順序的方法;2.鏈接的方法;3.索引的方法;4.散列的方法。在程序設(shè)計語言中,數(shù)據(jù)結(jié)構(gòu)直接反映在數(shù)據(jù)類型上,比如一個整型變量就是一個節(jié)點,根據(jù)類型給他分配內(nèi)存單元。抽象數(shù)據(jù)類型:一組值以及在這些值上定義的操作集合,它是描述數(shù)據(jù)結(jié)構(gòu)的一種理論工具,其特點是把數(shù)據(jù)結(jié)構(gòu)作為獨立于應(yīng)用程序的一種抽象代數(shù)結(jié)構(gòu)。線性表結(jié)構(gòu):由一
3、系列元素組成的有序的序列,除了第一個元素和最后一個元素外,每個元素都只有一個直接前趨和直接后繼,元素的個數(shù)稱為線性表的長度。它的存儲方式有順序存儲和鏈式存儲。順序存儲方式它的優(yōu)點是存儲單元是連續(xù)的,適合快速訪問元素內(nèi)容,鏈表的特點是動態(tài)申請內(nèi)存空間,并通過指針來鏈接結(jié)點,按照線性表的前驅(qū)關(guān)系把一個個結(jié)點鏈接起來,這樣可以動態(tài)地根據(jù)需要分配內(nèi)存空間,經(jīng)常用于插入新結(jié)點或刪除節(jié)點的需要,鏈表還可以根據(jù)結(jié)點中指針個數(shù)分為單鏈表、雙鏈表、循環(huán)鏈表等。在線性表結(jié)構(gòu)中有兩類特別的線性表:棧和隊列。棧是一種限制訪問端口的線性表,常稱為后進先出表。正是這種特殊的性質(zhì)使得棧的用途非常廣泛,比如在計算表達式的值時
4、處理運算符的先后次序,另外一個大的用處就是遞歸了,hanoi塔就是最典型的用了遞歸的思想,在算法中,也有很多運用遞歸思想的例子。隊列也屬于限制訪問點的線性表,它的特點就是加入和刪除元素都只能在隊列的一端進行,即隊列首出,隊列尾進,最大的特點是先來先服務(wù),先進先出。因為這個特點,隊列常被用作消息緩沖器。在算法設(shè)計中,順序表主要用于檢索,而利用棧中的遞歸思想在算法中則應(yīng)用非常廣泛,如遞歸排序,分治算法等。樹結(jié)構(gòu):是一種非常重要的非線性數(shù)據(jù)結(jié)構(gòu),它是由一個根結(jié)點和若干葉結(jié)點組成的樹狀結(jié)構(gòu),除了根結(jié)點每個結(jié)點只能有一個父節(jié)點,可以有若干子結(jié)點,若干個樹結(jié)構(gòu)還可以構(gòu)成森林,樹的存儲結(jié)構(gòu)也分為順序存儲和鏈
5、式存儲,最典型的是左孩子右兄弟法。在樹結(jié)構(gòu)中比較重要的算法就是周游(遍歷)樹,有先根次序、后根次序以及中根次序。樹結(jié)構(gòu)中有幾類非常重要的特殊樹結(jié)構(gòu),如二叉樹,B樹,B+樹等,其中,二叉樹應(yīng)用最為廣泛。二叉樹:是指每個結(jié)點最多有兩個子結(jié)點的樹結(jié)構(gòu),具體細分,根據(jù)葉子結(jié)點的特性可分為滿二叉樹、完全二叉樹等。二叉樹的遍歷也分為深度優(yōu)先和廣度優(yōu)先。另外,二叉樹有幾條非常重要的性質(zhì),這也使得它的應(yīng)用非常廣泛。在算法設(shè)計中,典型的利用樹的深度優(yōu)先遍歷的算法是回溯法,而典型的廣度優(yōu)先搜索算法是分枝定界法。圖:是一種較線性表和樹更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。一般來講,數(shù)據(jù)的邏輯結(jié)構(gòu)可表示為結(jié)點的有窮集合K和K上的一個關(guān)
6、系r,如果對K中結(jié)點相對于r的前驅(qū)、后繼個數(shù)加以限制,則可以分別定義線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu),即:線性結(jié)構(gòu):惟一前驅(qū),惟一后繼,反映一種線性關(guān)系;樹形結(jié)構(gòu):惟一前驅(qū),多個后繼,反映一種層次關(guān)系;圖結(jié)構(gòu):不限制前驅(qū)的個數(shù),亦不限制后繼的個數(shù),反映一種網(wǎng)狀關(guān)系。通常用G=(V,E)代表一個圖,其中V是頂點集,E是邊集。圖分為有向圖和無向圖,圖的存儲方式有鄰接表和鄰接矩陣法。和樹類似的,圖中也需要周游,同樣有深度優(yōu)先搜索和廣度優(yōu)先搜索,而比樹的周游要更復(fù)雜,也更重要。在這一塊中,有兩種比較典型的求最短路徑和最小支撐樹的算法需要注意,它們分別是Dijkstra算法和Prim算法。另外需要注意的是圖的
7、連通性。在算法設(shè)計中,典型的用到圖論的算法有貪心算法和動態(tài)規(guī)劃算法。對于計算機科學(xué)來說,算法的概念至關(guān)重要。通俗的講,算法是指解決問題的一種方法或一個過程,或者嚴格來講,是由若干條指令組成的有窮序列,且滿足以下4條性質(zhì);(1) 輸入:有零個或多個由外部提供的量作為算法的輸入。(2) 輸出:算法產(chǎn)生至少一個量作為輸出。(3) 確定性:組成算法的每條指令是清晰的,無歧義的。(4) 有限性:算法中每條指令的執(zhí)行次數(shù)是有限的,執(zhí)行每條指令的時間也是有限的。我們研究一個算法或者評價一個算法主要是通過估計該算法的復(fù)雜性,包括時間復(fù)雜性和空間復(fù)雜性??臻g復(fù)雜性是指使用該算法的程序在運行時需要占用多少內(nèi)存空間
8、,具體包括指令空間、數(shù)據(jù)空間和環(huán)境棧空間。時間復(fù)雜性是指執(zhí)行該程序所需要的時間量級,通常是估算的時間,包括編譯時間和運行時間。同時評價一個算法的好壞還要看其時間復(fù)雜性和空間復(fù)雜性隨著輸入規(guī)模的增長趨勢,一般能接受的最好是線性增長。在算法設(shè)計這本書中,每介紹一個算法都會分析其算法復(fù)雜度,由此可看出它的重要性。首先,從遞歸的分治算法開始。分治算法的基本思想是將一個規(guī)模為n的問題分解為k個規(guī)模較小的子問題,這些子問題互相獨立且與原問題相同。遞歸的解這些子問題,然后將各個子問題的解合并得到原問題的解。該算法的主要應(yīng)用有大整數(shù)乘法,矩陣乘法、合并排序等。可以大大降低算法的時間復(fù)雜度,但使用遞歸棧可能增加
9、程序的空間規(guī)模。動態(tài)規(guī)劃算法和貪心算法:與分治算法類似,動態(tài)規(guī)劃的基本思想也是將待求解問題分解成若干子問題,先求解子問題,然后從這些子問題的解得到原問題的解。與分治算法不同的是,適合于用動態(tài)規(guī)劃法求解的問題,經(jīng)分解得到的子問題往往不是相互獨立的。動態(tài)規(guī)劃算法適用于解最優(yōu)化問題。通??砂匆韵?個步驟:(1) 找出最優(yōu)解的性質(zhì),并刻畫其結(jié)構(gòu)特征。(2) 遞歸的定義最優(yōu)值。(3) 以自底向上的方式計算出最優(yōu)值。(4) 根據(jù)計算最優(yōu)值時得到的信息,構(gòu)造最優(yōu)解。動態(tài)規(guī)劃算法的基本要素是最優(yōu)子結(jié)構(gòu)性質(zhì)和子問題重疊性質(zhì)。最優(yōu)子結(jié)構(gòu)性質(zhì)。如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,我們就稱該問題具有最優(yōu)子結(jié)
10、構(gòu)性質(zhì)(即滿足最優(yōu)化原理)。最優(yōu)子結(jié)構(gòu)性質(zhì)為動態(tài)規(guī)劃算法解決問題提供了重要線索。子問題重疊性質(zhì)。子問題重疊性質(zhì)是指在用遞歸演算法自頂向下對問題進行求解時,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復(fù)計算多次。動態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),對每一個子問題只計算一次,然后將其計算結(jié)果保存在一個表格中,當(dāng)再次需要計算已經(jīng)計算過的子問題時,只是在表格中簡單地查看一下結(jié)果,從而獲得較高的效率。另外一點要素是備忘錄方法,它作為動態(tài)規(guī)劃算法的變形,用表格保存已解決問題的答案,在下次需要解此子問題時,只要簡單查看子問題的解答,而不必重新計算。與動態(tài)規(guī)劃不同的是備忘錄方法的遞歸是自頂向下的,
11、而動態(tài)規(guī)劃則是自底向上的。動態(tài)規(guī)劃算法設(shè)計策略典型的應(yīng)用案例有:矩陣連乘、最大字段和、流水作業(yè)調(diào)度等。有時滿足動態(tài)規(guī)劃條件的問題可以有更好的算法,比如貪心算法。貪心算法即總是做出在當(dāng)前看來是最好的選擇。也就是說貪心算法并不從整體最優(yōu)上加以考慮,它所做的總是做出的選擇只是在某種意義上的局部最優(yōu)。這種啟發(fā)式的策略并不能總是奏效,然而對某些特定的問題確能達到預(yù)期目的。比如活動安排的例子。貪心算法的基本要素主要有貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)。所謂貪心選擇性質(zhì)是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達到。這是貪心算法與動態(tài)規(guī)劃的主要區(qū)別,它們的共同點是都要求問題具有最優(yōu)子結(jié)構(gòu)性
12、質(zhì)。貪心算法的典型案列是:活動安排、最優(yōu)裝載問題、最短路徑和最優(yōu)生成樹問題。回溯法和分枝定界法:回溯法有“通用的解題法”之稱。用它可以系統(tǒng)的搜索一個問題的所有解或任一解。它在問題的解空間樹中,按深度優(yōu)先策略,從根節(jié)點出發(fā)搜索解空間樹。其算法框架包含遞歸回溯和迭代回溯,兩個特別的解空間樹為子集樹和排列樹。典型的回溯法的案例有:批處理作業(yè)調(diào)度、圖的m著色、旅行售貨員問題、0-1背包問題等。分枝定界法類似于回溯法,也是在問題的解空間上搜索問題解的算法。一般情況下,分治定界法與回溯法的求解目標不同。回溯法的求解目標是找出解空間中滿足約束條件的所有的解,而分枝定界法的求解目標則是找出滿足約束條件的一個解
13、,或是滿足約束條件的解中找出使某一目標函數(shù)值達到極大或極小的解,即在某種意義下的最優(yōu)解。由于求解目標不同,導(dǎo)致分支定界法與回溯法對解空間的搜索方式也不相同。回溯法以深度優(yōu)先的方式搜索解空間,而分枝定界法則以廣度優(yōu)先或以最小耗費優(yōu)先的方式搜索解空間。另外,在算法分析中一定要提的是NP問題。首先需要介紹P(Polynomial,多項式)問題.P問題是可以在多項式時間內(nèi)被確定機(通常意義白計算機)解決的問題。NP(Non-DeterministicPolynomial,非確定多項式)問題,是指可以在多項式時間內(nèi)被非確定機(他可以猜,他總是能猜到最能滿足你需要的那種選擇,如果你讓他解決n皇后問題,他只要猜n次就能完成-每次都是那么幸運)解決的問題.這里有一個著名的問題-千禧難題之首,是說P問題是否等于NP問題,也即是否所有在非確定機上多項式可解的問題都能在確定機上用多項式時間求解。NP完全(NPComplete,NPC)問題是指這樣一類NP問題,所有的NP問題都可以用多項式時間劃歸到他們中的一個。所以顯然NP完全的問題具有如下性質(zhì):它可以在多項式時間內(nèi)求解,當(dāng)且僅當(dāng)所有的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市勞務(wù)合同范例
- 勞動合同范本在昆明
- 包地合同范本模板
- 出口車牌架采購合同范本
- 臨時用房建設(shè)合同范本
- 第五課 我是小畫家-模塊組 教學(xué)設(shè)計 -2023-2024學(xué)年大連版(2015)初中信息技術(shù)七年級下冊
- 勞動合同范本申請
- 養(yǎng)羊合作合同范本
- 2024年云浮市郁南縣河口鎮(zhèn)招聘筆試真題
- 2024年日照銀行社會招聘考試真題
- (完整word版)勞動合同書(電子版)正規(guī)范本(通用版)
- DB1522-T 1-2023 農(nóng)用天氣預(yù)報 水稻適宜度
- 光伏電站螺旋地樁承載力計算軟件
- OptiStruct及HyperStudy優(yōu)化與工程應(yīng)用
- 科目一3小時速成璇姐筆記
- Neo4j中文使用手冊以及例子
- 一例慢性阻塞性肺疾病個案護理
- 高中化學(xué)奧賽培訓(xùn)計劃
- 新蘇教版六年級科學(xué)下冊全冊知識點
- DB51-T 2146-2023 天然氣汽車改裝企業(yè)管理規(guī)范
- 反腐倡廉廉潔行醫(yī)
評論
0/150
提交評論