Apa perbedaan antara Θ (n) dan O (n)?


427

Terkadang saya melihat Θ (n) dengan simbol Θ aneh dengan sesuatu di tengahnya, dan kadang-kadang hanya O (n). Apakah hanya malas mengetik karena tidak ada yang tahu cara mengetik simbol ini, atau apakah itu berarti sesuatu yang berbeda?


8
Tidak jelas, tetapi pertanyaan ini merupakan duplikat dari stackoverflow.com/questions/464078/… ini dari kemarin.
Bill the Lizard

Jawaban:


600

Penjelasan singkat:

Jika suatu algoritma adalah dari Θ (g (n)), itu berarti bahwa waktu berjalan dari algoritma sebagai n (ukuran input) semakin besar sebanding dengan g (n).

Jika suatu algoritma adalah dari O (g (n)), itu berarti bahwa waktu berjalan dari algoritma ketika n semakin besar paling sebanding dengan g (n).

Biasanya, bahkan ketika orang berbicara tentang O (g (n)) yang sebenarnya mereka maksud Θ (g (n)) tetapi secara teknis, ada perbedaan.


Lebih teknis:

O (n) mewakili batas atas. Θ (n) berarti terikat erat. Ω (n) mewakili batas bawah.

f (x) = Θ (g (x)) iff f (x) = O (g (x)) dan f (x) = Ω (g (x))

Pada dasarnya ketika kita mengatakan suatu algoritma adalah O (n), itu juga O (n 2 ), O (n 1000000 ), O (2 n ), ... tetapi algoritma Θ (n) bukan Θ (n 2 ) .

Faktanya, karena f (n) = Θ (g (n)) berarti untuk nilai n yang cukup besar, f (n) dapat terikat dalam c 1 g (n) dan c 2 g (n) untuk beberapa nilai c 1 dan c 2 , yaitu laju pertumbuhan f secara asimptotik sama dengan g: g dapat berupa batas bawah dan dan batas atas dari f. Ini secara langsung menyiratkan f dapat menjadi batas bawah dan batas atas g juga. Karena itu,

f (x) = Θ (g (x)) iff g (x) = Θ (f (x))

Demikian pula, untuk menunjukkan f (n) = Θ (g (n)), itu cukup untuk menunjukkan g adalah batas atas f (yaitu f (n) = O (g (n))) dan f adalah batas bawah dari g (yaitu f (n) = Ω (g (n)) yang merupakan hal yang sama persis dengan g (n) = O (f (n)))). Secara singkat,

f (x) = Θ (g (x)) iff f (x) = O (g (x)) dan g (x) = O (f (x))


Ada juga ωnotasi -oh dan little-omega ( ) kecil yang mewakili batas fungsi atas dan bawah yang longgar.

Untuk meringkas:

f(x) = O(g(x))(Besar-oh) berarti bahwa tingkat pertumbuhan f(x)secara asimtotik kurang dari atau sama dengan tingkat pertumbuhan g(x).

f(x) = Ω(g(x))(big-omega) berarti bahwa tingkat pertumbuhan f(x)secara asimptot lebih besar dari atau sama dengan tingkat pertumbuhang(x)

f(x) = o(g(x))(little-oh) berarti bahwa laju pertumbuhan f(x)secara asimptotik lebih rendah daripada laju pertumbuhan g(x).

f(x) = ω(g(x))(little-omega) berarti bahwa laju pertumbuhan f(x)secara asimptotik lebih besar daripada laju pertumbuhang(x)

f(x) = Θ(g(x))(theta) berarti bahwa laju pertumbuhan f(x)secara asimptotik sama dengan laju pertumbuhang(x)

Untuk diskusi yang lebih terperinci, Anda dapat membaca definisi tentang Wikipedia atau membaca buku teks klasik seperti Pengantar Algoritma oleh Cormen et al.


1
Jika "Jika suatu algoritma adalah dari O (g (n)), itu berarti bahwa waktu berjalan dari algoritma ketika n semakin besar paling proporsional dengan g (n)." Lalu bagaimana Anda mengatakan bahwa "Pada dasarnya ketika kita mengatakan suatu algoritma adalah O (n), itu juga O (n2), O (n1000000), O (2n)," ??
Andy897

@ Andy897 Ini mengikuti dari definisi "proporsional". Dari Wikipedia: "Dalam matematika, dua variabel proporsional jika perubahan dalam satu selalu disertai dengan perubahan dalam yang lain, dan jika perubahan selalu terkait dengan penggunaan pengganda konstan. Konstanta disebut koefisien proporsionalitas atau proporsionalitas konstan."
Mehrdad Afshari

Apa >= \Omega(...)artinya Saya mengerti jika kita mengatakan itu anggota \Omega(...), tetapi jika lebih besar dari itu? Apa artinya itu?
Johannes Schaub - litb

328

Ada cara sederhana (trik, kurasa) untuk mengingat notasi mana yang berarti apa.

Semua notasi Big-O dapat dianggap memiliki bilah.

Saat melihat Ω, bilah berada di bagian bawah, jadi itu adalah batas bawah (asimptotik).

Saat melihat Θ, bilah jelas berada di tengah. Jadi itu adalah ikatan ketat (asimptotik).

Saat tulisan tangan O, Anda biasanya selesai di bagian atas, dan menggambar coretan. Oleh karena itu O (n) adalah batas atas fungsi. Agar adil, yang ini tidak bekerja dengan sebagian besar font, tetapi itu adalah pembenaran asli nama-nama.


5
Saya biasanya tidak pernah menjawab 3-4 jawaban untuk pertanyaan apa pun. Ini sepadan dengan perjalanan. Terima kasih telah berbagi triknya. : D
mustahil

56

satu adalah Big "O"

satu adalah Big Theta

http://en.wikipedia.org/wiki/Big_O_notation

Big O berarti algoritma Anda akan dieksekusi dalam tidak lebih dari langkah dalam ekspresi yang diberikan (n ^ 2)

Big Omega berarti algoritma Anda akan dieksekusi dalam langkah tidak kurang dari pada ekspresi yang diberikan (n ^ 2)

Ketika kedua kondisi tersebut benar untuk ekspresi yang sama, Anda dapat menggunakan notasi theta besar ....


20
Tapi itu salah! Jumlah langkah dibatasi di atas oleh n ^ 2 karena n menjadi sangat besar. Namun, suatu algoritma yang berjalan dalam n ^ 2 + c langkah membutuhkan lebih dari n ^ 2 langkah, tetapi masih O (n ^ 2). Notasi O besar hanya menggambarkan beahviour asimptotik .
HenryR

1
Ini bukan akhir semua menjadi semua definisi. Ini hanya titik awal .... Karena kita berbicara tentang notasi asimptotik ketika n mendekati tak terhingga. Konstanta C menjadi faktor non.
l_39217_l

1
Walaupun saya menyukai kesederhanaan dari jawaban ini, perlu dicatat bahwa algoritma O (n ^ 2) dapat mengambil 1.000.000.000 * n ^ 2 langkah untuk dieksekusi, yang tentunya jauh lebih besar daripada n ^ 2. Algoritma menjadi O (n ^ 2) hanya berarti bahwa ia akan mengambil tidak lebih dari k * n ^ 2 langkah untuk dieksekusi, di mana k adalah bilangan real positif.
MarredCheese

38

Daripada memberikan definisi teoretis, yang sudah dirangkum dengan indah di sini, saya akan memberikan contoh sederhana:

Asumsikan waktu menjalankan f(i)adalah O(1). Di bawah ini adalah fragmen kode yang runtime asimptotiknya Θ(n). Ini selalu memanggil fungsi f(...) nkali. Baik batas bawah dan atas adalah n.

for(int i=0; i<n; i++){
    f(i);
}

Fragmen kode kedua di bawah ini memiliki runtime asimptotik O(n). Ini panggilan fungsi f(...) paling n banyak. Batas atas adalah n, tetapi batas bawah bisa Ω(1)atau Ω(log(n))tergantung pada apa yang terjadi di dalam f2(i).

for(int i=0; i<n; i++){
    if( f2(i) ) break;
    f(i);
}

Apa yang Anda maksud dengan "runtime asimptotik"?
chopper draw lion4

1
Asimptotik dalam konteks ini berarti "cukup besar untuk n". Runtime dari fragmen kode yang runtime asimptotiknya Θ(n)akan tumbuh secara linear ketika n bertambah, misalnya runtime T dapat dinyatakan sebagai T (n) = a * n + b. Untuk nilai kecil n (misalnya n = 1 atau 2) ini mungkin bukan cara terbaik untuk menggambarkan perilaku - mungkin Anda memiliki beberapa kode inisialisasi yang membutuhkan waktu lebih lama daripada f (i).
kara deniz

11

Theta adalah cara singkat untuk merujuk pada suatu sangkaan khusus di mana O dan Omega besar adalah sama.

Jadi, jika seseorang mengklaim The Theta is expression q, maka mereka juga harus mengklaim itu Big O is expression qdan Omega is expression q.


Analogi kasar:

Jika: Theta mengklaim, "Binatang itu memiliki 5 kaki." maka berikut: Big O benar ("Hewan itu memiliki kurang dari atau sama dengan 5 kaki.") dan Omega benar ("Hewan itu memiliki lebih dari atau sama dengan 5 kaki.")

Ini hanya analogi kasar karena ekspresi tidak harus angka tertentu, melainkan fungsi berbagai urutan besarnya seperti log (n), n, n ^ 2, (dll).


11

Sebuah grafik bisa membuat jawaban sebelumnya lebih mudah untuk memahami:

Θ-Notasi - Urutan yang sama | O-Notation - Batas atas

Θ (n) - Urutan yang sama O (n) - Batas atas

Dalam Bahasa Inggris,

Di sebelah kiri, perhatikan bahwa ada batas atas dan batas bawah yang keduanya memiliki urutan besarnya yang sama (yaitu g (n) ). Abaikan konstanta, dan jika batas atas dan batas bawah memiliki urutan magnitudo yang sama, seseorang dapat dengan benar mengatakan f (n) = Θ (g (n)) atau f (n) berada dalam theta besar dari g (n) .

Dimulai dengan yang benar, contoh yang lebih sederhana, dikatakan bahwa batas atas g (n) hanyalah urutan besarnya dan mengabaikan konstanta c (seperti halnya semua notasi O besar ).


Anda telah mengacaukan kata-kata dan grafik.
kushalvm

@kushalvm, terima kasih atas kejujuran Anda. Bisakah Anda menjelaskan apa yang Anda maksud secara khusus? Demi pembelajaran saya dan orang lain yang mungkin bingung dengan jawaban ini. :-)
Ricardo

Bukankah seharusnya baris terakhir dari paragraf terakhir menjadi f (n) adalah Theta of g (n)?
kushalvm

@kushalvm, terima kasih telah menjelaskannya. Saya mengubah teks baris terakhir paragraf sebelum yang terakhir untuk memperbaiki kesalahan bahasa Inggris saya.
Ricardo

lihat lebih lanjut tentang pengucapan
Ricardo


3

Menggunakan batas

Mari kita pertimbangkan f(n) > 0dan g(n) > 0untuk semua n. Tidak masalah untuk mempertimbangkan ini, karena algoritma nyata tercepat memiliki setidaknya satu operasi dan menyelesaikan eksekusi setelah dimulainya. Ini akan menyederhanakan kalkulus, karena kita dapat menggunakan nilai ( f(n)) alih-alih nilai absolut ( |f(n)|).

  1. f(n) = O(g(n))

    Umum:

              f(n)     
    0 ≤ lim ──────── < ∞
        n➜∞   g(n)
    

    Untuk g(n) = n:

              f(n)     
    0 ≤ lim ──────── < ∞
        n➜∞    n
    

    Contoh:

        Expression               Value of the limit
    ------------------------------------------------
    n        = O(n)                      1
    1/2*n    = O(n)                     1/2
    2*n      = O(n)                      2
    n+log(n) = O(n)                      1
    n        = O(n*log(n))               0
    n        = O(n²)                     0
    n        = O(nⁿ)                     0
    

    Contoh tandingan:

        Expression                Value of the limit
    -------------------------------------------------
    n        ≠ O(log(n))                 ∞
    1/2*n    ≠ O(sqrt(n))                ∞
    2*n      ≠ O(1)                      ∞
    n+log(n) ≠ O(log(n))                 ∞
    
  2. f(n) = Θ(g(n))

    Umum:

              f(n)     
    0 < lim ──────── < ∞
        n➜∞   g(n)
    

    Untuk g(n) = n:

              f(n)     
    0 < lim ──────── < ∞
        n➜∞    n
    

    Contoh:

        Expression               Value of the limit
    ------------------------------------------------
    n        = Θ(n)                      1
    1/2*n    = Θ(n)                     1/2
    2*n      = Θ(n)                      2
    n+log(n) = Θ(n)                      1
    

    Contoh tandingan:

        Expression                Value of the limit
    -------------------------------------------------
    n        ≠ Θ(log(n))                 ∞
    1/2*n    ≠ Θ(sqrt(n))                ∞
    2*n      ≠ Θ(1)                      ∞
    n+log(n) ≠ Θ(log(n))                 ∞
    n        ≠ Θ(n*log(n))               0
    n        ≠ Θ(n²)                     0
    n        ≠ Θ(nⁿ)                     0
    

2

Kesimpulan: kita menganggap O besar, besar θ dan besar Ω sebagai hal yang sama.

Mengapa? Saya akan sampaikan alasannya di bawah ini:

Pertama, saya akan mengklarifikasi satu pernyataan yang salah, beberapa orang berpikir bahwa kita hanya peduli pada kompleksitas waktu terburuk, jadi kita selalu menggunakan O besar daripada besar θ. Saya akan mengatakan pria ini omong kosong. Batas atas dan batas bawah digunakan untuk menggambarkan satu fungsi, tidak digunakan untuk menggambarkan kompleksitas waktu. Fungsi waktu terburuk memiliki batas atas dan bawahnya; fungsi waktu terbaik juga memiliki batas atas dan bawahnya.

Untuk menjelaskan dengan jelas hubungan antara big O dan big θ, saya akan menjelaskan hubungan antara big O dan small o terlebih dahulu. Dari definisi tersebut, kita dapat dengan mudah mengetahui bahwa o kecil adalah subset dari O besar. Misalnya:

T (n) = n ^ 2 + n, kita dapat mengatakan T (n) = O (n ^ 2), T (n) = O (n ^ 3), T (n) = O (n ^ 4). Tetapi untuk o kecil, T (n) = o (n ^ 2) tidak memenuhi definisi o kecil. Jadi, hanya T (n) = o (n ^ 3), T (n) = o (n ^ 4) benar untuk o kecil. T redundan (n) = O (n ^ 2) adalah apa? Ini besar θ!

Secara umum, kita mengatakan O besar adalah O (n ^ 2), hampir tidak mengatakan T (n) = O (n ^ 3), T (n) = O (n ^ 4). Mengapa? Karena kita menganggap O besar sebagai besar θ secara tidak sadar.

Demikian pula, kita juga menganggap besar Ω sebagai besar θ secara tidak sadar.

Dalam satu kata, besar O, besar θ dan besar Ω bukan hal yang sama dari definisi, tetapi mereka adalah hal yang sama di mulut dan otak kita.


Mengapa konten ini diformat sebagai kutipan? Apakah ini kutipan dari sumber eksternal? Jika demikian, sumber harus ditautkan atau diidentifikasi. Jika tidak, format kutipan harus dihapus.
Mark Amery
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.