萌新也能懂的數據結構和算法概述

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

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

數據結構(Data Structure)

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

如下圖,數據結構有邏輯結構物理結構,而邏輯結構又分爲線性結構非線性結構兩大塊,在由兩大塊分爲多種具有獨特特性的類型:
在這裏插入圖片描述

邏輯結構

線性結構:

線性結構可以說是最簡單的數據結構了,其包括棧、隊(隊列)、串、線性表(Hash)、數組

非線性結構:

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

圖結構:圖結構又是更爲複雜的數據結構,相對於樹結構而言,樹結構只會有一對一、一對多等關係,而圖結構會有多對多的複雜關係。

其他:

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

物理結構

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

算法(algorithm)

算法是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表着用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間複雜度時間複雜度來衡量。 ——來自百度百科

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

時間複雜度

時間複雜度指的是一個算法運行的時間長短,比如兩個同樣功能的程序,實現一個查找功能,查找東西的時候一個用了 1S ,一個用了 2S ,那麼很明顯,用時短的程序會讓用戶體驗感更佳!

空間複雜度

空間複雜度是指一個算法運行時佔用的空間大小,一個程序,同樣的功能,運行某個功能時佔用空間越小,用戶體驗就越好呀!就好比你一個俄羅斯方塊玩的時候需要佔用別人2G內存,你說別人要是手機差一點玩個俄羅斯方塊都卡,還能好好玩遊戲嘛?

時間和空間的取捨

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

答案是:捨棄空間

因爲更多時候,我們更願意程序運行速度快,寧願多佔用一些空間,也要讓程序速度快,這樣用戶體驗纔會更好!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章