資料結構 什麼是演算法?

2021-07-04 18:47:21 字數 2260 閱讀 5978

演算法(algorithm)

5大特徵:

例1:選擇排序演算法的偽碼描述

list到底是陣列還是鍊錶(雖然看上去像是陣列)

swap用函式還是用巨集去實現?

空間複雜度s(n):space 執行時占用儲存單元的長度。這個長度往往與輸入的資料的規模有關,過高可能導致記憶體超限,造成程式中斷。

時間複雜度t(n):time 執行時消費時間的長度,這個長度往往也與輸入的資料的規模有關。時間過長,不好。

上一講中遞迴函式的空間佔用率s(n)= c *n 會隨著n的增長而增長,但是for迴圈直接輸出,占用的空間是一定的,不會隨n的增長變化,所以,遞迴就爆掉了。

上一講中,求多項式的和,原因是機器執行加減法的速度比乘除法快很多,第乙個我們進行了(n2+n)/2次乘法,t(n)=cn2+cn,第二個程式進行了n次乘法,t(n)=cn。當很大n2

一、大o記號

存在兩個正整數c和n0,使得n>n0的時候,t(n) < c * f(n),則t(n)=o(f(n)),可見o(f(n))可以表示演算法執行時間的上界。o(f(n))表示的函式集合的函式是階數不超過f(n)的函式。

二、ω記號 讀作大 o mi ga

ω記號與大o記號相反,他可以表示演算法執行時間的下界。ω(g(n))表示的函式集合的函式是所有階數超過g(n)的函式。

三、θ記號 讀作大si a ta

θ記號介於大o記號和ω記號之間。t(n)=θ(h(n))。表示t(n)=o(h(n))且t(n)=ω(h(n)),他表示所有階數與h(n)相同的函式集合。

四、小o記號

f(n)=o(g(n))當且僅當f(n)=o(g(n))且f(n)≠ω(g(n))。也就是說小o記號可以表示時間複雜度的上界,但是一定不等於下界。

上界和下界不是唯一的。但是太大的上界和太小的下界意義不大,所以盡可能逼近。下面展示:

log n 已經不需要注意以什麼為底了。

n2的一般都要降到n log n,作為乙個專業的程式設計師。

演算法複雜度分析的技巧

例:給定n個整數的序列{a1,a2 an},求函式

演算法1:最直接最暴力的,全算一遍

int maxsubseqsum1(int a ,int n )

}return maxsum;

}

這個演算法的t(n) = o(n3) , 如果三層迴圈都是0到n的,那麼三個相乘,就是n3

優化1、這個演算法表示 j 加 1 時,從 i 加到 j, j 再加 1 時,再從 i 加到 j,其實沒必要重複計算了,應該在第一次的從 i 加到 j 的前提下,在加乙個 j 就好了。所以k迴圈根本是沒必要的。so…..

int maxsubseqsum2(int a ,int n )

return maxsum;

}

因為有兩層迴圈的巢狀 , 所以t(n) = o( n2 )

優化2:乙個專業的程式設計師發現乙個演算法是n2的時候,下意識的本能的想到能不能變成 nlog n的形式 。so…

這個演算法有很大的乙個思想:分而治之,把乙個大的問題,切分成小塊,分頭處理它們,最後再把結果合起來就行了。

第一步:分,乙份為兒。遞迴的解決左右的問題,得到左右兩邊最大的子列和,還有一種跨越邊界的最大子列和,我們就可以說最大的數就是其中的乙個。

遞迴的演算法。時間複雜度分析有一些難度。

但這仍然不是最快的演算法~~~~so….

int maxsubseqsum4(int a, int n)

return maxsum;

}

什麼是資料結構 演算法

一 什麼是資料結構 資料結構 是指相互之間存在著一種或多種特定關係的資料元素的集合。程式 資料結構 演算法 資料的邏輯結構 指反映資料 元素之間的邏輯關係的 資料結構 其中的邏輯關係是指資料元素之間的前後件關係,而與他們在計算機中的儲存位置無關。資料的物理結構 指資料的 邏輯結構 在計算機儲存空間的...

什麼是資料結構和演算法

資料結構定義 我們把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢某個元素,刪除某個元素,對所有元素進行排序 而 執行的相應操作,這個相應的操作也叫演算法。資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算法 解題的方...

什麼是資料結構和演算法

程式 資料結構 演算法 資料結構是相互之間存在的一種或多種特定關係的資料元素的集合。包括4類基本的結構 集合 線形結構 樹形結構 圖狀或網狀結構。通俗點就是資料的邏輯結構,比方說這些資料在記憶體中以什麼樣的結構存放。演算法實際是程式設計過程中完成一件事採用的方法,比方說現實生活中做數學題時兩個人都將...