也是在一次乙個網友討論過程中理解的,一直對資料結構和演算法是程式的靈魂這句話不理解。
資料結構和演算法那麼重要,我怎麼感覺不到呢?怎麼想這句話,都感覺是屁話,跟沒說一樣。
出現這些問題原因有:
乙個是因為自己平時寫的程式比較低端,加減乘除,if else switch就解決問題了,根本設計不到對資料結構和演算法的**。
二個是資料結構和演算法,被分開理解了。
比如,我能理解資料結構對於程式的重要性,忘了是在哪個檔案裡面看的了,講資料結構就是我們對現實生活中需要用程式解決的問題的抽象。
乙個班的學生,每個得了多少分,我可以用學號和分數,二維陣列來表示。
學生叫什麼,性別,已婚與否,分數,資料的型別多了之後,可以用結構體來表示。
我們要解決的問題的核心,就是這些從現實生活中提煉出來的抽象資料。陣列、結構,可以參與進來,幫助我記錄。
可是這裡面,跟演算法有毛關係?
頂多我查詢一下,修改一下這些資料,感覺這些簡單的操作稱不上演算法吧???
演算法是什麼??到底,wtf
我單獨也運用過演算法,比如在做12864液晶屏的時候,有個畫點的演算法,叫bresenham。
通過對這個演算法的理解,也知道了,嗯,這個演算法確實牛啊。
畫一條直線,我確定畫了乙個點,下個點畫在**?愣頭青的想法是,先得到起點和終點,通過得到這個直線的一次方程,來得到每個點的座標(x,y)
但是這個演算法吊啊,具體實現忘了,好早之前的東西了額。不用複雜的運算,就可以得到基於某個點,下個點的座標。
哦,對還有學過的各種排序演算法,什麼bitmap演算法,
總覺得演算法這個事兒不是一般能用得上的,都是給特定的場合用的。
這麼理解下來,這不是程式可以離開演算法存在嗎?
演算法和資料結構可以分開嗎,誰說他們必須在一起的??!啊,課本上也沒有太好的解釋啊
於是時間就這麼一年一年過去了,我還不知道怎麼肥四。
直到有一天。。。
那位網友討論了乙個顏色識別的問題。
然後設定了標準色,與這一點的顏色值計算偏差,與哪種標準色的偏差最小,就認為是哪種顏色。
按道理講,我覺得這個程式還行啊,能用。
但這位網友說到:
1.首先rgb色是向量,用標量來直接計算,是錯誤的
2.更嚴重的是,這個演算法能跑的前提是,環境光沒有任何變化,攝像頭不更換,攝像頭**率不變。
所以環境光變化,這個演算法就無能為力了,這套**太爛!
一語驚人,我一下悟到了演算法是什麼。
演算法就是,一種思路,根據這個思路寫出來的**。
而且這個**可以完成我們要解決的問題,通俗說就是跑得通,能得到我們想要的結果。
這個**寫起來可以很神氣、很優雅,像上邊提到的bresenham啊、快速排序、氣泡排序,
也可以很簡單、很乞丐,我們平時寫的**,雖然是什麼if else switch,但是這也是一種解決問題的思路,而這個思路就是程式的演算法!
我恍然大悟,演算法不是什麼高深的東西,他就是我們用程式來描述、解決問題的思路!!!與實現這個演算法,寫的**複雜與否、優雅與否沒有半毛錢關係!!!
當我們想出來乙個思路來解決問題時,還要結合我們從現實中抽象出來的資料結構,才能得到完完整整的程式。
比如點燈。
資料結構:bit led
演算法:通過修改暫存器,產生引腳的電平變化。
(完)
資料結構 演算法,個人理解
也是在一次乙個討論過程中理解的,一直對資料結構和演算法是程式的靈魂這句話不理解。資料結構和演算法那麼重要,我怎麼感覺不到呢?怎麼想這句話,都感覺是屁話,跟沒說一樣。出現這些問題原因有 乙個是因為自己平時寫的程式比較低端,加減乘除,if else switch就解決問題了,根本設計不到對資料結構和演算...
資料結構 關鍵路徑的個人理解
整個週期裡面,先算的是關於結點的,後面算的是關於邊的。關於節點 即事件 最早發生是求它不得不等待的時間 也可以理解為一切順利的話不得不花費的時間 最遲發生是指這個 一般是非關鍵結點 在整個週期裡可以拖延到什麼時候完成 可以理解為到這個點你必須做完它了 關於邊 即活動 最早發生時間就是前面完成了之後立...
個人演算法 資料結構複習筆記
github專案位址 直觀地想,乙個演算法的執行時間也就是執行所有程式語句的耗時總和。然而在實際的分析中,我們並不需要考慮所有程式語句的執行時間,我們應該做的是集中注意力於最耗時的部分,也就是執行頻率最高而且最耗時的操作。但是對於遞迴 或各分支條件不確定的演算法較難分析。詳細介紹見 遞迴演算法時間複...