記演算法思維

2021-09-25 08:43:46 字數 751 閱讀 1841

其實就是想總結一下自己做題中用到的思考方式,雖然我知道即使寫了也沒用?(還是要靠多多刷題)。本文純粹瞎寫。

模擬思維是最常見的做題方式:按照題意和樣例的操作,一步步模擬過程,從中理解到問題的本質。一般看不懂題目也需要進行合理的模擬進行突破,或者直接通過模擬得出答案。

暴力思維就是對於資料量小的題目,可以列舉所有狀態來得到答案。涉及到的知識:dfs,狀壓dp。

排序思維就是對於題目給出的資料,經過一定的排序後,可以在複雜度較低內解決題目的問題。而且,很多題目都是要先排序後才能對資料進行處理。涉及到的知識:c++ stl sort,莫隊。

貪心,是在每一步選擇中採取優先策略,從而得到答案的思維。前提是:要保證每一步採取這個優先策略肯定是得到正確的最優解。涉及到的知識:dijkstra演算法,最小生成樹。

分解,一般是對於複雜的問題,可以分解成小問題(子問題),然後從這些子問題來推出最終問題的答案。涉及到的知識有:動態規劃,分治,分塊。

優化思維一般是碰到直接做題目複雜度高的情況,這時需要進行時間的優化。當然排序是最簡單的優化,除此之外,還有利用字首和,資料結構的優化。涉及到的資料結構:棧(包括單調棧),佇列(包括單調佇列),堆(或者優先佇列),線段樹(簡單形式:樹狀陣列),並查集。當然,優化思維最重要的不是用怎樣優化(用什麼資料結構優化),而是優化什麼(目的)。

其實上面的思維都是基礎的東西,關鍵還是要自己多學相關演算法和多做相關題目,才能得到實際的提高(不過,對於新人(以前沒參加過演算法競賽)來說我覺得上面是必須要了解的思維,不然做題效率很慢?)

暫更???

演算法思維 two pointers

easy 級例題 給定乙個遞增的具有n個元素的正整數序列arr和乙個正整數s,求序列中兩個不同位置的數a和b,使他們的和恰好等於s,輸出所有滿足條件的結果i和j。如序列arr 和正整數s 9,就有 4 5 和 3 6 本例最簡單的方法就是利用二重迴圈列舉所有的可能性,得出結果。但是這樣做的時間複雜度...

dijkstra演算法 c 演算法思維

啟發式思維 歷史啟發。歷史計算過的值對計算當前值有啟發作用。比如常見遞推式 動態規劃演算法。這也是常見的遞迴思維。2.字首 中綴 字尾啟發,固定的前中字尾會對計算有啟發。固定的前中字尾是乙個集合,相當於對問題進行了劃分 分割思維 固定住了某個維度,問題變得簡單清晰。如lis中,字首分析中,固定a i...

思維拓展 記孩子疫苗接種登記

表面問題 沒有擴充套件確認需要的材料 深層問題 潛意識跟著別人的思路走,而不是自己先思考一下!事件過程 2015.5.15準備在社群醫院為孩子登記疫苗接種,辦理接種卡。我 怎麼辦理疫苗接種?工作人員 先到居委會辦乙個居住證明。我 之前在立水橋辦理過居住證明,所以以為去居委會問下怎麼辦就可以了 沒想到...