什麼是資料結構(data structure):
中文維基百科【維基百科中文版**】
在電腦科學中: 是計算機中儲存、組織資料的方式。
資料結構意味著介面或封裝:乙個資料結構可被視為兩個函式之間的介面,或者是由資料型別聯合組成的儲存內容的訪問方法封裝。
不同種類的資料結構適合不同種類的應用,部分資料結構甚至是為了解決特定問題而設計出來的。
正確的資料結構選擇可以提高演算法的效率(請參考演算法效率)。在計算機程式設計的過程中,選擇適當的資料結構是一項重要工作。許多大型系統的編寫經驗顯示,程式設計的困難程度與最終成果的質量與表現,取決於是否選擇了最適合的資料結構。
因為資料結構概念的普及,現代程式語言及其api中都包含了多種預設的資料結構,例如常見的資料結構
資料元素:是資料的基本單元,由若干個資料項(組合項)組成資料結構的三要素:資料結構:相互之間存在一種或者多種特定的關係的資料元素的集合(關係)
資料物件:具有相同都是資料元素的集合,是乙個資料的乙個子集(ab門店店沒有關係關係)
邏輯結構
圖結構,集合,線性結構,樹型
物理結構(儲存)
順序,鏈式,索引,雜湊(hash)
資料結構的運算
運算的實現是針對儲存結構,運算的定義是針對邏輯結構
資料型別:乙個值的集合和定義是在此集合上的一組操作的總稱
型別bool
值的範圍
true fales
可進行的操作
與,或,非
抽象資料結構(adt):
抽象資料組織及與之相關的操作。
是一些操作的集合。抽象資料型別是數學的抽象;
在adt的定義中根本沒有涉及如何實現操作的集合。
程式=資料結構+演算法
演算法的特性
好演算法的特徵
時間複雜度
事前預估演算法時間t(n)與問題規模n之間的關係
limn參考部落格:演算法—時間複雜度→+∞t
(n)\lim\limits_ t(n)
n→+∞
limt(
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(n2n^2n2)
<o(n3n^3n3)
<o(2n2^n2n)
<o(n!)<o(nnn^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.健壯性...