下面是紫書上講的常用演算法設計策略和優化策略:
拆分出的狀態必須滿足最優子結構性質和無後效性(當前階段以前的狀態不會影響以後的狀態,只與當前階段有關)。動歸的目的是避免重疊子問題。遞推和遞迴(記憶化搜尋)是實現動歸的手段。
只要滿足:1.狀態設計不重不漏 2.轉移方程正確 3.能順利統計答案,那麼這個dp就是可寫的。如果在碼**的時候, 初始狀態的值設定對了,同時考慮了邊界情況,那麼這個dp**就是正確的。
決策單調性:第i個階段,如果從j轉移,那麼i以後的階段,都不會從j及以前的階段轉移。
做題的時候可以考慮先寫出原始的轉移方程,再用各種方法優化,如
將一些一環扣一環的轉移壓縮成乙個轉移/利用字首和思想/利用單調佇列或者優先佇列/利用線段樹……
貪心法:動態規劃的一種,每個階段的最優解是由上乙個階段的最優解得到的。貪心的情況下,區域性最優解構成了全域性最優解。在找出動態規劃的方法以後可以嘗試貪心解法。(或者你也可以用東方神秘力量猜結論)
收縮法:對於某些問題,可以用反證法證明答案只會收縮到某些邊界處,判斷邊界情況即可。
構造法:最樸素的方法。包括模擬,暴力,暴搜……
等價轉換:化繁為簡,包括問題轉換,問題分解等。例如最值反演?
假設法:對於有對稱性的問題,利用對稱性避免討論。
使用資料結構:在不改變主演算法的情況下加速演算法。包括但不限於並查集,單調x,平衡樹,線段樹,lct……
數形結合:將代數的關係轉化成幾何的關係。
二分答案:將求某個最優值問題轉化為判定性問題,也算在策略內。它的衍生演算法還有整體二分,就是把詢問和答案一起二分。
掃瞄法:帶有順序的列舉法,通常維護一些重要的量從而簡化計算。
列舉基準:尋找基於當前基準的最優值,再取所有基準的最值。某些看似狀壓的題可以用這種方法,在外層列舉基準狀態,然後神奇解決……
演算法優化策略
下面是紫書上講的常用演算法設計策略和優化策略 拆分出的狀態必須滿足最優子結構性質和無後效性 當前階段以前的狀態不會影響以後的狀態,只與當前階段有關 動歸的目的是避免重疊子問題。遞推和遞迴 記憶化搜尋 是實現動歸的手段。只要滿足 1.狀態設計不重不漏 2.轉移方程正確 3.能順利統計答案,那麼這個dp...
HBase 常用優化策略
hbase資料儲存過程 split概念 compact概念常用服務端配置優化 hbase properties 簡介hbase.regionserver.handler.count rpc請求的執行緒數量,預設值是10,提公升handler大小,可以有效提公升regionserver接收請求的能力,...
演算法優化 遞迴演算法的優化策略
在處理演算法問題時候,用的非常多的一種策略就是遞迴演算法了。但是遞迴演算法雖然簡單有效,但是該演算法的演算法效果總是有點差強人意。本文主要講述從兩個方向優化遞迴演算法,希望本文能給讀者一些thinking。持續更新中 總結 示例 遞迴演算法我又把它稱為迭代演算法,因為大致思路都差不多 迭代 從已知推...