作為一名it技術人員,需要不斷的完善自己的知識體系來提公升自己,類似資料結構、網路等。在工作中大部分時間我們都是做應用層面的開發,有時候對資料結構、演算法這些基本功要求不是很高,但是一些基本得知識點我們還是需要掌握。
是不是經常聽別人說資料結構、演算法、程式 = 資料結構 + 演算法等,那麼到底什麼是資料結構?
資料結構本身是乙個抽象的概念,沒有具體的標準,比如我們用的電腦,我可以說電腦這種結構由cpu、主機板、顯示卡、記憶體、硬碟、電源、音效卡、網絡卡等組成。如 vue-cli 初始化的專案由 main.js、src等組成。所以不需要去糾結到底什麼是資料結構,資料結構本身只是一層抽象的概念,從字眼上可以理解為資料與資料之間存在一種或多種關係的資料元素集合。
從不同的角度,資料結構可以理解為邏輯結構、物理結構。可以理解為邏輯結構是在計算機中的儲存形式,物理結構是計算機怎麼儲存資料;
邏輯結構:資料元素之間的相互關係
物理結構:資料的邏輯結構在計算機中的儲存形式
解決問題的步驟我們叫方法,在計算機中稱演算法,在計算機中表現為指令的有限序列;通常乙個問題有很多種方法,有些方法很巧妙,有些看起來比較繞,這些方法是有差異的,我們通常在計算機中通過時間複雜度、空間複雜度來衡量乙個演算法的好壞。
時間複雜度並不是說**執行的具體的時間,而是表示**執行時間隨問題規模或者資料規模增長的變化趨勢,也叫漸進時間複雜度,簡稱為時間複雜度。我們都知道乙個演算法花費的時間與演算法中語句的執行次數肯定成正比例,哪乙個演算法中語句執行次數多,它花費時間就多。
1function
get (n) 5//
總共就是2次
如上所示,總共執行了2次,但是通常我們處理的事情這個n 可能不是乙個固定值,所以我們把乙個演算法中的語句執行次數記為函式t(n),n為問題規模,隨著問題規模n的變化,演算法執行的時間也會變化,為了更好的分析這個時間的變化比,用o()來表示時間複雜度的記法,我們稱為大o記法。語句執行總的次數t(n)跟o() 有如下公式
t(n) = o(f(n)),它表示隨著問題規模n 的增大,演算法執行時間的增長率和f(n)的增長率相同,其中f(n)是問題規模n的某個函式
我們一般通過以下方法來分析乙個演算法的時間複雜度
常數階:o(1)
如果演算法執行所需要的臨時空間不隨著某個變數n的大小而變化,即此演算法空間複雜度為乙個常量,可表示為o(1)
1function
run ()
線性階:o(n)
1function
run (n) 5}
6//共執行n次,根據大o推導法,只取最高端,所以是 o(n)
平方階__o( n^2 )
functionrun (n)
}}
/*外層i的迴圈執行一次,內層j的迴圈就要執行n次
因為外層執行n次,那麼總的就需要執行n*n次,
也就是需要執行n^2次,根據大o推導法:o(n^2)
*/
執行次數
複雜度非正式術語
12o(1)
常數階2n+3
o(n)
線性階4n2+zn+2
o(n2)
平方階4log2n+21
o(logn)
對數階3n+2log3n+15
o(nlogn)
nlogn階
4n3+3n2+22n+11
o(n3)
立方階2n
o(2n)
指數階時間複雜度耗費時間從小到大依次排列
o(1) < o(logn) < o(n) < o(nlogn) < o(n
2) < o(n
3) < o(2
n) < o(n!) < o(nn)
1function
run(n) ,hello word`)5}
6}7}
8 run(10)
當 i = 0 時,內迴圈執行 n 次運算,當 i = 1 時,內迴圈執行 n - 1 次運算……當 i = n - 1 時,內迴圈執行 1 次運算。
所以,執行次數 t(n) = n + (n - 1) + (n - 2)……+ 1 = n(n + 1) / 2 = n^2 / 2 + n / 2。
根據上文說的 大o推導法 可以知道,此時時間複雜度為 o(n^2)。
演算法的空間複雜度通過計算演算法所需的儲存空間,公式記住 s(n) = o(f(n)),其中n 為問題規模,f(n)為關於n 所佔儲存空間的函式。
資料結構和演算法是相輔相成的,雖然可以單獨分開為兩個東西,但是對於計算機來說把他們分開,那麼他們將變得十分無聊。
資料結構研究的是組織資料的方式,比如陣列,他就是一種組織資料的方式,就是一種資料結構。但是有了資料結構,不一定有演算法。資料結構是演算法的基礎,比如資料結構為陣列,使用陣列,可以寫出冒泡、快排等演算法。
資料結構為演算法服務,演算法作用在特定的資料結構之上。
資料結構相關概念
1.資料 資料是資訊的載體,是描述客觀事物屬性的數,字元及所有能輸入到計算機中並被電腦程式識別和處理的符號的集合。資料是電腦程式加工的原材料。2.資料元素和資料項 資料元素是資料的基本單位,通常作為乙個整體進行考慮和處理。而資料元素又可由若干的資料項組成,資料項是構成資料元素的不可分割的最小單位。比...
資料結構 基礎概念
資料 描述客觀事物的數值,字元以及能輸入到計算機中且能被處理的各種符號集合。資料元素 由乙個或多個資料項 資料的最小單位 組成,是資料集合的個體,在計算機中通常作為乙個整體進行考慮。資料型別 一組性質相同的值集合以及定義在這個值集合上的一組操作的總稱。資料結構 互相之間存在一種或多種特定關係的資料元...
資料結構基礎概念
概念術語 資料 data 是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。資料元素 data element 是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。有時乙個資料元素可由若干個資料項 data item 組成,例如一本書的書目資訊為乙個...