Contoh penting dari ide akar kuadrat dalam analisis kompleksitas


15

Ada sejumlah algoritma dan struktur data yang mengeksploitasi gagasan bahwa mendapatkan nilai minimumnya di k = \ sqrt n . Contoh umum termasukmax{k,n/k}k=n

  • algoritma langkah-langkah raksasa-langkah untuk menghitung logaritma diskrit di O(n) ,
  • penghitungan rentang orthogonal 2D statis dalam waktu O(n) dan memori O(n) ,
  • antrian prioritas dengan EXTRACT-MIN di O(nk) dan DECREASE-KEY di O(1) ,
  • mewarnai grafik 3 warna dengan O(n) 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.


Maaf jika pertanyaannya agak kabur; jangan ragu untuk meningkatkan.
Dmytro Korduban

Haruskah ini CW?
Suresh Venkat

2
@ Suresh: Jika aturan "daftar besar ⇒ CW" masih berlaku, maka ya, itu haruslah CW.
Tsuyoshi Ito


ini adalah trik dasar di seluruh algoritme terbaru untuk model pengurangan peta
Sasho Nikolov

Jawaban:


10

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]

  • nKey[1..n] menyimpan satu set angka dalam urutan acak ;n
  • Jika adalah angka terbesar di set, maka adalah angka terkecil di set; jika tidak, adalah angka terkecil dalam himpunan yang lebih besar dari .K e y [ N e x t [ i ] ] K e y [ N e x t [ i ] ] K e y [ i ]Key[i]Key[Next[i]]Key[Next[i]]Key[i]

Kemudian kita dapat menemukan penerus dari angka diberikan dalam waktu yang diharapkan sebagai berikut:O ( xO(n)

  • Pilih sampel acak elemen dari array . Biarkan menjadi sampel terbesar yang lebih kecil dari (atau sampel terbesar, jika semua sampel lebih besar dari ).nKeyKey[j]xx

  • Ikuti pointer dari sampai kita melihat lebih banyak dari atau sama dengan (setelah membungkus sekitar jika semua sampel yang lebih besar dari ).NextKey[j]xx

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)


10

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)mO(m3/2)nkknkkm/k+k dan memilih tradeoff yang tepat memberikan batas keseluruhan pada iterasi dan tepat waktu.O(m)O(m3/2)

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.