1. 程式人生 > >淺談算法,一些感悟(1)

淺談算法,一些感悟(1)

一個 最重要的 情況 更多 項目 通過 時間 清晰 困難

最近看到好幾個同學在學算法,看了一些書,另外跟一個算法較好的同學討論了一下,若有所悟,作此文,以求各位大神指教;

 現在看到好多同學學算法,可是,事實上看起來,真正明白理解了算法是一種什麽東西的極少,很多都是為了參加ACM而去學算法,並沒有對算法有真正意義上的研究,甚至說,他們拿到了ACM的入場券的時候還不知道算法是什麽,我感到很惋惜,從我個人的理解來說,算法其實一直都在我們身邊,它就是一切可以通過邏輯解釋的活動的一整個過程,這樣說可能有點泛泛而談了,總的來說,算法就是一個抽象的流程;而且在我看來,我們計算機領域內所談的算法應該算是一種比較狹義上的算法,是一種基於計算機的算法,而此類算法,我覺得應該可以分兩種類型:求解型和功能型,何為求解型呢?具體說來,就是當前各種算法大賽所要求的那種算法,是為了對一類題求解,至於功能型,就是軟件設計方面所用到的算法,可以說是把一系列求解型算法整合在一起的算法,好了,說了這麽多廢話,該入正題了;

會算法的人很多,可是算法也是有好有壞的,對一個程序來說,在得到同等結果的情況下,能盡量地減少時間損耗的就是好算法,但是,很多人為了追求完成任務,在時間損耗上不加以註意,使用了很多很粗糙的算法,比如說:要做一個循環十次的算法,有的人使用了循環算法,有的就使用分步的算法,把每一步都寫出來,這只是一種很極端的情況,一般已經入門的人都不會這樣做,後者就是一種很粗糙的算法,不僅執行效率低,而且寫起來也吃力不討好,相對後者來說,前者就是一種較美的算法,簡潔、執行效率高、寫起來也方便,這就是我對算法美的一種定義;

至今為止,我也沒寫出多少美的算法,但是,可以說我一直在追求,我嘗試通過不斷地思考,學習去改善一個算法,一下就是在算法由粗糙到美這個過程的一些感悟:

1、模糊算法模型,在寫算法之前,應該先對整個算法有一個比較模糊的算法模型,應該知道這個算法是幹嘛的,要怎麽實現等等,不要一拿到題目就急著寫算法,然後一邊寫一邊思考,這種行為會把一個原來比較容易寫的美的算法寫的粗糙的;

2、在模糊算法模型的基礎上,一步步往模型中添加具體的算法,使整個模型清晰起來,如果只是做一些比較的小的算法的話,這種行為可能沒太大必要,可是,對一些比較大的算法來說,或者一下子要把整個算法模型弄出來會很困難,而且很多細節地方會顧及不到,因此,在模糊算法模型的基礎上,把整個完整的模型分解成很多小的算法,一些小的算法比較容易寫得美;

3、整合所有小算法,往模糊模型中添加完小算法之後,最重要的就是如何把這些小算法連接起來,這又涉及到一些連接的算法,而這些連接算法,有可能是相同的;

4、很多人寫完算法之後,就開始根據算法編程,可是,有的時候,我們沒預料到的就是語言本身的一些問題,會導致我們的算法錯誤,因此,我們在寫完算法,甚至在寫的過程加入我們所需要註意的編程問題,以求最好的算法;

5、有的時候,我們看看身邊事物,沒有什麽特別,可是當我們從算法的角度出發,思考每種行為的算法的時候,我們可以領悟到更多的算法,同時,這些算法也可以在某些時候被應用到我們的項目之中;

時間問題,這次就先寫這麽多吧,只是個人的一些感悟,可能不太正確,懇請各位賜教!

淺談算法,一些感悟(1)