منشور في

Big O ف JavaScript

الكتاب

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ، ⵍⵍⵉ ⵜⵜⵓⵙⵎⴰ ⵙ ⵜⵉⵖⴰⵕⵜ ⵏ ⴱⴰⵅⵎⴰⵏ - ⵍⴰⵏⴷⵓ ، ⴰⴷ ⵉⴳ ⵢⴰⵜ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ . ⵜⵜⵓⵙⵎⴰ ⵙ ⵓⵙⵎ ⴰⴷ ⴳ ⵜⵖⴰⵕⵜ ⵏ ⵜⵓⵎⵍⵉ ⵏ ⵓⵙⴰⵖⵍ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ . ⵜⵜⵓⵙⵎⴰ ⵙ ⵓⵙⵎ ⴰⴷ ⴳ ⵓⵙⵖⵍ ⵏ ⵜⵓⵎⵍⵉ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ . ⵜⵜⵓⵙⵎⴰ ⵙ ⵓⵙⵎ ⴰⴷ ⴳ ⵓⵙⵖⵍ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⴳ ⵓⵙⵖⵍ ⵏ ⵓⵙⵏⵜⵉ .

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵉⵖⵍⵉⴼⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⴰⵖⵍ . ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⴰⵖⵍ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵎⵍⵉ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵜⵓⵙⴰⵖⵍ . ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⵖⵍ ⵏ ⵓⵙⵏⵜⵉ . ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⵖⵍ ⵏ ⵓⵙⵖⵍ ⵏ ⵓⵙⵏⵜⵉ .

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

for (let i = 0; i < n; i++) {
  console.log(i)
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵓⵙⵎⵖⵔ

let i = 0
while (i < n) {
  console.log(i)
  i++
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼት ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

let i = 0
do {
  console.log(i)
  i++
} while (i < n)

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ

ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵖⵍⵉⴼ

function factorial(n) {
  if (n === 0) {
    return 1
  }
  return n * factorial(n - 1)
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵖⵍⵉⴼ

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

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⴰⵖⵍⵉⴼⵜ

function linearSearch(arr, value) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === value) {
      return i
    }
  }
  return -1
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⴰⵖⵍⵉⴼⵜ

function binarySearch(arr, value) {
  let start = 0
  let end = arr.length - 1
  let middle = Math.floor((start + end) / 2)
  while (arr[middle] !== value && start <= end) {
    if (value < arr[middle]) {
      end = middle - 1
    } else {
      start = middle + 1
    }
    middle = Math.floor((start + end) / 2)
  }
  if (arr[middle] === value) {
    return middle
  }
  return -1
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(log(n)).

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

function bubbleSort(arr) {
  for (let i = arr.length; i > 0; i--) {
    for (let j = 0; j < i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
      }
    }
  }
  return arr
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n^2).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

function selectionSort(arr) {
  for (let i = 0; i < arr.length; i++) {
    let lowest = i
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[lowest]) {
        lowest = j
      }
    }
    if (i !== lowest) {
      let temp = arr[i]
      arr[i] = arr[lowest]
      arr[lowest] = temp
    }
  }
  return arr
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n^2).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    let currentVal = arr[i]
    for (var j = i - 1; j >= 0 && arr[j] > currentVal; j--) {
      arr[j + 1] = arr[j]
    }
    arr[j + 1] = currentVal
  }
  return arr
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n^2).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

function mergeSort(arr) {
  if (arr.length <= 1) return arr
  let mid = Math.floor(arr.length / 2)
  let left = mergeSort(arr.slice(0, mid))
  let right = mergeSort(arr.slice(mid))
  return merge(left, right)
}

function merge(left, right) {
  let results = []
  let i = 0
  let j = 0
  while (i < left.length && j < right.length) {
    if (left[i] < right[j]) {
      results.push(left[i])
      i++
    } else {
      results.push(right[j])
      j++
    }
  }
  while (i < left.length) {
    results.push(left[i])
    i++
  }
  while (j < right.length) {
    results.push(right[j])
    j++
  }
  return results
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n log(n)).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ

function pivot(arr, start = 0, end = arr.length + 1) {
  let pivot = arr[start]
  let swapIdx = start
  function swap(array, i, j) {
    let temp = array[i]
    array[i] = array[j]
    array[j] = temp
  }
  for (let i = start + 1; i < arr.length; i++) {
    if (pivot > arr[i]) {
      swapIdx++
      swap(arr, swapIdx, i)
    }
  }
  swap(arr, start, swapIdx)
  return swapIdx
}

function quickSort(arr, left = 0, right = arr.length - 1) {
  if (left < right) {
    let pivotIndex = pivot(arr, left, right)
    quickSort(arr, left, pivotIndex - 1)
    quickSort(arr, pivotIndex + 1, right)
  }
  return arr
}

ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⴰⴷ ⵜⵜⵓⵙⵎⵖⵔ ⵙ ⵜⴰⵖⵍⵉⴼⵜ ⵏ ⵓⵎⵍⴰ ⵏ ⵓⵃⵕⵉⵎ ⵏ ⵜⵓⵙⴰⵖⵍ ⴳ O(n log(n)).

ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ

  • ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⴳⵎⵉ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⴰⵖⴰⵕⵜ
  • ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⴳⵎⵉ ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⴰⵖⴰⵕⵜ
  • ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ ( ⵙ ⵜⵓⵙⴰⵖⵍ ) ⵓ ⵜⴰⵖⴰⵕⵜ ( ⵙ ⵜⵓⵙⴰⵖⵍ ) ⵜⵉⵖⴰⵕⵜ ⵏ ⵜⴰⵖⴰⵕⵜ
  • ⴳ ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ ، ⵜⴰⵖⴰⵕⵜ ⵏ ⵓⵙⴰⵖⵍ ⵜⵉⵖⴰⵕⵜ ⵏ ⵓⵙⵖⵍ ⵏ ⵓⵙⵎⵖⵔ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵜⴰⵖⴰⵕⵜ ⵏ ⵜⵓⵙⴰⵖⵍ ⵏ ⵓⵙⵎⵖⵔ

ⵜⴰⵖⴰⵕⵜ