對演算法思維提升的思考

陆老师在线(信息学)發表於2024-06-02

博主是一個喜歡胡思亂想的蠢蛋,我無論學什麼都在想:

1.我為什麼要學這個:到底是為了考試升學,還是為了面試找工作,還是想在其他人面前裝b

2.學這個知識能給我帶來哪些提升?

3.為什麼別人學的比我輕鬆?到底是因為笨,還是因為方法不對?還是有認知上的差距?

已經刷了600+題,卻還是感覺在原地踏步,學了後面忘了前面,和剛入門速成的新手一個樣。

本文就是博主的內心os,希望大家看了就當圖一樂。

演算法是什麼,為什麼要學習演算法?
我們寫一段程式,是希望讓計算機去代替我們完成一些,具有一定流程或在特定規則下的一組操作。做出一個動作或操作是由一系列的判斷和計算完成的。在同樣的計算資源下,我們希望可以最佳化程式在解決某一問題的計算次數,即希望讓程式在解決該問題時計算次數減少。

計算機思維和人思維的差別
  人是透過知識+認知做出判斷和決策的。

  計算機是透過計算,並根據計算產生的機率去做出決策的。

  比如去判斷一個最值,人透過知識+認知可以很快的做出來,計算機則是要把所有相關的資料進行計算,透過計算結果進行判斷。

演算法最佳化的途徑只有2個:

1.透過數學來減少計算次數

2.透過記錄某些關鍵資訊,可以減少計算一些情況,從而減少計算次數

前者是最本質的演算法最佳化(根據數的性質和規律)。後者是透過以空間換時間,這一思想,來進行最佳化。

我們所謂的演算法,其實多數為第二種,因為90%的問題無法透過數學最佳化

問題的關鍵:所以幾乎所有的演算法題,大方向都是:存下關鍵資訊,減少計算次數

把問題聚焦在這兩句話上,我們可以發現我們在演算法資訊中最需要在思維上提升的幾個問題:

1.這個問題抽象出來的模型是什麼?

2.解決問題的一個方案是什麼?

3.這個方案一些步驟中,我們要列舉哪些資訊?

4.在列舉這些資訊時,我們可不可以透過,預處理,資料結構,將問題分類,資料的一些數學特徵,等,去減少我們的列舉情況

5.我們要去存哪些資訊?

6.我們要怎麼存這些資訊?

7.題目中的邊界問題

我們在做每一道題時,如果你想明白了所有的以上7個問題,做這道題才是有效的,否則等於白做。

尤其是模板題,這7個問題必須清晰明瞭。如果在使用時有某點遺忘,應儘快複習,搞清楚模板的這7個問題。

相關文章