Sumber daya yang saya temukan pada kompleksitas waktu tidak jelas kapan boleh mengabaikan istilah dalam persamaan kompleksitas waktu, khususnya dengan contoh non-polinomial.
Jelas bagi saya bahwa diberi sesuatu dari bentuk n 2 + n + 1, dua istilah terakhir tidak signifikan.
Secara khusus, diberikan dua kategorisasi, 2 n , dan n * (2 n ), apakah urutan kedua sama dengan yang pertama? Apakah n perkalian tambahan itu penting? Biasanya sumber daya hanya mengatakan xn berada dalam eksponensial dan tumbuh jauh lebih cepat ... kemudian beralih.
Saya bisa mengerti mengapa itu tidak akan karena 2 n akan jauh melebihi n, tetapi karena mereka tidak ditambahkan bersama-sama, akan sangat penting ketika membandingkan dua persamaan, pada kenyataannya perbedaan di antara mereka akan selalu menjadi faktor n, yang tampaknya penting untuk sedikitnya.
n! = o((n+1)!)
itu tumbuh sangat lambat tanpa gejala.Jawaban:
Anda harus pergi ke definisi formal dari O besar (
O
) untuk menjawab pertanyaan ini.Definisi adalah
f(x)
milikO(g(x))
jika dan hanya jika ada batas yaitu tidak terbatas. Singkatnya ini berarti bahwa ada konstanta , sehingga nilai tidak pernah lebih besar dari .limsupx → ∞ (f(x)/g(x))
M
f(x)/g(x)
M
Dalam hal pertanyaan Anda, biarkan dan biarkan . Maka adalah yang masih akan tumbuh jauh. Karena itu bukan milik .
f(n) = n ⋅ 2n
g(n) = 2n
f(n)/g(n)
n
f(n)
O(g(n))
sumber
O(f(x)/g(x))
; notifikasi big-O adalah singkatan untuk sekumpulan fungsi, bukan fungsi tunggal yang nilainya dapat Anda batasi. Namun, saya pikir itu benar bahwa Anda dapat menunjukkan bahwaf(x) = O(g(x))
jikalim(x->infinity) f(x)/g(x)
ada.lim sup
alih - alihlim
.x
, bukan untuk semua nilaix
.Cara cepat untuk melihat yang
n⋅2ⁿ
lebih besar adalah dengan membuat perubahan variabel. Marim = 2ⁿ
. Kemudiann⋅2ⁿ = ( log₂m )⋅m
(mengambil basis-2 logaritma di kedua sisim = 2ⁿ
memberin = log₂m
), dan Anda dapat dengan mudah menunjukkan bahwam log₂m
tumbuh lebih cepat daripadam
.sumber
lg
? Logaritma di basis 2?lg
adalah notasi ISO untuk basis-10 logaritma, daripada penggunaan basis-agnostik yang paling umum digunakan ketika membahas waktu lari asimptotik. Lihat en.wikipedia.org/wiki/Logarithm#Particular_basesSaya setuju bahwa
n⋅2ⁿ
tidak ada dalamO(2ⁿ)
, tetapi saya pikir itu harus lebih eksplisit karena batas penggunaan superior tidak selalu berlaku.Dengan definisi formal Big-O:
f(n)
ada diO(g(n))
jika ada konstantac > 0
dann₀ ≥ 0
sedemikian rupa sehingga untuk semua yangn ≥ n₀
kita milikif(n) ≤ c⋅g(n)
. Dapat dengan mudah ditunjukkan bahwa tidak ada konstanta untukf(n) = n⋅2ⁿ
dang(n) = 2ⁿ
. Namun, dapat ditunjukkan bahwag(n)
ada diO(f(n))
.Dengan kata lain,
n⋅2ⁿ
lebih rendah dibatasi oleh2ⁿ
. Ini intuitif. Meskipun keduanya eksponensial dan karenanya sama-sama tidak mungkin digunakan dalam sebagian besar situasi praktis, kita tidak dapat mengatakan bahwa keduanya memiliki urutan yang sama karena2ⁿ
tentu tumbuh lebih lambat daripadan⋅2ⁿ
.sumber
f(n) = 2*2^n
Saya pikir Anda maksudn*2^n
?Saya tidak berdebat dengan jawaban lain yang mengatakan bahwa
n⋅2ⁿ
tumbuh lebih cepat daripada2ⁿ
. Tapin⋅2ⁿ
tumbuh masih eksponensial.Ketika kita berbicara tentang algoritma, kita sering mengatakan bahwa kompleksitas waktu tumbuh adalah eksponensial. Jadi, kami anggap
2ⁿ
,3ⁿ
,eⁿ
,2.000001ⁿ
, atau kamin⋅2ⁿ
menjadi kelompok yang sama kompleksitas dengan eksponensial tumbuh.Untuk memberikan sedikit pengertian matematis, kami menganggap fungsi
f(x)
untuk tumbuh (tidak lebih cepat dari) secara eksponensial jika ada yang konstanc > 1
, yaitu .f(x) = O(cx)
Untuk
n⋅2ⁿ
konstantac
dapat angka lebih besar dari2
, mari kita ambil3
. Kemudian:n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ
dan ini kurang dari1
apa punn
.Jadi
2ⁿ
tumbuh lebih lambat daripadan⋅2ⁿ
, yang terakhir tumbuh lebih lambat daripada2.000001ⁿ
. Namun ketiganya tumbuh secara eksponensial.sumber
Anda bertanya, "Apakah yang kedua dalam urutan yang sama dengan yang pertama? Apakah ada penambahan dan multiplikasi?" Ini adalah dua pertanyaan berbeda dengan dua jawaban berbeda.
n 2 ^ n tumbuh lebih cepat tanpa gejala dari 2 ^ n. Itu pertanyaan yang dijawab.
Tetapi Anda dapat bertanya "apakah algoritma A membutuhkan 2 ^ n nanodetik, dan algoritma B membutuhkan n 2 ^ n nanodetik, apa yang terbesar di mana saya dapat menemukan solusi dalam detik / menit / jam / hari / bulan / tahun? Dan jawabannya adalah n = 29/35/41/46/51/54 vs 25/30/36/40/45/49.Tidak banyak perbedaan dalam praktiknya.
Ukuran masalah terbesar yang dapat diselesaikan dalam waktu T adalah O (ln T) dalam kedua kasus.
sumber