資料結構,是相互之間存在一種或多種特定關係的資料元素的集合,資料結構可以分為邏輯結構和物理結構
邏輯結構:是指資料物件中資料元素之間的相互關係
1.集合結構
集合結構中的資料元素除了屬於同乙個集合外,沒有任何關係
2.線性結構
線性結構中的資料元素是一對一的結構關係
3.樹形結構
樹形結構的資料元素是一對多的結構關係
4.圖形結構
圖形結構的資料元素是多對多的結構關係
物理結構:是指資料的邏輯結構在計算機中的儲存方式
1.順序儲存
把資料元素存放在位址連續的儲存單元中,資料間的邏輯關係和物理關係相同
2.鏈式儲存結構
把資料元素存放在任意的儲存單元,可以是連續或不連續的,用乙個指標存放資料元素的位址
演算法,是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作
演算法具有五個特性,輸入、輸出、有窮性、確定性和可行性
1.輸入輸出
演算法必須要有0個或者多個輸入,演算法需要有0個或多個引數
演算法必須要有1個或多個輸出,演算法必須要有結果輸出
2.有窮性
演算法在執行有限的步驟後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成
3.確定性
演算法的每一步都具有確定的意義,不會出現二義性
在一定的條件下,相同的輸入只能有唯一的結果
4.可行性
演算法的每一步必須是可以執行的,可以通過執行有限的次數完成
演算法的設計要求
1.正確性
首先你的演算法必須正確,具有輸入、輸出,能正確處理需求,並得出正確的答案
2.可讀性
演算法必須要便於閱讀、理解和交流
3.健壯性
輸入資料不合法時,依然可以正常執行,而不是產生未知的結果
4.時間效率高和儲存量低
花最少的儲存,用最短的時間,幹同樣的事兒
這就是演算法的思想所在
關於演算法效率
演算法效率統計分為事後統計和事前分析估算
1.事後統計
通過設計好的程式和資料,觀察執行時間,進行比較,有多種缺陷,不予採納
2.事前分析估算
乙個程式的執行時間,依賴於演算法的好壞和問題的輸入規模
在這裡引入演算法時間複雜度定義
在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。
演算法的時間複雜度,也就是演算法的時間量度,記做:t(n)= o(f(n))
它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度
f(n)是問題規模n的某個函式
隨著n的增大 t(n)增長最慢的演算法稱為最優演算法
大寫o內表示的是演算法的執行次數
關於推導方法
1.用常數1取代執行時間中所有的加法常數
2.在修改後的執行次數函式中,只保留最高端項
3.如果最高端項存在且不是1,則去除與這個項相乘的常數
這樣得到的結果就是大o階
$sum = 0; //執行一次
$n = 100; //執行一次
$sum = (1+n)*n/2; //執行一次
echo
$sum; //執行一次
這個演算法的執行次數是 f(n) = 4 根據推導方法,先把4換成1
然後尋找最高端項,這個演算法沒有最高端項,所以這個演算法的複雜度是
o(1),也被稱為常數階
for ($x=0; $x
<=n; $x++)
這個演算法的執行次數是f(n)= n 根據推導方法,沒有常數,所以這個演算法的複雜度是o(n),也被稱為線性階
$count = 1;
while($count
//執行log2n次
$count = $count * 2;
}
當多少個2相乘大於等於n時 這個演算法結束,所以這個演算法的複雜度為o(log2n),也被稱為對數階
for ($x=0; $x
<=n; $x++)
}
根據推導方法,沒有加法常數不予考慮第一條,只保留最高端項n*n 也就是n的二次方,那麼這個演算法的複雜度就是o(n * n)
一般在沒有特殊說明的情況下,演算法的時間複雜度,說的都是最壞時間複雜度,也就是消耗時間最多的情況
比如從n個數里找1 個數,有可能第乙個就找到了,也有可能第n個才找到
預設以第n個找到的時間複雜度為準
資料結構學習 一
資料機構在大學也斷斷續續學過一些,不過到工作時候已經忘了很多,現在想著再重頭學一遍,應該也是為時不晚。資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作相關的學科。用自己的理解的話來說就是演算法的模型。程式 資料結構 演算法 邏輯結構 資料物件中資料元素之間的相互關係。...
資料結構學習 一
學習的四大步驟 wwwa 1.什麼是a what 2.為什麼需要a why 3.怎麼用a how 4.需要注意的問題 attention 我們知道程式 資料結構 演算法,可見資料結構的重要性。在平時我們建立的乙個陣列以及對陣列的新增刪除操作都屬於資料結構的範疇。那麼,什麼是資料結構呢?定義 我們如何...
資料結構學習(一)
在生活中很多問題不再是數值計算的數學方程,而是諸如表 樹和圖之類的資料結構。資料結構是數學 演算法和硬體的交集,是一門重要的學科。資料 所有能輸入到計算機中且能被處理的符號總稱,例如影象 聲音等。資料元素 是資料的基本單元,例如整型數 字串等 資料項是資料的最小單位。資料物件 性質相同的資料元素的集...