Misalkan adalah pohon derajat konstan yang strukturnya tidak kita ketahui. Masalahnya adalah untuk mengeluarkan pohon dengan menanyakan pertanyaan dari formulir: "Apakah simpul terletak pada jalur dari simpul ke simpul ?". Asumsikan bahwa setiap permintaan dapat dijawab dalam waktu yang konstan oleh oracle. Kita tahu nilai , jumlah simpul di pohon. Tujuannya adalah untuk meminimalkan waktu yang dibutuhkan untuk menghasilkan pohon dalam hal .T x a b n n
Apakah ada algoritma untuk masalah di atas?
Asumsikan bahwa derajat dari setiap simpul dalam paling banyak 3.
Apa yang saya tahu
Kasing berdiameter diameter mudah . Jika diameter pohon adalah , maka kita bisa mendapatkan algoritma divide-and-conquer:
Setiap pohon biner memiliki pemisah yang baik yang membagi pohon menjadi komponen dengan ukuran tidak kurang dari 1 / 3n.
- Pilih titik x. Jika itu label pemisah yang baik itu dan berulang.
- Temukan semua 3 tetangga x.
- Bergerak ke arah tetangga yang memiliki jumlah node terbesar. Ulangi Langkah 2 dengan tetangga.
Karena menemukan separator mengambil paling banyak langkah , kami mendapatkan algoritma .O ( n D log n )
Sebuah acak algoritma . (dipindahkan dari komentar di bawah)
Pilih dua simpul x dan y secara acak. Dengan probabilitas 1/9 mereka akan berbaring di sisi yang berlawanan dari pemisah. Pilih simpul tengah jalur dari ke . Lihat apakah itu pemisah, jika tidak melakukan pencarian biner.y
Dibutuhkan waktu yang diharapkan untuk menemukan pemisah. Jadi kami mendapatkan algoritma acak .O ( n
Latar Belakang. Saya belajar tentang masalah ini dari seorang teman yang bekerja dalam model grafis probabilistik. Masalah di atas kira-kira sama dengan mempelajari struktur pohon persimpangan menggunakan oracle yang, diberikan tiga variabel acak X, Y dan Z, dapat memberi tahu nilai informasi timbal balik antara X dan Y yang diberi nilai Z. Jika nilainya dekat ke nol, kita dapat mengasumsikan bahwa Z terletak pada jalur dari X ke Y.