Rumah > hujung hadapan web > tutorial js > Notasi O Besar

Notasi O Besar

Susan Sarandon
Lepaskan: 2024-12-21 06:59:12
asal
634 orang telah melayarinya

Ia adalah tatatanda yang menentukan kelajuan atau perlahan algoritma berjalan. Kelajuan ini tidak ditentukan oleh saat, tetapi oleh berapa banyak masa berjalan algoritma meningkat apabila elemen meningkat.

Big O ialah hubungan antara masa dan saiz. Sepanjang artikel, anda akan melihat graf dengan langkah ini dan anda akan memahaminya dengan lebih baik dalam amalan. Kami mempunyai dua jenis kerumitan (ruang dan temporal).

Kerumitan Tempoh: Menentukan tempoh masa yang diperlukan untuk melaksanakan algoritma yang berkadar dengan saiz input.

Kerumitan Spatial: Menentukan jumlah memori yang akan diperuntukkan untuk mencari item yang kita perlukan.

Mengapa mengkaji ini?

  • Dengan ini anda boleh menentukan sejauh mana algoritma boleh berskala
  • Big O sentiasa berurusan dengan kes terburuk, contoh di bawah:

contoh:

  • Anda mempunyai senarai dan anda ingin mencari item tetapi item itu berada di hujung senarai. Senario kes terburuk ialah anda perlu melakukan sebanyak mungkin operasi sehingga anda menemui data yang anda mahukan.

Masa pelaksanaan

Tempo Constante O(1):

  • tidak kira saiz tatasusunan, ia akan sentiasa mengambil masa yang sama

contoh:

  • Kenaikan atau pengurangan
function increment(value: number){
  return ++value
}

function decrement(value: number){
  return --value
}
Salin selepas log masuk
Salin selepas log masuk
  • Ambil item tertentu
const fruits = ["apple", "orange", "grape", "banana"]

function getItem(items: string[], index: number) {
  return items[index]
}

const item = getItem(fruits, 2)
console.log(`fruit: ${item}`) // "grape"
Salin selepas log masuk
Salin selepas log masuk
  • Dapatkan elemen pertama tatasusunan
const animes = ["one piece", "dragon ball", "naruto", "demon slayer"]

function getFirstElement(items: string[]){
 return items[0]
}
Salin selepas log masuk
Salin selepas log masuk
  • Dapatkan item terakhir dalam tatasusunan
const animes = ["one piece", "dragon ball", "naruto", "demon slayer"]

function getLastElement(items: string[]){
 return items[item.length - 1]
}

let lastElement = getLastElement(animes)
console.log(`Last Element: ${lastElement}`)
Salin selepas log masuk
Salin selepas log masuk

Big O Notations

Masa Linear O(n):

  • Masa pelaksanaan bertambah berkadar dengan saiz tatasusunan
  • Isih dan algoritma carian binari
  • lelaran menggunakan hanya satu gelung

contoh:

  • Untuk mencari nombor terbesar dalam susunan 10 item, saya akan menatal semua item sehingga saya menemuinya.
  • Dalam kes yang paling teruk, bilangan terbesar akan menjadi yang terakhir.
const numbers = [0, 4, 8, 2, 37, 11, 7, 48]

function getMaxValue(items: number[]) {
    let max = numbers[0];
    for (let i=0; i <= items.length; i++){
      if(items[i] > max) {
        max = items[i]
      }
    }

    return max;
}

let maxValue = getMaxValue(numbers)

console.log(`Max Value: ${maxValue}`)
Salin selepas log masuk

Big O Notations

Masa Logaritma O(log n)

  • Saiz input meningkat sebanyak n dan masa pelaksanaan meningkat dengan log n, masa berkembang dalam perkadaran logaritma.
  • Ingat bahawa n ialah bilangan elemen dalam tatasusunan.
  • Input berkembang lebih cepat daripada masa pelaksanaan.

contoh:

  • kami akan melakukan carian binari dalam tatasusunan untuk mencari item tertentu.
const numbers = [0, 9, 24, 78, 54, 88, 92, 100, 21, 90]

function binarySearch(nums: number[], target: number) {
    let left = 0;
    let right = nums.length - 1;

    while (left <= right) {
        let middle = Math.floor((right + left) / 2);

        if (nums[middle] === target) {
            return middle;
        } else if (nums[middle] < target) {
            left = middle + 1;
        } else {
            right = middle - 1;
        }
    }

    return -1;
}

let getTarget = binarySearch(numbers, 92)
console.log(`Target: ${getTarget}`)
Salin selepas log masuk
  • Untuk lebih memahami pertumbuhan logaritma, mari kita lihat seperti berikut: tatasusunan yang kita gunakan dalam contoh mempunyai 10 input, jadi:

log2(10) = 3.4
log2(20) = 4.3
log2(40) = 5.3

  • Graf di bawah akan memudahkan pemahaman:

Big O Notations

Masa linearitma/kuasilinear O(n log n)

  • Kerumitan masa algoritma yang merujuk kepada pelaksanaan operasi logaritma n kali.
  • Campuran O(log(n)) dan O(n).
  • Contoh struktur ialah Isih Gabung.
  • berkembang sederhana.

Big O Notations

  • Satu bahagian skala dalam n dan bahagian lain skala dalam log(n), contoh di bawah ialah gabungan bertuah:
function increment(value: number){
  return ++value
}

function decrement(value: number){
  return --value
}
Salin selepas log masuk
Salin selepas log masuk

Masa Kuadratik O(n²)

  • Masa pelaksanaan meningkat secara kuadratik apabila bilangan input bertambah.
  • Matriks bacaan.
  • Pada asasnya apabila 2 gelung bersarang diperlukan
  • Isih Buih

Big O Notations

contoh:

const fruits = ["apple", "orange", "grape", "banana"]

function getItem(items: string[], index: number) {
  return items[index]
}

const item = getItem(fruits, 2)
console.log(`fruit: ${item}`) // "grape"
Salin selepas log masuk
Salin selepas log masuk

Eksponen Masa O(2ˆn)

  • Dengan setiap elemen dimasukkan ke dalam input, masa pelaksanaan akan berganda.

Big O Notations

  • contoh kod ini ialah fibonacci
const animes = ["one piece", "dragon ball", "naruto", "demon slayer"]

function getFirstElement(items: string[]){
 return items[0]
}
Salin selepas log masuk
Salin selepas log masuk

Masa Faktorial O(n!)

  • Masa pelaksanaan meningkat secara berfaktor mengikut saiz input.

contoh:

  • Janakan semua pilih atur dalam tatasusunan
const animes = ["one piece", "dragon ball", "naruto", "demon slayer"]

function getLastElement(items: string[]){
 return items[item.length - 1]
}

let lastElement = getLastElement(animes)
console.log(`Last Element: ${lastElement}`)
Salin selepas log masuk
Salin selepas log masuk

Big O Notations


Big O Notations

Atas ialah kandungan terperinci Notasi O Besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan