常見的基礎演算法有:分治、動態規劃、貪心、回溯與分支限界等,常用的技巧方法有:遞迴,遞推,空間時間互換,快取,重疊子問題,記憶化。
演算法的本質是:狀態,狀態的轉移,問題的定義,以及子問題的定義。
分治演算法思想: 分而治之,大事化小小事化了。一句話:化繁為簡。
例子:快排。
動態規劃思想:由前乙個或者幾個狀態得到得到最優狀態,而不管這個最優狀態是如何得到的(最優子結構+無後效性)。
例子:最長公共子串行,最大上公升子串行,最長子序列求和。
例子:回溯與分支界限思想:根據條件得到全部或者乙個最優解。
例子:
牛人關於演算法的說明:
乙個問題是該用遞推、貪心、搜尋還是動態規劃,完全是由這個問題本身階段間狀態的轉移方式決定的!
每個階段只有乙個狀態->遞推;
每個階段的最優狀態都是由上乙個階段的最優狀態得到的->貪心;
每個階段的最優狀態是由之前所有階段的狀態的組合得到的->搜尋;
每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到而不管之前這個狀態是如何得到的->動態規劃。
每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到這個性質叫做最優子結構;
而不管之前這個狀態是如何得到的這個性質叫做無後效性。
演算法導論 一 演算法基礎
迴圈不變式主要用來幫助我們理解程式的正確性。迴圈不變式的三條性質 初始化 迴圈的第一次迭代之前,它為真。保持 如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。終止 再迴圈終止時,可驗證演算法的正確性。偽 的重要性在於它可以簡潔地表達出演算法的本質 縮排代表塊結構 採用縮排代表塊結構可以大大提...
(一)演算法基礎 排序演算法
作為演算法的入門,排序演算法再合適不過了,在這裡我主要介紹四種排序演算法 插入排序 歸併排序 快速排序以及希爾排序。不過在介紹這些演算法之前,我們先來做一些準備工作。一 演算法測試函式 在實現乙個演算法後,必然要對這個演算法進行除錯和分析,這裡我寫了一些函式用於演算法的測試。隨機數組生成函式 int...
解讀Raft(一 演算法基礎)
最近工作中討論到了raft協議相關的一些問題,正好之前讀過多次raft協議的那 所以趁著討論做一次總結整理。我會將raft協議拆成四個部分去總結 演算法基礎 選舉和日誌複製 安全性節點變更 這是第一篇 解讀raft 一 演算法基礎 分布式系統除了提公升整個體統的效能外還有乙個重要特徵就是提高系統的可...