基礎:演算法、近似與誤差

虛擬碼

虛擬碼是一種寫下演算法的方式:用平實、結構化的中文(或任何語言)搭配一點數學符號,讓人能讀懂邏輯,而不被真實程式語言的語法纏住。它是藍圖階段:你一步步描述要做什麼,暫時不必擔心分號、型別、或該呼叫哪個函式庫。

它使用任何程序的通用積木——指派(令 x = 1)、條件(若 ... 則 ... 否則)、迴圈(for i = 1 到 n,或 while 尚未收斂)、以及清楚的輸入與輸出行——但刻意保持非正式。例如,牛頓法的虛擬碼寫成:輸入 f、f'、x_0、容忍度 tol、最大迭代數 N;for k = 0 到 N-1:令 x_{k+1} = x_k - f(x_k)/f'(x_k);若 |x_{k+1} - x_k| < tol 則回傳 x_{k+1};end for;回報未收斂。任何人都能讀懂並翻譯成 Python、C 或 Fortran。

虛擬碼重要,是因為它把方法的想法與其實作分離開來。教科書與論文以虛擬碼陳述演算法,使其跨越語言與數十年仍然通用;你在這個層次上推敲正確性、成本與停止規則,然後才執行任何一行程式碼。其原則是:精確到步驟無歧義,又自由到讓你思考的是數學,而非機器。

輸入:陣列 a[1..n];令 s = 0;for i = 1 到 n:令 s = s + a[i];end for;輸出 s。這就是整個「對陣列求和」演算法——可讀、與語言無關、且工作量顯然是 O(n)。

虛擬碼讓邏輯與成本一目了然,且早於任何真實程式碼存在。

虛擬碼不是可執行的程式——它沒有固定文法,無法執行。要注意:真實的浮點運算行為,與虛擬碼中看似精確的數學並不相同。

又称
pseudo-code假碼擬碼