Merekonstruksi pohon dari permintaan pemisah


18

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 nTTxabnn

Apakah ada algoritma untuk masalah di atas?o(n2)

Asumsikan bahwa derajat dari setiap simpul dalam paling banyak 3.T


Apa yang saya tahu

Kasing berdiameter diameter mudah . Jika diameter pohon adalah , maka kita bisa mendapatkan algoritma divide-and-conquer:D

Setiap pohon biner memiliki pemisah yang baik yang membagi pohon menjadi komponen dengan ukuran tidak kurang dari 1 / 3n.

  1. Pilih titik x. Jika itu label pemisah yang baik itu dan berulang.
  2. Temukan semua 3 tetangga x.
  3. 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 )DO(nDlogn)

Sebuah acak algoritmaO(nlog2n) . (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.yxy

Dibutuhkan waktu yang diharapkan untuk menemukan pemisah. Jadi kami mendapatkan algoritma acak .O ( nO(nlogn)O(nlog2n)


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.


7
Tolong ungkapkan apa yang sudah Anda ketahui tentang masalah tersebut, jadi kami tidak membuang waktu kami untuk menemukan kembali roda.
Jeffε

@ Jɛ ff E Saya sudah mengedit pertanyaan saya.
Jagadish

Jawaban:


5

Tidak . Strategi musuh sederhana berikut ini menyiratkan bahwa algoritma apa pun untuk merekonstruksi pohon -node membutuhkan setidaknya kueri "betweenness".n(n12)=n(n1)/2

Beri label secara acak pada node . Musuh menjawab semua pertanyaan seolah-olah pohon itu adalah bintang dengan titik di tengah; anggap sebagai root dan node lainnya sebagai anak-anaknya.0 00,1,2,,n100

Between?(a,x,b)
    if x=0 return TRUE else return FALSE

Sekarang anggaplah algoritma berhenti setelah melakukan kurang dari query. Maka harus ada dua simpul dan , tidak sama dengan nol, sehingga algoritme belum mempertanyakan permutasi rangkap tiga . Jika algoritme mengklaim bahwa pohon tersebut bukan bintang dengan pusat , musuh akan mengungkapkan inputnya, membuktikan bahwa algoritma tersebut salah. Musuh kemudian mengungkapkan bahwa sebenarnya adalah satu-satunya anak , membuktikan algoritma yang salah lagi.y z ( 0 , y , z ) 0 x yn(n1)/2yz(0,y,z)0xy

Pembaruan: Ups, cukup perhatikan batasan derajat. Untungnya, ini bukan rintangan utama. Ganti node dengan pohon biner favorit Anda, dengan node sebagai daun dalam urutan yang tidak diketahui, dan kemudian ungkapkan subtree ini ke algoritma rekonstruksi. Merekonstruksi hasil -node pohon biner masih membutuhkan setidaknya query. Secara ekuivalen, merekonstruksi pohon biner -node membutuhkan setidaknya query. (Saya yakin konstruksi yang lebih halus akan meningkatkan konstanta.)n - 1 ( 2 n - 3 ) n ( n - 1 ) / 2 m ( m + 3 ) ( m + 2 ) / 80n1(2n3)n(n1)/2m(m+3)(m+2)/8 Seperti yang ditunjukkan Jagadish, generalisasi ini tidak berfungsi; pertanyaan tentang node internal di pohon memaksakan pemesanan pada daun, yang mengurangi jumlah permintaan yang diperlukan.


Pertanyaan saya adalah tentang pohon derajat konstan. Argumen ini tidak berfungsi untuk kasus itu, bukan?
Jagadish

2
@ Jagadish: (1) Saya tidak berpikir bahwa bukti batas bawah ini berfungsi untuk algoritma acak. Musuh masih dapat membangun contoh yang gagal, tetapi itu tidak bertentangan dengan hipotesis bahwa algoritma acak bekerja dengan benar dengan probabilitas tinggi. (2) Ngomong-ngomong, Anda menanyakan pertanyaan dengan mengetahui jawabannya. Untuk apa kamu melakukan itu?
Tsuyoshi Ito

2
Saya melihat. Terima kasih atas penjelasannya, dan juga terima kasih untuk mengedit pertanyaannya!
Tsuyoshi Ito

4
Jika Anda memiliki algoritma acak, maka Anda memiliki algoritma. Determinisme berlebihan.
Jeffε

1
O(nlogn)O(nlogn)

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.