演算法筆記 演算法基礎知識

2022-09-08 00:36:18 字數 2151 閱讀 9112

演算法是一種解決某類問題、具體的、明確無歧義的計算過程。

十進位制的指數。

例如: 1500 = 1.5*(10**3)數量級是3,也可以是 「千」,kilo

150萬 = 1.5*(10**6) 數量級是6, 也可以是「百萬」, 『million』

150萬比1500大3個數量級

執行環境資源有限,需要根據輸入規模(數量級)準備資源,比預估的高乙個數量級就可以。

例如: react的virtualdom 應該支援[萬]數量級資料(預設頁面最大節點數在「千」級),在「毫秒」時間內完成一次計算。

因為:顯示器更新時間時間間隔10ms,演算法應該《這個數量級,為了顯示器顯示不卡

cpu包含:

短期記憶(暫存器-register)

推理計算(演算法邏輯單元-alu-arithmetic and logic unit)

系統將資料從記憶體讀取到暫存器,計算完成後再存回記憶體

記憶體:長期記憶(隨機儲存器-ram-資料空間位址+指令空間位址)

訪問每個位址時間相同

例如:5000*0.2=1000; 資料計算時都要在暫存器中,結果返回也返回到暫存器中

時間複雜度和空間複雜度都是對演算法的乙個分類

時間複雜度

在該演算法中執行次數最多的**行,執行的次數,表示時間複雜度。因為每個命令,代表固定的指令和cpu執行週期,代表固定的時間。

時間複雜度分類

示例

長度為n的一維陣列遍歷-----o(n)

n*n的二維陣列巢狀遍歷 --------o(n^2)

n*n*n的三維陣列巢狀遍歷------o(n^3)

n*m的二維陣列巢狀遍歷-----------o(n*m)

長度n的陣列和m的陣列分別遍歷----o(n+m)

運算次數為常數---------------o(1)

空間複雜度

空間複雜度是指演算法用了多少額外的空間,可以理解成新建立了多少空間。沒有額外建立的話o(1)

空間複雜度分類的表示方法和時間複雜度雷同。

例如:

//

實現長度為n的陣列的反轉

function

f(a)

return reversea; //

相當於建立了乙個長度為n的空間,複雜度o(n)

}

上面的方法如果想要實現空間複雜度o(1)。則只能在原來陣列

//

實現長度為n的陣列的反轉

function

f(a)

}

⚠️對於遞迴演算法,函式引數所占用的空間會累計。

複雜度是一種度量指標(消耗時間和空間)隨著輸入規模增長而增常的一種關係。根據不同的關係有不同的分類。

o(1)+o(1)=o(1);

o(n)+o(n)=o(n);

o(lgn)+o(lgn)=o(lgn);

o(lgn)+o(n)=o(n);

o(n)+o(1)=o(n);

o(n^2)+o(n)=o(n^2);

由上面可知,複雜度是以最大消耗作為計算。

o其實是複雜度的漸近上界(最壞的情況)。

ω是複雜度漸近下界(最好);

演算法 基礎知識

插入排序法示例 將想要插入的值搜尋找到合適的位置,之前的數值一一向後移動乙個位置,騰出乙個空位置給想要插入的數值。偽 instert sort a for j 2 to a.length key a j i j 1 while i 0 and a i key a i 1 a i i i 1 a i ...

演算法基礎知識

o 1 稱為不變複雜性 1項 1秒 10項 1秒 100個專案 1秒 專案的數量仍然增加10倍,但o 1 的比例因子總是1。o log n 稱為對數複雜度 1項 1秒 10項 2秒 100項 3秒 1000項 4秒 10000項 5秒 計算次數只會增加輸入值的對數。因此,在這種情況下,假定每個計算需...

演算法基礎知識

一 插入排序 撲克牌原理 n 2 原址 a 1,n 1 是排好序的,把第n個往前 二 分治法 歸併 nlgn 非原址 先分解 sort a,p,r if pa or b 三 分治法 最大子陣列問題 描述 尋找a的和最大的非空連續子陣列 解決 按中點分成兩段,遞迴找左右段各自的最大段,再找跨越中點的最...