acm思維隨筆

關於思維的個人兩種半衝突的理解

第一種理解:

天賦+思維訓練+第一次思考方式,主要由本人自己思考形成思維

第二種理解:

天賦+腦中知識圖形式+已有知識熟練度,主要由學習過的事物形成思維

思維隨筆:(不定時更新)

1.查找

|||||||||||當需要查找時,無論查找的是什麼,都可以這樣考慮:直接計算=數組下標>前後綴狀態,二分,哈希,離散,map。
|||||||||||也突然發現了關於暴力枚舉的優化
我們沒有必要進行全部數據範圍的枚舉,可以只枚舉可能是答案的點。
||||||||||我的意思是,比如數據的範圍是1e9,然後這個數列的某一個值造成了最優答案,可以枚舉數列的單個值來求,說起來很基礎,但確實可能會忘記。

2.個人算法理解

差分:將數組轉換成條形統計圖,利用前後綴和思想。
動態規劃:實質仍是貪心,本質上是將貪一次變成貪n次。個人認爲是“狀態疊加”的味。
於2020/3/14更新:
所謂動態規劃,實質是狀態轉移,我一直不懂到底什麼是狀態轉移,最近做了一道題,豁然開朗。
動態規劃不能僅僅侷限於揹包之類的問題上,接下來我會用比較籠統的話去敘述以我的視角去看待動態規劃。
所謂動態規劃,其實就是因爲一個狀態從另一個狀態得來。(這也是我之所以不能理解的地方){開始:
如果你已經知道了大概的動態規劃是怎麼回事

dp[i][j]=max{dp[i-1][j],dp[i][j’]+val}

一直沒能理解其中的含義,現在終於知道了。爲了方便,我用幾何類比一下。
對於第i個狀態,再進行動態規劃的時候,其實是這樣的。
i個狀態的獲取方式一般不只一個,那麼我們怎麼辦?
全存,是的,動態規劃就是在暴力過程中儲存所有可能的結果。
比如典型的揹包問題。
其歸咎於n個,每個包有選不選兩種情況。
怎麼全存?全存就是2^n的問題。
於是我們轉化,因爲每個情況之後,肯定會有相同的。
什麼是相同的?
比如,有重爲2,3的包和一個重爲5的包。他們就是相同的。
但是,存的時候就只會存2,3的包,因爲只有2,3的包是同一情況下的較優解,這就是我前邊說的貪心概念了,只存較優解,較優解永遠覆蓋弱的解,因爲只有這樣才能從較優解不斷較優從而達到整體最優。
}

假如你已經會遞歸了(遞歸其實就是動態規劃的逆向思維,那麼遞歸的逆向思維也就動態規劃)
典型的動態規劃問題,是將一個本來暴力需要a的b次方的問題去轉換到a*(值域)的問題。
可以這樣想,對於任何一個選擇,其始終會落在值域,那麼對於一個值(設爲A),由於另一個值(設爲B)是有這個值(A)進行操作得到的,所以只需要用這個值(A)去模擬操作,然後將原來的B與操作得到的新值去比較,僅保留最優。得到了的B可能不止一個,因爲有很多個A可以得到。
動態規劃對於算法小白來說可以說是比較難理解的(比如我)
貪心:是暴力優化,優化掉了看上去不是好的方法。可能需要用到前後綴,並不一定是和或者差,也可能最大值,最小值。
並查集:借用數組下標迅速查找來保證時間效率。

3.個人關於比賽的看法

可能是錯誤的結論,但是我覺得以後比賽中的板子題會越來越少,算法題的門檻會越來越高。思維題將會作爲銅牌題佔更大的比例。入門算法數論或者數據結構題太水,高級一點的又只有大觸能做出來,平常一點的又怕被噴水。但出思維題就沒什麼好說的。

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