JS學習筆記#9 | Function的時間複雜度

更新於 發佈於 閱讀時間約 4 分鐘

時間複雜度(Time Complexity)

時間複雜度是指一個演算法在執行時所需要的時間,通常是根據輸入數據的大小𝑛來評估。時間複雜度的高低直接影響演算法在面對大量數據時的效率,因此理解時間複雜度有助於評估不同解法的性能。

Big O 表示法

Big O 表示法是用來描述演算法在輸入量無限增長時的運行時間趨勢。它幫助我們了解演算法的效率,並比較不同演算法在面對大量數據時的表現。

  • 不包含低階項:Big O 表示法只保留運行時間的「主導項」(dominant term),也就是對增長趨勢影響最大的一項。例如: n2 + n 的複雜度在 Big O 中表達為 O(n²)
  • 不包含首項系數:Big O 表示法忽略主導項前的常數系數,因為系數不改變增長的速度。例如: 5n2 和 3n2 的 Big O 表示都記為 O(n²)

O(1) - 常數時間複雜度

這類演算法的執行時間不會隨著輸入的大小變化。

// 取出數組中的第一個元素
function getFirstElement(arr) {
return arr[0]; // 執行固定動作,不管 arr 的長度
}
raw-image

即便 n 增加,執行時間仍然不變。


O(n) - 線性時間複雜度

這類演算法的執行時間隨著輸入的大小而成比例地增加。

function sumArray(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
raw-image

當 n 增加,執行時間成比例增加。


O(n²) - 平方時間複雜度

這類演算法的執行時間隨著輸入量平方增長。

function printAllPairs(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
console.log(arr[i], arr[j]);
}
}
}
raw-image

當 n 增加,執行時間呈 n² 增長,即平方增長。


O(2ⁿ) - 指數時間複雜度

這種複雜度的演算法執行時間隨著輸入量指數增加,比如斐波那契數列的遞迴解法:

function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
raw-image

指數時間的增長非常快。當 n 增加,執行時間呈 2ⁿ 增長,導致非常高的運算量。


總結

Big O 表示法提供了一個方法來分析演算法隨著輸入增長的時間增長趨勢,能幫助我們判斷不同演算法隨著輸入量增長的效率,對優化程式效能至關重要。

avatar-img
0會員
18內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
koko的沙龍 的其他內容
在 JavaScript 中,資料型別主要分為原始型(Primitive Type)和引用型(Reference Type)。
陣列(Array)是 JavaScript 中用來儲存一組有序資料的集合。 陣列可以包含各種資料型別的值,例如數字、字串、布林值,甚至其他陣列或物件。了解陣列的基本操作是編寫高效 JavaScript 程式碼的重要基礎。
函式(Function)是 JavaScript 中用來完成特定任務的可重複執行的程式碼片段。 函式可以接受輸入(參數),進行處理,並回傳結果。 主要的函式建立方式有函式宣告、函式表達式、和箭頭函式。
if 語句是用來根據條件執行特定程式碼的一種控制流程語句。在 JavaScript 中,if 語句可以幫助我們做出決策,當條件為 true 時執行一段代碼,否則忽略。
在 JavaScript 中,邏輯運算子和比較運算子是用於條件判斷的重要工具。 它們常被用來進行邏輯運算和比較數值或變數,進一步決定程式的執行流程。
在 JavaScript 中,字串(String)是一個不可變的原生資料型態,用來存放並處理文字。JavaScript 提供多種方法和屬性來操作和格式化字串。理解這些屬性與方法,能讓我們更靈活地處理文字資料,特別是在處理用戶輸入、顯示訊息或處理 API 回傳的資料時非常有用。
在 JavaScript 中,資料型別主要分為原始型(Primitive Type)和引用型(Reference Type)。
陣列(Array)是 JavaScript 中用來儲存一組有序資料的集合。 陣列可以包含各種資料型別的值,例如數字、字串、布林值,甚至其他陣列或物件。了解陣列的基本操作是編寫高效 JavaScript 程式碼的重要基礎。
函式(Function)是 JavaScript 中用來完成特定任務的可重複執行的程式碼片段。 函式可以接受輸入(參數),進行處理,並回傳結果。 主要的函式建立方式有函式宣告、函式表達式、和箭頭函式。
if 語句是用來根據條件執行特定程式碼的一種控制流程語句。在 JavaScript 中,if 語句可以幫助我們做出決策,當條件為 true 時執行一段代碼,否則忽略。
在 JavaScript 中,邏輯運算子和比較運算子是用於條件判斷的重要工具。 它們常被用來進行邏輯運算和比較數值或變數,進一步決定程式的執行流程。
在 JavaScript 中,字串(String)是一個不可變的原生資料型態,用來存放並處理文字。JavaScript 提供多種方法和屬性來操作和格式化字串。理解這些屬性與方法,能讓我們更靈活地處理文字資料,特別是在處理用戶輸入、顯示訊息或處理 API 回傳的資料時非常有用。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。