Apa definisi "benar" dari batas atas dan bawah?

19

Misalkan f(n) menjadi kasus terburuk saat menjalankan masalah pada input ukuran n . Mari kita buat masalahnya agak aneh dengan memperbaiki f(n)=n2 untuk n=2k tetapi f(n)=n untuk n=2k+1 .

  1. Jadi, apa batas bawah masalahnya? Cara saya memahaminya hanyalah batas bawah f(n) . Tetapi kita tahu bahwa f(n)=Ω(n2) menyiratkan bahwa terdapat konstanta k , n0 sedemikian rupa sehingga untuk semua n>n0 , f(n)>kn2 , yang tidak benar. Jadi sepertinya kita hanya bisa mengatakan f(n)=Ω(n). Tapi biasanya, kita akan menyebut masalah memiliki batas bawah , kan?Ω(n2)

  2. Dengan asumsi , yang berarti ada k yang konstan , n 0 sedemikian rupa sehingga untuk semua n > n 0 , g ( n ) > k n 2 . Mari kita juga asumsikan masalah telah berjalan waktu g ( n ) . Jika kita dapat mengurangi masalah ini untuk semua bilangan prima n ke masalah lain (dengan ukuran input yang sama), dapat kita katakan waktu berjalan dari masalah lain memiliki batas bawah dari Ω ( ng(n)=Ω(n2)kn0n>n0g(n)>kn2g(n)n ?Ω(n2)

Wei Yu
sumber
12
Inilah sebabnya mengapa matematikawan menggunakan lim sup dan lim inf.
Peter Shor
1
Jadi saya pikir saya mengerti perbedaannya. Saya pikir orang posting hanya akan mengerti Omega sebagai sangat sering. Tetapi jika saya ingin membuat perbedaan yang jelas, apakah ada notasi yang bisa saya gunakan selain mengembangkannya?
Wei Yu
3
@ Yu Yu: lim sup dan lim inf. Anda mengatakan untuk beberapa konstantakjika Anda ingin mengatakan bahwag(n)kn2sering tak terhingga, dan lim infg(n)
lim supg(n)n2k
kg(n)kn2jika Anda ingin mengatakang(n)kn2untuk semua yang cukup besarn. Terutama jika Anda berbicara dengan ahli matematika.
lim infg(n)n2k
g(n)kn2n
 
Peter Shor
12
@ Wei: Untuk sebagian besar teori kompleksitas (lihat Lance di bawah), fungsi Anda adalah θ (n ^ 2); bagi kebanyakan ahli algoritma (lihat Knuth atau CLRS), fungsi Anda adalah Ο (n ^ 2) dan Ω (n). Kedua notasi hampir, tetapi tidak sepenuhnya, standar dalam subkomunitas mereka; untuk membuat segalanya lebih buruk, dua subkomunitas ini tumpang tindih! Jadi, jika penting notasi mana yang Anda gunakan, Anda harus mengatakan secara eksplisit notasi mana yang Anda gunakan. (Untungnya, itu jarang penting.)
Jeffε
2
@ Jeff. Saya yakin Anda harus memposting komentar Anda sebagai jawaban.
chazisop

Jawaban:

13

Definisi yang benar dari adalah bahwa ada beberapa k > 0 sedemikian rupa sehingga untuk banyak n , f ( n ) k n 2 . Definisi tak terhingga sering untuk batas bawah menangani masalah Anda dan bagaimana kami menggunakannya dalam praktik.f(n)=Ω(n2)k>0nf(n)kn2

Saya melakukan posting tentang ini pada tahun 2005.

Beberapa buku teks mendapatkan definisi ini dengan benar, beberapa tidak.

Lance Fortnow
sumber
14
Knuth tidak setuju dengan Anda: portal.acm.org/citation.cfm?id=1008329
Jeffε
4
CLRS dan Wikipedia juga tidak setuju dengan Anda. Definisi infinitey-sering adalah alternatif yang patut diperhatikan, tetapi tampaknya kurang banyak digunakan.
Anonim
Saya pikir definisi-definisi ini semua setuju ketika set pengecualian adalah ukuran 0.
Carter Tazio Schonwald
2
Masalah dengan definisi "sangat sering" adalah bahwa mereka biasanya tidak mengecualikan "sering kali tidak". Jadi kita memiliki konsekuensi mengerikan bahwa dengan definisi ini , tetapi juga f ( n ) = o ( n + 1 ) , dimana Ω dan o dimaksudkan untuk menjadi perintah tegas dalam arti. Saya sangat tidak suka ini. Setidaknya @ saran Carter tentang pengecualian ukuran 0 agak kurang mengerikan, sementara masih memungkinkan pesanan yang lebih baik daripada yang biasa. f(n)=Ω(n2) f(n)=o(n+1)Ωo
András Salamon
2
@Jukka: Tidak, saya menyalahgunakan sini. Seperti yang Anda beri petunjuk saya harus memperbaiki argumen saya untuk menggunakan O bukan o . Karena itu marilah saya menyatakan kembali keberatan yang sebenarnya tanpa menggunakan o atau O . Dengan "tak terhingga sering", seseorang memiliki anomali bahwa n = Ω ( f ( n ) ) , f ( n ) = Ω ( n 2 ) , namun n Ω ( n 2 ) . Jadi Ω bahkan tidak membentuk preorder.oOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
András Salamon
4

Dengan definisi Knuth , Anda hanya dapat menegaskan . Seperti yang Anda amati, ini tidak intuitif dan terjadi untuk fungsi yang disebut Vitányi dan Meertens "liar". Mereka mengusulkan untuk mendefinisikanf(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(Ini sama dengan definisi Lance.) Dengan definisi ini .f(n)Ω(n2)

Marcus Ritt
sumber
2

Saya tidak tahu tentang yang paling banyak digunakan, tapi saya yakin saya tahu penggunaan tertua (untuk ilmu komputer).

Dalam makalah 1965 oleh Hartmanis & Stearns "Tentang kompleksitas algoritma", Corollary 2.1 adalah:

Jika dan T adalah waktu-fungsi seperti yang inf n T ( n )UTmakaSUSTinfnT(n)U(n)0SUST

di mana adalah kelas kompleksitas dari semua masalah dihitung di O ( K ( n ) ) . T (n) harus mematuhi T ( n ) n / k untuk beberapa bilangan bulat k dan semua n dan T ( n ) T ( n + 1 ) , tetapi tidak harus konstruktif waktu.SKO(K(n))T(n)n/kknT(n)T(n+1)

Fungsi Anda mematuhi aturan pertama untuk tetapi gagal mematuhi aturan kedua.k=1

Konsekuensi 2.2 adalah timbal balik di atas dan menggunakan batas supremum, tetapi masih memiliki persyaratan ini. Saya rasa algoritma semakin kompleks dari tahun ke tahun, mungkin saja persyaratannya sudah longgar.

chazisop
sumber
2

Saya pikir kita harus membedakan antara dua hal:

  • lowerbound untuk suatu fungsi
  • lowerbound untuk suatu masalah (algoritma)

Untuk fungsi, saat kami memperbaiki urutan, definisi lowerbound / upperbound mengikuti darinya. Jika relasi urutannya adalah majorisasi asimptotik (mengabaikan faktor konstan)

fg:c,nm>n. f(x)cg(x)

maka definisi adalah definisi biasa dan Ω . Keduanya digunakan secara luas di daerah lain seperti kombinatorik.OΩ

Tetapi ketika kita berbicara tentang lowerbound untuk suatu masalah (suatu algoritma) apa yang benar-benar ingin kita katakan adalah bahwa masalahnya memerlukan sejumlah sumber daya (untuk menjalankan algoritma penyelesaian masalah). Seringkali kelas kompleksitas ditentukan oleh fungsi-fungsi seperti , dan kami dengan sederhana mengatakan bahwa masalahnya lebih rendah dibatasi oleh suatu fungsi, tetapi ini hanya berfungsi untuk fungsi-fungsi yang bagus (misalnya waktu berjalan dari algoritma adalah monoton, dll.). Apa yang ingin kita katakan dalam kasus ini adalah bahwa kita perlu n 2 waktu berjalan untuk menyelesaikan masalah, yaitu kurang dari n 2Time(t(n))n2n2waktu berjalan tidak cukup, yang secara resmi menjadi definisi Lance bahwa waktu berjalan algoritma tidak dalam .o(t(n))

Kaveh
sumber