Tolong jelaskan pernyataan bahwa fungsi a + b milik O (n ^ 2) dan Θ (n)?


12

Katakanlah saya memiliki fungsi linier f(n)= an+b, apa cara terbaik untuk membuktikan bahwa fungsi ini milik O (n 2 ) dan Θ(n)?

Saya tidak perlu ketelitian matematika di sini. Saya butuh jawaban programmer. Beberapa cara logis untuk menjelaskan.

Inilah tepatnya mengapa saya tidak memposting pertanyaan dalam T&J matematika dan sebagai gantinya dalam T&J Programmer.


2
@EmmadKareem Dalam literatur sering notasi Big O sering digunakan dengan santai untuk mewakili batas ketat yang pada dasarnya Θ (n). Big O sebenarnya adalah batas atas.
Geek

1
@EmmadKareem "batas atas O (n) bukan n * n." ,, tidak ada batas atas O (n). O (n) sendiri mendefinisikan batas atas. Ini sebenarnya dapat berisi serangkaian fungsi yang memenuhi kondisi: f (x) ∈ O (g (x)) karena terdapat c> 0 (misal c = 1) dan x0 (misal x0 = 5) sedemikian rupa sehingga f (x ) <cg (x) setiap kali x> x0.
Geek

2
@EmmadKareem Sebenarnya O (n) \ subset O (n ^ 2) \ subset O (n ^ 3) dan seterusnya, jadi f \ dalam O (n ^ 2) dengan transitivitas dari \ subset. Perhatikan bahwa \ subset bukan \ subseteq.
scarfridge

6
"Aku butuh jawaban programmer. Beberapa cara logis untuk menjelaskan." - baik bagaimana Anda mendefinisikan "logis"? Matematika itu logis. Apa pun yang kurang dari pemikiran keras salah di sini. Anda dapat mencoba menjelaskan topik, tetapi tanpa mencerna matematika (jika tidak sulit) di belakangnya Anda tidak akan benar-benar mendapatkannya - Anda hanya akan memiliki perasaan berkabut tentang artinya.
Tamás Szelei

2
@ Geek: Saya kira maksud Anda Matematika ? cs.SE juga akan menjadi alamat yang baik.
Raphael

Jawaban:


20

Notasi Besar Oh (O, Theta, Omega) adalah tentang tingkat pertumbuhan fungsi.

Ketika Anda mengimplementasikan suatu algoritma, itu memiliki karakteristik tertentu bagaimana runtime berubah ketika Anda meningkatkan dataset beroperasi. Sekarang, Anda dapat mengoptimalkan algoritme sehingga berjalan lebih cepat dengan faktor 100. Tentu, ini bagus, tetapi pada dasarnya, itu masih algoritma yang sama. Demikian pula, dalam beberapa tahun, komputer mungkin dua kali lebih cepat dari sekarang.

Notasi Landau meringkaskan faktor-faktor konstan ini. Tidak peduli apakah suatu algoritma fselalu dua kali lebih cepat dari algoritma yang lain g: Mungkin gdapat dioptimalkan untuk berjalan 4 kali lebih cepat, atau Anda mungkin dapat membeli perangkat keras yang lebih cepat. Jika Anda melihatnya dari perspektif ini, Anda mungkin mengatakan mereka "sama". (Bukan berarti Anda dapat (selalu) mengabaikan faktor konstan dalam praktik.)

Besar oh menentukan batas atas, mirip dengan <=hubungannya.

Anda akan setuju bahwa 1 < 2itu benar. Apakah itu berarti 1tidak boleh kurang dari angka lainnya? Tentu tidak. Ada jumlah angka tak terbatas yang lebih besar dari 1.

Dengan tingkat pertumbuhan, ini mirip. O(n)menunjukkan himpunan semua fungsi, yang tumbuh secara linear (atau lebih lambat). O(n^2)di sisi lain menunjukkan semua fungsi-fungsi itu, yang tumbuh dengan compelxity kuadratik (atau lebih lambat). Saya yakin Anda akan setuju bahwa fungsi linear tumbuh lebih lambat daripada fungsi kuadratik.

Inilah sebabnya mengapa suatu fungsi bisa berada di lebih dari satu kelas "Big-oh".

Berikut ini adalah perbandingan fungsi yang berbeda dengan kendala: (dari matematika Beton Knuth)

perbandingan tingkat pertumbuhan

Dari kiri ke kanan, fungsi tumbuh lebih cepat.

Juga, masukkan deskripsi gambar di siniartinya n ^ 2 tumbuh lebih cepat daripada n ^ 1 karena 2> 1.

Definisi

definisi omega

"F tumbuh lebih cepat atau sama cepatnya dengan g"

definisi besar Oh

"F tumbuh lebih lambat atau sama cepatnya dengan g"

definisi Theta

Kombinasi keduanya di atas. Dikatakan fungsi ftumbuh "sama cepat" sebagai g. Ini hubungan ekivalensi.

Penafsiran

Katakanlah Anda memiliki dua algoritma, fdan g.

Akhir

Dengan asumsi f tidak dalam Theta of g, f dalam Omega gberarti bahwa apa pun anggaran Anda, tidak ada jumlah daya komputasi yang dapat Anda tambahkan ke sistem Anda, sehingga fakan selalu berjalan secepat g.

Oh besar

Dengan asumsi f tidak dalam Theta of g, f dalam Big Oh of gberarti bahwa jika Anda memiliki cukup data, fakan selalu berjalan lebih cepat daripada g, tidak peduli berapa banyak daya komputasi yang Anda tambahkan ke sistem Anda.

Bukti

Jika Anda benar-benar berusaha membuktikan ini, Anda perlu menunjukkan menggunakan definisi notasi Landau bahwa fungsi Anda memenuhi persyaratan yang diperlukan.

Jadi, Anda perlu menemukan nilai-nilai untuk c, d, n_0sehingga kondisi memegang.

Inilah cara Anda dapat melakukannya untuk yang terikat dengan c:

bukti

Penting untuk disadari, bahwa saya secara sewenang-wenang mendefinisikan csebagai lebih kecil daripada a-1baik-baik saja. Definisi Theta (g) mengatakan bahwa "ada a c". Ini bisa berupa nilai apa pun asalkan lebih besar dari 0. (Jika abilangan real positif, Anda perlu mengubah buktinya sedikit, karena a - 1mungkin sebenarnya negatif)

(Saya berasumsi apositif, jika tidak fungsi akan selalu negatif untuk nilai besar n, yang tidak masuk akal untuk fungsi yang menunjukkan runtime.)

Anda dapat mencoba melakukannya untuk batas atas, ini sangat mirip. Jika Anda tidak tahu caranya, saya dapat memberikan bukti untuk Anda.

Petunjuk: mulai dengan d > a + 1

Perhatian

Adalah penting bahwa Anda tidak membuktikannya dengan cara yang salah. Jika Anda menganggap bahwa (a + b) ada di O (n) dan pergi dari sana, Anda belum membuktikan apa yang Anda inginkan. Anda perlu memverifikasi bahwa semua langkah Anda berjalan dua arah, yaitu alih-alih =>Anda miliki <=>.


2
Itu dia. Terlalu buruk orang-orang ketakutan karena matematika, sebenarnya sangat sederhana.
Tamás Szelei

pertanyaan menyatakan: "Saya tidak perlu ketelitian matematika di sini. Saya butuh jawaban programmer ..." Notasi yang digunakan dalam jawaban ini tidak terlihat cocok untuk pertanyaan
nyamuk

1
@gnat Hmm, saya pikir pertanyaan mengatakan "buktikan" pada satu titik. Lagi pula, saya telah menambahkan interpretasi untuk definisi matematika.
phant0m

@ phant0m jawaban yang bagus. persis apa yang saya cari. Matematika dalam jawaban membuatnya lebih solid, meskipun "matematika" tidak secara khusus diminta dalam pertanyaan awal. Terima kasih banyak.
Geek

@ Geek, aku senang kamu menyukainya. Jika Anda memiliki pertanyaan lagi, jangan ragu untuk bertanya dan saya dapat mengklarifikasi / memperluas jawaban saya.
phant0m

5

Saat Anda berurusan dengan polinomial, Anda hanya peduli pada tingkat polinomialnya. Artinya, untuk an + b, Anda hanya peduli n. Jika ya an^3 + bn^2 + cn + d, Anda hanya akan peduli n^3.

Jadi jumlahnya banyak dengan gelar d akan selalu dalam Θ(n^d). Sederhana.

Sekarang kita perlu berbicara tentang perbedaan antara Θ dan O. Pada dasarnya, perbedaannya sama dengan ==dan <=masing - masing. Jadi Θ(n)berarti bahwa itu adalah selalu dalam faktor konstan n. O(n)berarti selalu dalam faktor konstan natau kurang dari n.

Ini berarti bahwa fungsi apa pun di Θ(s), untuk apa pun s, juga akan berada di O(s). Juga, jika suatu fungsi dalam Θ(s)dan sselalu kurang dari beberapa fungsi lainnya t, fungsi itu dalam O(t)tetapi tidak Θ(t).

Demi kelengkapan, ada juga Ω(n). Jika Θdiwakili ==dan Odiwakili <=, Ωdiwakili >=. Begitu an + bjuga di Ω(1), Θ(n)dan O(n^2).

Seperti yang saya katakan sebelumnya, sangat mudah untuk mencari tahu apa polinomial kelas yang ada - Anda hanya melihat gelar. Ada beberapa fungsi lain yang juga mudah dikerjakan.

Setiap fungsi dalam bentuk a^bnuntuk sewenang-wenang adan bberada di Θ(a^n). Untuk nilai apa pun c >= a, mereka ada di O(c^n). Setiap polinomial dalam O(2^n). Pada dasarnya ini hanya mengatakan bahwa fungsi eksponensial selalu mengalahkan polinomial dan bahwa dasar fungsi eksponensial itu penting.

Logaritma adalah kebalikannya. Untuk satu, log_b nada Θ(log n)untuk apa saja b. Ini berarti basis tidak masalah untuk logaritma. Ini masuk akal karena beralih antara basis yang berbeda dalam logaritma hanya mengalikan dengan konstanta. Fungsi logaritmik juga dalam O(n)--yaitu, fungsi logaritmik lebih kecil daripada polinomial apa pun (setidaknya derajat 1).

Diberikan sejumlah fungsi ini, yang terbesar "menang". Begitu n + log njuga Θ(n)karena nistilah tersebut mendominasi log nistilah. Perkalian lebih rumit. Untuk CS, satu-satunya hal yang perlu Anda ketahui nlog nadalah antara ndan n^2.


1
cukup bagus. Per ingatan saya di atas penjelasan adalah sebagai dekat dengan Algoritma Desain Manual klasik karena mendapat
nyamuk

1
@Tikhlon bagus menulis. Jadi +1. Tetapi yang saya terima bahkan lebih baik.
Geek

-2

Tanpa menggunakan banyak matematika, Anda mengambil fungsi f (n) = an + b dan menjatuhkan semua konstanta, sehingga terlihat seperti ini f (n) = n, maka Anda mengambil "n" dengan tingkat tertinggi sebagai jawaban Anda. QED Θ (n)

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.