1. 程式人生 > >數據結構、算法,個人理解

數據結構、算法,個人理解

存在 顏色 生活 抽象 過程 重要性 攝像頭 特定 這位

也是在一次一個網友討論過程中理解的,一直對數據結構和算法是程序的靈魂這句話不理解。

數據結構和算法那麽重要,我怎麽感覺不到呢?怎麽想這句話,都感覺是屁話,跟沒說一樣。

出現這些問題原因有:

一個是因為自己平時寫的程序比較低端,加減乘除,if else switch就解決問題了,根本設計不到對數據結構和算法的探究。

二個是數據結構和算法,被分開理解了。

比如,我能理解數據結構對於程序的重要性,忘了是在哪個文件裏面看的了,講數據結構就是我們對現實生活中需要用程序解決的問題的抽象。

一個班的學生,每個得了多少分,我可以用學號和分數,二維數組來表示。

學生叫什麽,性別,已婚與否,分數,數據的類型多了之後,可以用結構體來表示。

我們要解決的問題的核心,就是這些從現實生活中提煉出來的抽象數據。數組、結構,可以參與進來,幫助我記錄。

可是這裏面,跟算法有毛關系?

頂多我查找一下,修改一下這些數據,感覺這些簡單的操作稱不上算法吧???

算法是什麽??到底,WTF

我單獨也運用過算法,比如在做12864液晶屏的時候,有個畫點的算法,叫Bresenham。

通過對這個算法的理解,也知道了,嗯,這個算法確實牛啊。

畫一條直線,我確定畫了一個點,下個點畫在哪裏?楞頭青的想法是,先得到起點和終點,通過得到這個直線的一次方程,來得到每個點的坐標(x,y)

但是這個算法吊啊,具體實現忘了,好早之前的東西了額。不用復雜的運算,就可以得到基於某個點,下個點的坐標。

哦,對還有學過的各種排序算法,什麽bitmap算法,

總覺得算法這個事兒不是一般能用得上的,都是給特定的場合用的。

這麽理解下來,這不是程序可以離開算法存在嗎?

算法和數據結構可以分開嗎,誰說他們必須在一起的??!啊,課本上也沒有太好的解釋啊

於是時間就這麽一年一年過去了,我還不知道怎麽肥四。

直到有一天。。。

那位網友討論了一個顏色識別的問題。

一段程序,顏色識別,是攝像機拍下一個圖片,其中的某一點取出的8*3位的顏色值,每8位代表RGB裏的一種。

然後設置了標準色,與這一點的顏色值計算偏差,與哪種標準色的偏差最小,就認為是哪種顏色。

按道理講,我覺得這個程序還行啊,能用。

但這位網友說到:

1.首先rgb色是向量,用標量來直接計算,是錯誤的

2.更嚴重的是,這個算法能跑的前提是,環境光沒有任何變化,攝像頭不更換,攝像頭曝光率不變。

所以環境光變化,這個算法就無能為力了,這套代碼太爛!

一語驚人,我一下悟到了算法是什麽。

算法就是,一種思路,根據這個思路寫出來的代碼。

而且這個代碼可以完成我們要解決的問題,通俗說就是跑得通,能得到我們想要的結果。

這個代碼寫起來可以很神氣、很優雅,像上邊提到的Bresenham啊、快速排序、冒泡排序,

也可以很簡單、很乞丐,我們平時寫的代碼,雖然是什麽if else switch,但是這也是一種解決問題的思路,而這個思路就是程序的算法!

我恍然大悟,算法不是什麽高深的東西,他就是我們用程序來描述、解決問題的思路!!!與實現這個算法,寫的代碼復雜與否、優雅與否沒有半毛錢關系!!!

當我們想出來一個思路來解決問題時,還要結合我們從現實中抽象出來的數據結構,才能得到完完整整的程序。

比如點燈。

數據結構:bit LED

算法:通過修改寄存器,產生引腳的電平變化。

(完)

數據結構、算法,個人理解