Saya percaya saya memiliki pemahaman yang masuk akal tentang kompleksitas seperti , dan .
Dalam hal daftar, adalah pencarian konstan, jadi hanya mendapatkan kepala daftar. adalah tempat saya menelusuri seluruh daftar, dan berjalan daftar sekali untuk setiap elemen dalam daftar.
Apakah ada cara intuitif yang serupa untuk memahami selain dari hanya mengetahuinya terletak di antara dan ?
Jawaban:
Kompleksitas biasanya terhubung dengan subdivisi. Saat menggunakan daftar sebagai contoh, bayangkan daftar yang elemennya diurutkan. Anda dapat mencari di daftar ini dalam waktu - Anda sebenarnya tidak perlu melihat setiap elemen karena sifat daftar yang diurutkan.O ( log n )Θ(logn) O(logn)
Jika Anda melihat elemen di tengah daftar dan membandingkannya dengan elemen yang Anda cari, Anda dapat langsung mengatakan apakah itu terletak di bagian kiri atau kanan array. Kemudian Anda bisa mengambil setengah ini dan ulangi prosedur sampai Anda menemukannya atau mencapai daftar dengan 1 item yang Anda bandingkan dengan mudah.
Anda dapat melihat bahwa daftar secara efektif membagi dua langkah. Itu berarti jika Anda mendapatkan daftar panjang , langkah maksimum yang Anda butuhkan untuk mencapai daftar satu item adalah . Jika Anda memiliki daftar item, Anda hanya perlu langkah, untuk daftar Anda hanya perlu langkah dll.5 128 = 2 7 7 1024 = 2 10 1032 5 128=27 7 1024=210 10
Seperti yang Anda lihat, eksponen dalam selalu menunjukkan jumlah langkah yang diperlukan. Logaritma digunakan untuk "mengekstrak" persis angka eksponen ini, misalnya . Ini juga menggeneralisasi untuk membuat daftar panjang yang bukan kekuatan dua panjang.2 n log 2 2 10 = 10n 2n log2210=10
sumber
O(log n)
jika daftar memiliki akses acak waktu konstan. Pada implementasi daftar yang lebih umum (daftar tertaut) ini adalahO(n log n)
Dalam hal pohon (seimbang) (katakanlah, pohon biner, jadi semua adalah basis 2):log
sumber
Agar dimungkinkan, Anda harus dapat mengurangi ukuran masalah secara proporsional dengan jumlah sewenang-wenang sehubungan dengan dengan operasi waktu yang konstan.nO(logn) n
Misalnya, dalam kasus pencarian biner, Anda dapat mengurangi ukuran masalahnya hingga setengah dengan setiap operasi perbandingan.
Sekarang, apakah Anda harus mengurangi ukuran masalah menjadi setengahnya, sebenarnya tidak. Algoritma adalah bahkan jika itu dapat mengurangi ruang pencarian masalah sebesar 0,0001%, selama persentase dan operasi yang digunakan untuk mengurangi ukuran masalah tetap konstan, itu adalah algoritma, itu tidak akan menjadi algoritma yang cepat, tetapi masih O ( log n ) dengan konstanta yang sangat besar. (Dengan asumsi kita berbicara tentang log n dengan log basis 2)O ( log n )O(logn) O(logn) O(logn) logn
sumber
Pikirkan tentang algoritma untuk mengkonversi angka desimal ke binern
while
Loop ini menjalankan kali.sumber
Ya, adalah antara dan , tetapi lebih dekat ke dari . Apa itu ? Fungsi log adalah fungsi terbalik dari eksponen. Mari saya mulai dengan eksponen dan Anda harus mendapatkan ide yang lebih baik tentang apa itu logaritma.1 n 1 n log ( n )log(n) 1 n 1 n log(n)
Pertimbangkan dua angka, dan . adalah dikalikan dengan dirinya sendiri kali. Anda dapat dengan usaha menghitung angka, tetapi dapatkah Anda menghitung ? Saya yakin Anda tidak bisa. Mengapa? adalah jumlah yang begitu besar sehingga lebih besar dari jumlah semua atom di alam semesta. Renungkan itu sejenak. Ini adalah jumlah yang sangat besar, yang memungkinkan Anda untuk memberikan setiap atom nama (nomor). Dan jumlah atom di kuku jari Anda mungkin sekitar miliaran. seharusnya cukup untuk siapa pun (pun intended :)).2 100 2 100 2 100 100 2 100 2 100 2 100100 2100 2100 2 100 100 2100 2100 2100
Sekarang, di antara dua angka, dan , adalah logaritma (dalam basis ). relatif kecil dari . Siapa pun harus memiliki item berbeda di rumah mereka. Tapi, cukup baik untuk alam semesta. Pikirkan home vs universe saat memikirkan dan .2 100 100 2 100 2 100 2 100 100 2 100 log ( n ) n100 2100 100 2100 2 100 2100 100 2100 log(n) n
Dari mana eksponen dan logaritma berasal? Mengapa mereka begitu tertarik pada ilmu komputer? Anda mungkin tidak memperhatikan, tetapi eksponasi ada di mana-mana. Apakah Anda membayar bunga dengan kartu kredit? Anda baru saja membayar sebuah semesta untuk rumah Anda (Tidak terlalu buruk, tetapi kurvanya pas). Saya suka berpikir bahwa eksponen berasal dari aturan produk, tetapi yang lain dipersilakan untuk memberikan lebih banyak contoh. Apa aturan produk, Anda mungkin bertanya; Dan saya akan menjawab.
Katakanlah Anda memiliki dua kota dan , dan ada dua cara untuk pergi di antara mereka. Berapa jumlah jalur di antara mereka? Dua. Itu sepele. Sekarang katakanlah, ada kota lain , dan Anda dapat pergi dari ke dengan tiga cara. Berapa banyak jalur yang ada antara dan sekarang? Enam, kan? Bagaimana cara kamu mendapatkan itu? Apakah Anda menghitungnya? Atau apakah Anda melipatgandakannya? Bagaimanapun, mudah untuk melihat bahwa kedua cara memberikan hasil yang serupa. Sekarang jika Anda menambahkan kota yang dapat dicapai dari dalam empat cara, berapa banyak cara yang ada antara danB C B C A C D C A D 2 ⋅ 3 ⋅ 4 24 2 10 1024 2 10 10 10 2 10 10 1024A B C B C A C D C A D ? Hitung jika Anda tidak mempercayai saya, tetapi itu sama dengan yaitu . Sekarang, jika ada sepuluh kota dan ada dua jalur dari satu kota ke kota lain, dan mereka diatur seperti mereka berada di garis lurus. Berapa banyak jalur yang ada dari awal hingga akhir? Lipat gandakan jika Anda tidak mempercayai saya, tetapi saya akan memberi tahu Anda ada , yaitu . Lihat bahwa adalah hasil eksponensial dari , dan adalah logaritma dari . adalah jumlah kecil dibandingkan dengan .2⋅3⋅4 24 210 1024 210 10 10 210 10 1024
Fungsi logaritma adalah untuk apa adalah (perhatikan bahwa adalah basis logaritma). Jika Anda mengalikan dengan dirinya sendiri kali (perhatikan bahwa adalah basis logaritma) Anda mendapatkan . sangat kecil, sangat kecil dibandingkan dengan , bahwa itu adalah ukuran rumah Anda di mana adalah ukuran alam semesta.n n 2 n 2 log b ( n ) b b n log ( n ) n nlog2(n) n n 2n 2 logb(n) b b n log(n) n n
sumber
Itu masih didasarkan pada ukuran daftar, tetapi Anda hanya perlu mengunjungi sebagian kecil elemen.
sumber
The pencarian biner algoritma adalah contoh klasik.
sumber
Intuisi adalah berapa kali Anda dapat membagi dua angka, katakan n, sebelum dikurangi menjadi 1 adalah O (lg n).
Untuk memvisualisasikan, cobalah menggambarnya sebagai pohon biner dan hitung jumlah level dengan menyelesaikan perkembangan geometrik ini.
sumber