a*算法的时间复杂度_数据结构(1)——算法和时间复杂度
Data Structure
1
算法和時間復雜度
01.什么是數據結構?
程序設計 = 數據結構 + 算法
數據結構是關系,是數據元素相互之間存在的一種或多種特定關系的集合。
數據結構和算法凌駕于任何一種編程語言之上。
02.邏輯結構和物理結構
數據結構分為邏輯結構和物理結構。
邏輯結構是指數據對象中數據元素之間的邏輯關系,也是今后需要關注和討論的問題。
四大邏輯結構:
集合——數據元素除了同屬于一個集合之外,沒有其他關系。
線性——數據元素具有一對一的關系。
樹形——數據元素之間存在一對多的層次關系。
圖形——數據元素之間存在多對多的關系。
物理結構一般指數據元素在計算機中的存儲方法。
數據元素的存儲結構形式有兩種:順序存儲和鏈式存儲。
順序存儲:把數據元素放在地址連續的存儲單元中,其數據間的邏輯關系和物理關系是一致的,例如數組結構。
鏈式結構:把數據元素放在任意的存儲單元里,這組存儲單元可以是連續的,也可以是不連續的。此時存儲關系不能反映邏輯關系,因此需要用指針存放數據元素的地址。
03.算法
算法:解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或者多個操作。
算法的五個基本特征:輸入、輸出、有窮性、確定性、可行性
算法效率的度量方法:
算法采用的策略、方案
編譯產生的代碼質量
問題的輸入規模
機器執行指令的速度
04.算法的時間復雜度
定義:在進行算法分析的時候,語句總的執行次數T(n)是關于問題規模 n 的函數,進而分析T(n)隨 n 的變化情況并確定T(n)的數量級。
算法的時間復雜度,也就是算法的時間度量,記作:
T(n)=? O(f(n))。
它表示隨問題規模n的增長,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間復雜度,簡稱為時間復雜度。其中f(n)表示問題規模 n 的某個函數。
一般情況下,隨著輸入規模 n 的增大,T(n)增長最慢的是最優算法。
大O記法:用O( )來體現算法時間復雜度的記法。
推導大O階的算法:
用常數1取代運行時間中的所有加法常數。
在修改后的運行次數函數中,只保留最高階項。
如果最高階項存在且不為1,則去除這個項的系數。
線性階——一般含有非嵌套循環。線性階就是隨著問題規模 n 的擴大,對應計算次數呈直線增長。
平方階——嵌套循環,包括不嚴格的嵌套循環。循環的時間復雜度等于循環體的復雜度乘以該循環運行的次數。
對數階——需要應用數列知識。
常用的時間復雜度所耗的時間從小到大依次是:
O(1)< O(logn)< O(n)< O(nlogn)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)
最壞情況:查找一個有n個隨機數字數組中的某個數字,最好的情況是第一個數字就是,那么算法的時間復雜度是O(1);但也有可能這個數字在最后位置,此時的時間復雜度是O(n)。
平均運行時間——期望運行的時間。
05.算法的空間復雜度
算法的空間復雜度通過計算算法所需的存儲空間實現。
算法空間復雜度的計算公式記作:
S(n)= O(f(n))
其中,n為問題規模,f(n)為語句關于n所占存儲空間的函數。
通常,我們都是用 “ 時間復雜度 ” 來指運行的時間需求,用 “ 空間復雜度 ” 指空間需求。
關于上面的總結,如果有錯誤之處,或者疑問,歡迎點擊下面【寫留言】進行討論。
【寫留言】
---掃碼點關注哦---
總結
以上是生活随笔為你收集整理的a*算法的时间复杂度_数据结构(1)——算法和时间复杂度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keras 自定义层input_从4个方
- 下一篇: python循环语句嵌套_Python