萌新也能懂的資料結構和演算法概述

2021-10-23 00:15:40 字數 1416 閱讀 1693

在很久很久以前,有一位敲著**的少年,他正像往日一樣,像貝多芬演奏一般敲擊著那「咔咔」作響的鍵盤。。。緊接著!少年眉頭一皺,大事不妙!程式閃退了!這背後究竟是道德的淪喪,還是人性的泯滅?小黑帶你來深入這件離奇的事情!

要說到這資料結構和演算法啊,從開始學習程式設計開始,就有所耳聞,但是一直覺得是程式設計界一門比較高深的技術,我這種小白就別去參和了~直到我的程式執行卡頓、閃退的時候,我才意識到,我需要對我的**進行優化,可是怎麼優化呢?從何下手呢?跟著這個問題我就慢慢開始接觸並且開始學習資料結構和演算法!

資料結構可以說是演算法的基石了,演算法可以說是在資料結構的基礎上去進行一系列的執行,根據不同資料結構的特性,去進行一些列的演算法,對資料結構的資料運算進行優化!

如下圖,資料結構有邏輯結構物理結構,而邏輯結構又分為線性結構非線性結構兩大塊,在由兩大塊分為多種具有獨特特性的型別:

線性結構:

線性結構可以說是最簡單的資料結構了,其包括棧、隊(佇列)、串、線性表(hash)、陣列

非線性結構:

樹結構:樹結構相對於線性結構就較為複雜一些,像二叉樹、二叉堆等等;

圖結構:圖結構又是更為複雜的資料結構,相對於樹結構而言,樹結構只會有一對

一、一對多等關係,而圖結構會有多對多的複雜關係。

其他:上面幾種都屬於基本資料結構,其實還有很多由這些基本資料結構而演變出來的奇奇怪怪的結構,這裡就不過多贅述。

物理結構可以說是邏輯結構的組成元素了,比如二叉樹,它就可以依靠陣列或者鍊錶來實現!等等,就不講那麼細了~

可以從上面那段話的最後那句看到,乙個演算法的優劣可以用空間複雜度時間複雜度來衡量。那麼什麼是空間複雜度時間複雜度呢?

時間複雜度

時間複雜度指的是乙個演算法執行的時間長短,比如兩個同樣功能的程式,實現乙個查詢功能,查詢東西的時候乙個用了 1s ,乙個用了 2s ,那麼很明顯,用時短的程式會讓使用者體驗感更佳!

空間複雜度

空間複雜度是指乙個演算法執行時占用的空間大小,乙個程式,同樣的功能,執行某個功能時占用空間越小,使用者體驗就越好呀!就好比你乙個俄羅斯方塊玩的時候需要占用別人2g記憶體,你說別人要是手機差一點玩個俄羅斯方塊都卡,還能好好玩遊戲嘛?

對於時間複雜度和空間複雜度,有些時候可能必須做乙個取捨,那麼可以想一想,到底是捨棄時間,還是空間?

答案是:捨棄空間

因為更多時候,我們更願意程式執行速度快,寧願多占用一些空間,也要讓程式速度快,這樣使用者體驗才會更好!

萌新的資料結構與演算法3 A 演算法

astar是一種深度優先啟發式尋路演算法,廣泛運用在遊戲領域。提起astar不得不提一下迪傑特斯拉演算法,它是一種廣度優先啟發式尋路演算法,俗稱閹割版的astar。因為大部分情況下astar的效率都比迪傑特斯拉高,我們只需要稍作了解就可以。astar的原理,有一篇部落格寫的很詳細,萌新推薦一下 pu...

資料結構和演算法概述

資料結構是對在計算機記憶體 有時在磁碟中 中的資料的一種安排。資料結構包括陣列,鍊錶,棧,二叉樹,雜湊表等。演算法是對這些結構中的資料進行各種處理。對於大多數資料結構來說,都需要知道如下操作 1.插入一條新的資料項 2.尋找某一特定資料項 3.刪除某一特定資料項 4.迭代訪問某一資料結構中的各資料項...

資料結構和演算法概述

1.什麼是資料結構,什麼是演算法 資料結構指一組資料的儲存結構。演算法就是運算元據的一組方法。2.常用的資料結構 陣列 鍊錶 棧 佇列 雜湊表 二叉樹 堆 跳表 圖 trie 樹。3.常用的演算法 遞迴 排序 二分查詢 搜尋 雜湊演算法 貪心演算法 分治演算法 回溯演算法 動態規劃 字串匹配演算法 ...