Notasi-notasi itu dimaksudkan untuk menunjukkan pertumbuhan asimptotik. Konstanta tidak tumbuh dan karena itu cukup sama dengan konstanta yang Anda pilih. Namun, ada konvensi yang Anda pilih 1 untuk menunjukkan tidak ada pertumbuhan.
Saya berasumsi bahwa ini adalah karena Anda ingin menyederhanakan istilah matematika yang dimaksud. Ketika Anda memiliki faktor konstan, hanya bagi dengan itu dan semua yang tersisa adalah 1. Ini membuat perbandingan lebih mudah.
Contoh:
O (34 * n ^ 2) = O (1 * n ^ 2) = O (n ^ 2)
dan
O (2567.2343 * n ^ 2/5) = O (n ^ 2)
Lihat apa yang saya maksud? Karena istilah matematika ini menjadi semakin rumit, Anda tidak ingin memiliki konstanta yang berisik ketika tidak relevan dengan informasi yang Anda minati. Mengapa saya harus menulis O (2342.4534675767) ketika istilah itu dapat lebih mudah diekspresikan dengan O (1), yang mengkomunikasikan fakta-fakta dari kasus ini dengan jelas.
Lebih jauh, artikel wikipedia tentang kompleksitas waktu juga menyiratkan itu adalah konvensi:
Algoritma dikatakan sebagai waktu konstan (juga ditulis sebagai O (1) waktu) ...
O(5 * n^2)
akan terasa kurang alami, sedangkan menjatuhkan* 1
adalah matematika dasar.Ini semua sangat bergelombang, tetapi ada alasan matematika mengapa kita tidak menggunakan Theta (c) dan sebaliknya menggunakan Theta (1). Saya akan menggunakan notasi O Besar untuk menunjukkan ini.
Ini ada hubungannya dengan properti notasi Big Theta (juga Big O dan Big Omega). Jika Anda memiliki fungsi dengan tingkat pertumbuhan
O(g(x))
dan yang lainnya dengan tingkat pertumbuhan diO(c * g(x))
manac
beberapa konstan, Anda akan mengatakan mereka memiliki tingkat pertumbuhan yang sama. Itu adalahO(c * g(x)) = O(g(x))
Kita dapat mengatakan ini karena definisi notasi O Besar (
f(x) = O(g(x))
) berarti bahwa kita memiliki fungsif(x)
dan fungsig(x)
sedemikian rupa sehingga|f(x)| <= k * |g(x)|
untuk beberapa nilai konstank
dan cukup besarx
. Ketika mengalikan dengan konstantac
, kita akan memiliki:O(c * g(x)) => k * |c * g(x)| = k * |c| * |g(x)| <= k' * g(x)
dimanak' = k * |c|
Perhatikan bahwa
|k' * g(x)| <= k'' g(x)
untuk beberapa nilai konstank''
dan cukup besarx
, yang berartik' * g(x)
tumbuh pada lajuO(g(x))
dan karenanyaO(c * g(x)) = O(g(x))
Ketika
g(x) = 1
, kita memilikiO(1)
pertumbuhan, mengatakanO(c)
pertumbuhan untuk beberapa nilaic
tidak memberi tahu kita apa-apa karena konstanta sudah diperhitungkan dalam definisi notasi O Besar. DisederhanakanO(c) = O(1)
sumber
Ya, tentu saja Anda bisa menulis Theta (c) (atau O (c)) tetapi mengapa itu berbeda dari Theta (n)? n hanyalah variabel yang menunjukkan ukuran input. Anda bisa menulis "Fungsinya adalah Theta (c) di mana c adalah konstanta". Tambahan penting adalah ... di mana c adalah konstanta . Anda harus secara eksplisit menyatakan bahwa pengidentifikasi bukan variabel.
Pertimbangkan teori grafik di mana batas untuk suatu algoritma sering digambarkan sebagai fungsi | V | dan | E |, atau jumlah simpul dan tepi, masing-masing. Maka mungkin lebih bijaksana untuk menyatakan "Fungsinya adalah Theta (| V | * | E | ^ 2)".
Namun Theta (1) selalu konstan - dengan asumsi praktik matematika normal.
sumber
Theta(1) however is always a constant
.Ini adalah bagian yang tidak saya dapatkan.Teta (c) selalu merupakan konstanta juga.Tepat? Jadi saya bertanya-tanya apakah1
memiliki arti khususc
tidak selalu merupakan konstanta, karenac
merupakan variabel jika Anda tidak secara eksplisit menyatakan bahwa itu seharusnya ditafsirkan sebagai konstanta ... Yang merupakan perbedaan halus yang dihindari oleh1
.c
bukan konstanta;c
adalah sebuah surat. Huruf-huruf lain mewakili variabel, bagaimana Anda berharap pembaca mengetahui hal ini tidak baik?Notasi theta adalah tentang pertumbuhan sebagai fungsi dari beberapa variabel - biasanya n. Jika perlu untuk mengklarifikasi variabel mana yang dimaksudkan, cara untuk menulisnya adalah Theta (n ^ 0). Dari sana itu langkah sederhana untuk menerapkan identitas n ^ 0 = 1 (untuk n! = 0).
sumber
n^0
untuk menunjukkan waktu yang konstan dan tidakn^1
dalam contoh Anda?O ( c ) secara khusus berarti bahwa kelas algoritma yang terkait tumbuh secara linier dengan c , di mana c adalah ukuran input ke algoritma atau parameter ke algoritma . Bukan c yang sama yang digunakan untuk menjelaskan notasi-O, karena c itu hanya relevan dengan penjelasan, bukan penggunaannya. O ( c ) berisi c yang berbeda yang harus berasal dari konteks input algoritma.
sumber