資料結構,演算法,時間複雜度

2021-10-19 07:47:49 字數 2531 閱讀 1816

什麼是資料結構(data structure):

中文維基百科【維基百科中文版**】

在電腦科學中: 是計算機中儲存組織資料的方式。

資料結構意味著介面或封裝:乙個資料結構可被視為兩個函式之間的介面,或者是由資料型別聯合組成的儲存內容的訪問方法封裝

不同種類的資料結構適合不同種類的應用,部分資料結構甚至是為了解決特定問題而設計出來的。

正確的資料結構選擇可以提高演算法的效率(請參考演算法效率)。在計算機程式設計的過程中,選擇適當的資料結構是一項重要工作。許多大型系統的編寫經驗顯示,程式設計的困難程度與最終成果的質量與表現,取決於是否選擇了最適合的資料結構。

因為資料結構概念的普及,現代程式語言及其api中都包含了多種預設的資料結構,例如

常見的資料結構
資料元素:是資料的基本單元,由若干個資料項(組合項)組成

資料結構:相互之間存在一種或者多種特定的關係的資料元素的集合(關係)

資料物件:具有相同都是資料元素的集合,是乙個資料的乙個子集(ab門店店沒有關係關係)

資料結構的三要素:

邏輯結構

圖結構,集合,線性結構,樹型

物理結構(儲存)

順序,鏈式,索引,雜湊(hash)

資料結構的運算

運算的實現是針對儲存結構,運算的定義是針對邏輯結構

資料型別:乙個值的集合和定義是在此集合上的一組操作的總稱

型別bool

值的範圍

true fales

可進行的操作

與,或,非

抽象資料結構(adt):

抽象資料組織及與之相關的操作。

是一些操作的集合。抽象資料型別是數學的抽象;

在adt的定義中根本沒有涉及如何實現操作的集合。

程式=資料結構+演算法

演算法的特性

好演算法的特徵

時間複雜度

事前預估演算法時間t(n)與問題規模n之間的關係

lim⁡n

→+∞t

(n)\lim\limits_ t(n)

n→+∞

lim​t(

n)

參考部落格:演算法—時間複雜度

計算時間複雜度實際上只需要遵循如下守則:

用常數1來取代執行時間中所有加法常數;

只要高階項,不要低階項,只考慮階數高的部分;

不要高階項係數

t

1t_1

t1​(n)= 3n≈3n

t

2t_2

t2​(n)= n

2n^2

n2+3n≈n

2n^2

n2t

3t_3

t3​(n)= n

3n^3

n3+ n

2n^2

n2+3n≈n

3n^3

n3

簡化:

t

1t_1

t1​(n)= o(n)

t

2t_2

t2​(n)= o(n

2n^2

n2)t

3t_3

t3​(n)= o(n

3n^3

n3)時間複雜度的優劣對比

常見的數量級大小:越小表示演算法的執行時間頻度越短,則越優;

常對冪指階

o(nlogn)在n

2n^2

n2和n之間

o(1)<o(log

2log_2

log2

​n)<o(n)<o(nlogn)<o(n

2n^2n2)

<o(n

3n^3n3)

<o(2

n2^n2n)

<o(n!)<o(n

nn^nnn)

運算規則和圖

順序執行的**會影響常數項,可以忽略

只需要挑選迴圈中乙個基本操作分析他的執行次數與n的關係即可

巢狀多層迴圈:t(n)= o(n) + o(n

2n^2

n2)≈n

2n^2

n2,多層迴圈只需要考慮最內層的

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

資料結構時間複雜度

如何衡量乙個演算法的複雜度?演算法的時間複雜度和空間複雜度統稱為演算法的複雜度 void test int n for int k 0 k 2 n k icount intcount 10 while count icount 這個函式執行次數為f n n n 2 n 10 時間複雜度實際就是乙個函...

資料結構 時間複雜度

一 演算法 是解決特定問題求解不走的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。1.正確性 演算法的正確性是指演算法至少應該具有輸入 輸出和加工處理無歧義性 能正確反映問題的需求 能夠得島問題的正確答案。2.可讀性 演算法設計的另一目的是為了方便閱讀 理解和交流。3.健壯性...