資料結構學習(二)

2021-09-29 18:49:04 字數 1481 閱讀 1357

什麼是演算法?

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

演算法具有五個基本特性:輸入、輸出、有窮性、確定性和可行性

演算法設計的要求:正確性、可讀性、健壯性、時間效率高和儲存量低

演算法時間複雜度的定義

在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級,演算法的時間複雜度也就是演算法的時間量度,記作:t(n)=o(f(n))。表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱為演算法的漸近複雜度,簡稱為時間複雜度。

這樣用於大寫o()來體現演算法時間複雜度的記法,稱之為大o記法。

一般情況,隨著n的增大,t(n)增長最慢的演算法為最優演算法。

推導大o階:

1.用常數1取代執行時間中的所有加法常數。

2.在修改後的執行次數函式中,只保留最高端項。

3.如果最高端項存在且不是1,則去除與這個項相乘的常數。得到的結果就是大o階。

常數階

int sum = 0,n = 100;

sum = (1 + n) * n/2;

cout《演算法的執行次數函式為f(n)=3,運用大o階方法,將常數項3改為1,在保留最高項時沒有最高端,所以時間複雜度為o(1).

線性階

要分析演算法的複雜度,關鍵就是要分析迴圈結構的運**況。下列**的時間複雜度為o(n)

int i;

for( i = 0;i < n;i++)

對數階

下面的這段**,時間複雜度為o(log n)。

int count = 1;

while(count < n)

平方階

下面的例子是乙個迴圈巢狀,時間複雜度為o(n^2)

int i,j;

for(i = 0;i < n;i++)

{ for(j = 0;j常用的時間複雜度所耗費的時間從小到大是

o(1)最壞情況與平均情況

最壞情況是執行時間的一種保證,執行時間不會再壞了。一般來說,我們提到的都是最壞執行時間。

平均時間是最有意義的,它是期望的執行時間。

演算法的空間複雜度

演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n)=o(f(n)),n為問題的規模,f(n)

為語句關於n所佔儲存空間的函式。

資料結構學習(二)

寬度優先遍歷 寬度優先遍歷和廣度優先遍歷是兩種不同的搜尋的方法,不同之處主要在於廣度優先搜尋需要使用到佇列,鑑於上一節已經介紹過深度優先遍歷,這裡直接舉個例子,貼上 吧,哈哈,偷個小懶 對於圖中的節點,要進行廣度優先搜尋,過程如下 假設先從a開始搜尋,將a加入佇列中 直接從佇列中彈出a,搜尋a鄰接的...

資料結構學習(二)

資料結構學習 二 目錄 程式設計專練 1 判斷二維陣列中乙個數存在 2 求乙個數的次方 3 求逆序對總數 4 判斷棧彈出順序是否正確 5 順時針列印矩陣中的資料 1 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個...

資料結構學習二 棧

棧 限制插入和刪除操作只能在乙個位置上進行的表。對棧的基本操作有push 進棧 和pop 出棧 前者相當於插入,後者則是刪除。棧也叫作先進後出表。本文使用鍊錶實現棧。pragma once 鍊錶型別宣告 struct node pragma once include node.h 棧定義 m hea...