數據結構介紹、時間複雜度
起源:
計算機從解決數值計算問題到解決生活中的問題
現實生活中的問題涉及不同個體間的複雜聯繫
需要在計算機程序中描述生活中個體間的聯繫
數據結構主要研究非數值計算程序問題中的操作對象以及它們之間的關係
數據結構的基本概念
數據 : 程序的操作對象,用於描述客觀事物
數據的特點:
1、可以輸入到計算機
2、可以被計算機程序處理
數據元素:組成數據的基本單位
數據項:一個數據元素由若干數據項組成
數據對象 – 性質相同的數據元素的集合
數據結構的邏輯結構:
邏輯結構表示數據元素之間的邏輯關係,它與數據的存儲無關,是獨立於計算機的
在數據結構中,有四種基本的數據結構
數據的物理結構
物理結構稱爲存儲結構,是數據的邏輯結構在計算機存儲器中的映像,在計算機組成原理中,該映像是計算機系統的硬件和操作系統自動完成的,對程序員是透明的
順序存儲結構:是通過元素在存儲器中的相對位置來表示數據元素間的邏輯關係
鏈式存儲結構:是通過元素存儲地址的指針來表示數據元素的關係
數據的運算
概念:在數據的邏輯結構上定義的操作,是在存儲結構中實現的
最常用的數據運算有:插入、刪除、修改、查找、排序
算法
算法是特定問題求解步驟的描述,算法是獨立存在的一種解決問題的方法和思想。高效的程序需要在數據結構的基礎上設計和選擇算法。
程序=數據結構+算法
數據結構和算法的對比
1、數據結構只是靜態的描述了數據元素之間的關係
2、算法是爲了解決實際問題而設計的
3、數據結構是算法需要處理的問題載體
4、數據結構與算法相輔相成
特性
輸入
算法具有0個或多個輸入
輸出
算法至少有1個或多個輸出
有窮性
算法在有限的步驟之後會自動結束而不會無限循環
確定性
算法中的每一步都有確定的含義,不會出現二義性
可行性
算法的每一步都是可行的
空間複雜度
執行一段程序所佔用的最大內存空間
時間複雜度
執行一段程序所佔用的時間
誤區:
切勿使用絕對時間來衡量算法的效率
大O表示法
算法效率嚴重依賴於操作(Operation)數量,在判斷時首先關注操作數量的最高次項,操作數量的估算可以作爲時間複雜度的估算。包括了時間複雜度和空間複雜度
時間複雜度
常見的時間複雜度:
空間複雜度
算法的空間複雜度通過計算算法的存儲空間實現
S(n) = O(f(n))
其中,n爲問題規模,f(n))爲在問題規模爲n,n時所佔用存儲空間的函數
大O表示法同樣適用於算法的空間複雜度,當算法執行時所需要的空間是常數時,空間複雜度爲O(1)
關於時間複雜度和空間複雜度
1、多數情況下,算法執行時所用的時間更令人關注
2、如果有必要,會通過增加空間複雜度換取時間複雜度,當然也可以通過時間複雜度降低空間複雜度
關於複雜度的練習(用最小的時間複雜度實現,)
1、實現二分查找算法
2、最大子序列的問題
給定K個整數組成的序列{ N1, N2, ..., NK },“連續子列”被定義爲{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”則被定義爲所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有最大的和20。現要求你編寫程序,計算給定整數序列的最大子列和。
```c
3、Given a sequence of K integers { N1, N2, ..., NK }.
A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements.
For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.
Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.
下期會有算法的實現源碼以及鏈表的相關知識