Ada sejumlah algoritma dan struktur data yang mengeksploitasi gagasan bahwa mendapatkan nilai minimumnya di k = \ sqrt n . Contoh umum termasuk
- algoritma langkah-langkah raksasa-langkah untuk menghitung logaritma diskrit di ,
- penghitungan rentang orthogonal 2D statis dalam waktu dan memori ,
- antrian prioritas dengan EXTRACT-MIN di dan DECREASE-KEY di ,
- mewarnai grafik 3 warna dengan warna dalam waktu polinomial,
hanya untuk beberapa nama.
Meskipun algoritme seperti itu seringkali suboptimal, mereka mudah dipahami oleh siswa dan bagus untuk dengan cepat menunjukkan bahwa batas naif tidak optimal. Juga, struktur data ide-akar kuadrat kadang-kadang lebih praktis daripada rekan-rekan berbasis pohon biner karena keramahan cache (tidak mempertimbangkan teknik cache-lupa). Itu sebabnya saya memberikan sedikit perhatian pada topik ini saat mengajar.
Saya tertarik pada contoh yang lebih khas dari jenis ini. Jadi saya mencari algoritma, struktur data, protokol komunikasi dll yang disukai (lebih elegan) yang analisisnya bergantung pada ide akar kuadrat. Asimptotiknya tidak perlu optimal.
sumber
Jawaban:
Makalah Chazelle, Liu, dan Magen Sublinear Geometric Algorithms (STOC 2003, SICOMP 2006) memiliki beberapa aplikasi pintar dari trik pengambilan sampel acak berikut. Variasi dari trik yang sama sebelumnya digunakan oleh Gärtner dan Welzl [ DCG 2001 ], yang mengutip edisi pertama CLR (1990).
Misalkan kita diberi daftar nomor yang ditautkan melingkar, yang disimpan dalam blok memori yang berdekatan. Yaitu, kami memiliki dua array dan , di manaN e x t [ 1 .. n ]Key[1..n] Next[1..n]
Kemudian kita dapat menemukan penerus dari angka diberikan dalam waktu yang diharapkan sebagai berikut:O ( √x O(n−−√)
Pilih sampel acak elemen dari array . Biarkan menjadi sampel terbesar yang lebih kecil dari (atau sampel terbesar, jika semua sampel lebih besar dari ).n−−√ Key Key[j] x x
Ikuti pointer dari sampai kita melihat lebih banyak dari atau sama dengan (setelah membungkus sekitar jika semua sampel yang lebih besar dari ).Next Key[j] x x
Penerapan lemma Yao yang relatif sederhana menyiratkan bahwa batas waktu yang diharapkan optimal. Algoritma deterministik apa pun untuk masalah ini membutuhkan waktu dalam kasus terburuk.O(n−−√) Ω(n)
sumber
Ada segitiga dalam grafik -edge dan bahwa mereka dapat ditemukan dalam waktu . Ada banyak cara untuk melakukan ini tetapi saya pikir salah satu yang paling awal adalah Itai dan Rodeh (STOC 1977) yang menyediakan algoritma yang melewati urutan iterasi linear-waktu, yang masing-masing menghilangkan hutan spanning dari grafik. Pada iterasi awal ketika hutan yang tersisa memiliki setidaknya komponen , algoritma menghilangkan setidaknya tepi per langkah, dan pada iterasi akhir ketika memiliki paling banyak komponen , tingkat maksimum adalah dan menyusut dengan setidaknya satu di setiap langkah. Jadi jumlah total iterasi paling banyakO(m3/2) m O(m3/2) n−k k n−k k m/k+k dan memilih tradeoff yang tepat memberikan batas keseluruhan pada iterasi dan tepat waktu.O(m−−√) O(m3/2)
sumber