时间复杂度与空间复杂度

关于算法的时间复杂度与空间复杂度

时间复杂度

  1. O(1) - 常数时间复杂度:
function constantTime(arr) { return arr[0]; }
  1. O(log n) - 对数时间复杂度:
function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); if (arr[mid] === target) { return mid; } if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; }
  1. O(n) - 线性时间复杂度:
function linearSearch(arr, target) { for (let i = 0; i < arr.length; i++) { if (arr[i] === target) { return i; } } return -1; }
  1. O(n * log n) - 线性对数时间复杂度:
function mergeSort(arr) { if (arr.length <= 1) { return arr; } const mid = Math.floor(arr.length / 2); const left = mergeSort(arr.slice(0, mid)); const right = mergeSort(arr.slice(mid)); return merge(left, right); } function merge(left, right) { const result = []; while (left.length && right.length) { if (left[0] < right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } return [...result, ...left, ...right]; }
  1. O(n^2) - 平方时间复杂度:
function bubbleSort(arr) { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr; }

这个复杂度可以视为等差数列的和,从 1 到 (n-1)。在渐进意义上,O(n*(n-1)/2) 仍然等于 O(n^2)

  1. O(2^n) - 指数时间复杂度:
function fibonacci(n) { if (n <= 1) { return n; } return fibonacci(n - 1) + fibonacci(n - 2); }