Memecahkan Labirin Angka-Pelompat

18

Anak saya yang berusia 8 tahun bosan membuat labirin konvensional, dan telah membuat varian yang terlihat seperti ini:

Jumlah Sampel Hopper

Idenya adalah mulai dari x dan mencapai o melalui aturan normal. Selain itu, Anda dapat "hop" dari setiap bilangan bulat untuk setiap bilangan bulat lainnya b , tetapi Anda harus membayar | a - b | dolar untuk hak istimewa. Tujuannya adalah untuk memecahkan labirin dengan biaya paling murah. Pada contoh di atas, kita bisa beralih dari x ke o melalui x-14-18-27-28-o dengan biaya 5, tetapi lebih murah untuk pergi x-13-11-9-8-29-28-o hanya untuk 4.ab|ab|

Jadi, inilah pertanyaan saya: apa solusi terbaik (dalam hal waktu berjalan asimptotik) yang dapat Anda pikirkan untuk menyelesaikan ini? Anda dapat membuat asumsi yang masuk akal tentang format input.

Catatan: Saya menggunakan tag "puzzle" di sini karena saya memiliki jawaban , tetapi saya tidak yakin itu optimal dan ingin melihat apakah ada orang lain yang dapat meningkatkan solusi saya. (Di sini n adalah jumlah bilangan bulat di labirin.)O(n2)n

Fixee
sumber
7
Alat peraga untuk anak Anda untuk menciptakan teka-teki kreatif dan matematis seperti itu!
bbejot
2
@ bbbot Anda harus melihat beberapa hal yang dia tanyakan kepada saya ... kadang-kadang saya tidak bisa menjawab pertanyaannya. Misalnya, math.stackexchange.com/questions/33094/...
Fixee
1
Saya tidak yakin perhitungan biaya Anda sudah benar. x-14-18-27-28-o harus berharga dan x-13-11-9-8-29-28-o harus berharga 2 + 2 + 1 + 21 + 1 = 27 . 4+9+1=142+2+1+21+1=27
Dave Clarke
1
@ Jangan semua transisi melompat. Kita dapat menulis 'ab' untuk lompatan (yang memiliki biaya ) dan 'a-> b' untuk berjalan dalam grafik dari a ke b (yang memiliki biaya 0 ), yang hanya diperbolehkan jika mereka dapat dijangkau tanpa merusak dinding di labirin. Dalam notasi ini kita memiliki x-> 14-18-> 27-28-> o dan biaya 5 dan x-> 13-11-> 9-8-> 29-28-> o. Saya tipis Fixee tidak memperkenalkan notasi ini karena itu berlebihan: tidak ada alasan untuk melompat dua kali dan dengan demikian melompat dan berjalan di labirin akan bergantian. |ab|0
Artem Kaznatcheev
2
Ini adalah masalah pekerjaan rumah yang luar biasa!
Jeff

Jawaban:

15

O(nlogn)yyyy+yy

Pembaruan ini cukup untuk menjaga tumpukan mengembalikan elemen minimum karena setiap simpul terdekat Anda melompat harus secara numerik tepat di atas atau tepat di bawah simpul yang sudah dikunjungi.

yy+O(nlogn)O(n)O(nlogn)O(nlogn)

Dave
sumber
x1,,xnxo2xi2xi+1xixixi
O(nlgn)y+yO(nlgn)
O(nloglogn)O(n)
4

O(n2)

Tampaknya wajar untuk mengubah ini menjadi masalah jalur terpendek dengan simpul awal khusus (x) dan simpul akhir (0). Akan ada satu simpul lain untuk masing-masing angka. Baik x dan 0 memiliki tepi bobot 0 ke semua node angka yang dapat dijangkau dalam labirin. Semua node angka terhubung dengan bobot 0 (jika jumlahnya dapat dicapai oleh maze) atau dengan perbedaan antara angka (jika tidak dapat dicapai oleh maze).

O(n2)n2O(n2)

bbejot
sumber
O(n2)O(n2lgn)
1
rO(r2)
O(nlogn)O(r2+nlogn)Ω(nlogn)
Ω(n2)