計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法_第1頁
計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法_第2頁
計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法_第3頁
計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法_第4頁
計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

計算機軟件基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之算法算法概述基本數(shù)據(jù)結(jié)構(gòu)排序算法查找算法圖論算法動態(tài)規(guī)劃算法算法優(yōu)化與復(fù)雜度分析算法概述01算法的定義與特性算法是一組有窮的規(guī)則,它們規(guī)定了解決某一特定類型問題的一系列運算步驟。算法具有五個基本特性:有窮性、確定性、可行性、輸入和輸出。123枚舉算法、解析算法、查找算法、排序算法、圖論算法等。按照設(shè)計方法分類精確算法、近似算法、啟發(fā)式算法等。按照問題求解模式分類數(shù)值計算算法、非數(shù)值計算算法、數(shù)據(jù)處理算法等。按照問題類型分類算法的分類健壯性評估算法對于異常情況的處理能力和穩(wěn)定性??勺x性評估算法的易讀性和易理解性,對于代碼維護和團隊協(xié)作至關(guān)重要。正確性評估算法是否能正確地解決給定的問題。時間復(fù)雜度評估算法執(zhí)行時間隨問題規(guī)模增長的變化情況,常用大O表示法表示。空間復(fù)雜度評估算法執(zhí)行過程中所需存儲空間隨問題規(guī)模增長的變化情況。算法的評價指標(biāo)基本數(shù)據(jù)結(jié)構(gòu)0203線性表的存儲結(jié)構(gòu)包括順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu),其中順序存儲結(jié)構(gòu)通過數(shù)組實現(xiàn),鏈?zhǔn)酱鎯Y(jié)構(gòu)通過鏈表實現(xiàn)。01線性表的定義線性表是一種具有n個元素的有限序列。02線性表的邏輯結(jié)構(gòu)線性表中的數(shù)據(jù)元素之間存在一對一的關(guān)系。線性表棧的定義棧是一種特殊的線性表,其插入和刪除操作限定在表的一端進行,該端稱為棧頂,另一端稱為棧底。包括入棧、出棧、取棧頂元素等。隊列是一種特殊的線性表,其插入操作在表的一端進行,而刪除操作在表的另一端進行,插入元素的一端稱為隊尾,刪除元素的一端稱為隊頭。包括入隊、出隊、判斷隊列是否為空等。棧的基本操作隊列的定義隊列的基本操作棧與隊列串的定義串的基本操作數(shù)組的定義數(shù)組的基本操作串與數(shù)組01020304串是由零個或多個字符組成的有限序列。包括串的賦值、串的比較、串的連接、串的求長、子串的查找等。數(shù)組是一種線性表數(shù)據(jù)結(jié)構(gòu),它用一組連續(xù)的內(nèi)存空間來存儲具有相同類型的數(shù)據(jù)元素。包括數(shù)組的創(chuàng)建、數(shù)組的訪問、數(shù)組的遍歷、數(shù)組的排序等。樹的基本術(shù)語包括根節(jié)點、子節(jié)點、父節(jié)點、兄弟節(jié)點、葉子節(jié)點等。樹的定義樹是一種非線性數(shù)據(jù)結(jié)構(gòu),由n個節(jié)點組成的有限集合。二叉樹的定義二叉樹是一種特殊的樹形結(jié)構(gòu),每個節(jié)點最多只有兩個子節(jié)點,通常子節(jié)點被稱作“左子節(jié)點”和“右子節(jié)點”。二叉樹的遍歷包括前序遍歷、中序遍歷和后序遍歷三種方式。二叉樹的性質(zhì)包括二叉樹的形態(tài)、二叉樹的深度、二叉樹的葉子節(jié)點數(shù)等。樹與二叉樹排序算法03將未排序的元素插入到已排序的序列中,從而得到一個新的、更長的已排序序列。從第一個元素開始,認(rèn)為該元素已經(jīng)被排序;取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描;如果該元素(已排序)大于新元素,將該元素移到下一位置;重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置;將新元素插入到該位置后;重復(fù)步驟2~5。穩(wěn)定排序,適用于少量數(shù)據(jù)的排序。原理實現(xiàn)特性插入排序原理在未排序序列中找到最?。ɑ蜃畲螅┰兀娣诺脚判蛐蛄械钠鹗嘉恢?,然后,再從剩余未排序元素中繼續(xù)尋找最?。ɑ蜃畲螅┰?,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。實現(xiàn)在未排序序列中找到最小元素,存放到排序序列的起始位置;從剩余未排序元素中繼續(xù)尋找最小元素,然后放到已排序序列的末尾;重復(fù)步驟2,直到所有元素均排序完畢。特性不穩(wěn)定排序,適用于少量數(shù)據(jù)的排序。選擇排序原理:通過不斷地交換兩個相鄰的不等元素的位置,使得整個序列變得有序。實現(xiàn):從第一個元素開始,比較相鄰的兩個元素,如果前一個比后一個大,則交換它們的位置;對每一對相鄰元素做同樣的工作,從開始第一對到結(jié)尾的最后一對;這步做完后,最后的元素會是最大的數(shù);針對所有的元素重復(fù)以上的步驟,除了最后一個;持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。特性:不穩(wěn)定排序,適用于少量數(shù)據(jù)的排序。交換排序采用分治法,將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。原理把長度為n的輸入序列分成兩個長度為n/2的子序列;對這兩個子序列分別采用歸并排序;將兩個排序好的子序列合并成一個最終的排序序列。實現(xiàn)穩(wěn)定排序,適用于大量數(shù)據(jù)的排序。特性歸并排序查找算法04原理從數(shù)據(jù)結(jié)構(gòu)的一端開始,順序掃描,直到找到所查元素為止。時間復(fù)雜度平均時間復(fù)雜度和最壞時間復(fù)雜度都是O(n),其中n是數(shù)據(jù)結(jié)構(gòu)中元素的個數(shù)。適用場景適用于數(shù)據(jù)量較小或數(shù)據(jù)無序的情況。順序查找原理在有序數(shù)組中,取中間元素與目標(biāo)元素比較,若相等則查找成功;若目標(biāo)元素小于中間元素,則在左半部分繼續(xù)查找;若目標(biāo)元素大于中間元素,則在右半部分繼續(xù)查找。時間復(fù)雜度平均時間復(fù)雜度和最壞時間復(fù)雜度都是O(logn),其中n是數(shù)據(jù)結(jié)構(gòu)中元素的個數(shù)。適用場景適用于數(shù)據(jù)量較大且數(shù)據(jù)有序的情況。二分查找通過哈希函數(shù)將元素的關(guān)鍵字轉(zhuǎn)化為數(shù)組的索引,然后在對應(yīng)的數(shù)組位置上進行查找。原理平均時間復(fù)雜度可以達到O(1),最壞時間復(fù)雜度取決于哈希函數(shù)的設(shè)計和沖突處理方法。時間復(fù)雜度適用于需要快速查找且元素關(guān)鍵字與數(shù)組索引存在映射關(guān)系的情況。適用場景哈希表查找樹形查找在樹形數(shù)據(jù)結(jié)構(gòu)中,從根節(jié)點開始,根據(jù)目標(biāo)元素與節(jié)點值的比較結(jié)果,沿著相應(yīng)的分支繼續(xù)查找,直到找到目標(biāo)元素或查找失敗。時間復(fù)雜度平均時間復(fù)雜度和最壞時間復(fù)雜度取決于樹的高度和平衡性,對于平衡樹如AVL樹和紅黑樹,平均時間復(fù)雜度可以達到O(logn),其中n是樹中節(jié)點的個數(shù)。適用場景適用于數(shù)據(jù)量較大且需要保持?jǐn)?shù)據(jù)有序的情況,如數(shù)據(jù)庫索引、文件系統(tǒng)等。原理圖論算法05鄰接表使用鏈表或數(shù)組來表示圖,每個頂點對應(yīng)一個鏈表或數(shù)組,存儲與該頂點相鄰的頂點信息。邊的集合使用一組邊來表示圖,每條邊包含起點、終點和權(quán)重等信息。鄰接矩陣使用一個二維數(shù)組來表示圖,數(shù)組中的每個元素表示對應(yīng)兩個頂點之間是否存在邊以及邊的權(quán)重。圖的表示與存儲最短路徑算法適用于所有類型的圖,通過動態(tài)規(guī)劃的思想,不斷更新任意兩點之間的最短路徑估計值,最終得到所有頂點之間的最短路徑。Floyd算法適用于沒有負權(quán)重的有向圖,通過不斷選擇當(dāng)前距離起點最短的頂點,并更新其相鄰頂點的距離,最終得到起點到所有其他頂點的最短路徑。Dijkstra算法適用于有負權(quán)重的有向圖,通過對所有邊進行松弛操作,不斷更新頂點的最短路徑估計值,最終得到起點到所有其他頂點的最短路徑。Bellman-Ford算法從任意一個頂點開始,每次選擇連接已選頂點和未選頂點中權(quán)重最小的邊,將對應(yīng)的頂點加入已選集合,直到所有頂點都被選中。將所有邊按照權(quán)重從小到大排序,從輕到重依次選擇邊,每次選擇一條連接兩個未連通集合的邊,直到所有頂點都在同一個連通集合中。最小生成樹算法Kruskal算法Prim算法對于有向無環(huán)圖(DAG),通過不斷刪除入度為0的頂點并更新相關(guān)頂點的入度,最終得到一個線性序列,使得對于任意一條有向邊(u,v),u在序列中都出現(xiàn)在v之前。拓撲排序在帶權(quán)有向無環(huán)圖中,從源點到匯點的最長路徑稱為關(guān)鍵路徑。通過計算每個頂點的最早開始時間和最晚開始時間,可以確定關(guān)鍵路徑以及關(guān)鍵活動(即位于關(guān)鍵路徑上的活動)。關(guān)鍵路徑拓撲排序與關(guān)鍵路徑動態(tài)規(guī)劃算法06大問題的最優(yōu)解可以由小問題的最優(yōu)解推出。最優(yōu)子結(jié)構(gòu)遞歸的終止條件。邊界描述子問題之間是如何轉(zhuǎn)化的,即如何由小問題的最優(yōu)解推出大問題的最優(yōu)解。狀態(tài)轉(zhuǎn)移方程動態(tài)規(guī)劃原理01背包每個物品只有一件,可以選擇放或不放。完全背包每個物品有無限件,可以選擇放多件。多重背包每個物品有多件,可以選擇放多件但不超過數(shù)量限制。背包問題030201問題描述給定兩個序列,求出它們的最長公共子序列的長度。解決方案使用動態(tài)規(guī)劃,定義一個二維數(shù)組dp,其中dp[i][j]表示第一個序列的前i個字符與第二個序列的前j個字符的最長公共子序列的長度。狀態(tài)轉(zhuǎn)移方程為dp[i][j]=dp[i-1][j-1]+1(ifs1[i]==s2[j]),dp[i][j]=max(dp[i-1][j],dp[i][j-1])(ifs1[i]!=s2[j])。最長公共子序列問題給定兩個字符串,求將一個字符串轉(zhuǎn)換成另一個字符串所需的最少編輯操作次數(shù)(插入、刪除或替換一個字符)。最短編輯距離給定一個矩陣鏈,求出最優(yōu)的乘法順序使得乘法運算次數(shù)最少。矩陣鏈乘法其他典型問題及應(yīng)用場景算法優(yōu)化與復(fù)雜度分析07時間復(fù)雜度概念衡量算法執(zhí)行時間隨問題規(guī)模增長的速度,常用大O表示法。常見時間復(fù)雜度類型常數(shù)時間復(fù)雜度O(1)、線性時間復(fù)雜度O(n)、對數(shù)時間復(fù)雜度O(logn)、線性對數(shù)時間復(fù)雜度O(nlogn)、平方時間復(fù)雜度O(n^2)、立方時間復(fù)雜度O(n^3)等。時間復(fù)雜度分析方法通過計算算法中基本操作執(zhí)行次數(shù)與問題規(guī)模的關(guān)系,確定算法的時間復(fù)雜度。時間復(fù)雜度分析常見空間復(fù)雜度類型常數(shù)空間復(fù)雜度O(1)、線性空間復(fù)雜度O(n)等??臻g復(fù)雜度分析方法通過分析算法中所需存儲空間的數(shù)量級與問題規(guī)模的關(guān)系,確定算法的空間復(fù)雜度??臻g復(fù)雜度概念衡量算法所需存儲空間隨問

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論