演算法導論 一 演算法基礎

2021-07-23 14:30:48 字數 880 閱讀 3394

迴圈不變式主要用來幫助我們理解程式的正確性。

迴圈不變式的三條性質:

初始化:迴圈的第一次迭代之前,它為真。

保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。

終止:再迴圈終止時,可驗證演算法的正確性。

偽**的重要性在於它可以簡潔地表達出演算法的本質

縮排代表塊結構:採用縮排代表塊結構可以大大提高偽**的清晰性。

可用while、for…to…by… 、for…downto…by…、repeat-until等迴圈結構以及if-else等條件結構: by之後是增量大小。

記號」//」:代表注釋。

記號「..」:表示陣列中值的乙個範圍,如a[1..j]代表a的乙個子陣列。

記號「.」:表示使用物件的某個屬性,如a.length。

邏輯運算子 and、or、not分析演算法的結果意味著**演算法需要的資源。

一些演算法分析時要使用的概念:

輸入規模t(n):執行時間常使用最壞情況的t(n)和平均情況的的t(n)

因為最壞情況的執行時間給出了任何輸入的執行時間的乙個上界。

而且最壞情況經常出現。

增長量級時間複雜度與空間複雜度

(一)演算法基礎 排序演算法

作為演算法的入門,排序演算法再合適不過了,在這裡我主要介紹四種排序演算法 插入排序 歸併排序 快速排序以及希爾排序。不過在介紹這些演算法之前,我們先來做一些準備工作。一 演算法測試函式 在實現乙個演算法後,必然要對這個演算法進行除錯和分析,這裡我寫了一些函式用於演算法的測試。隨機數組生成函式 int...

基礎演算法之一 演算法概論

常見的基礎演算法有 分治 動態規劃 貪心 回溯與分支限界等,常用的技巧方法有 遞迴,遞推,空間時間互換,快取,重疊子問題,記憶化。演算法的本質是 狀態,狀態的轉移,問題的定義,以及子問題的定義。分治演算法思想 分而治之,大事化小小事化了。一句話 化繁為簡。例子 快排。動態規劃思想 由前乙個或者幾個狀...

解讀Raft(一 演算法基礎)

最近工作中討論到了raft協議相關的一些問題,正好之前讀過多次raft協議的那 所以趁著討論做一次總結整理。我會將raft協議拆成四個部分去總結 演算法基礎 選舉和日誌複製 安全性節點變更 這是第一篇 解讀raft 一 演算法基礎 分布式系統除了提公升整個體統的效能外還有乙個重要特徵就是提高系統的可...