Meminimalkan variasi total dari urutan pilihan diskrit

8

Setup saya adalah sesuatu seperti ini: Saya memiliki serangkaian set integer Ci(1in), dengan |Ci| relatif kecil - pada urutan empat atau lima item untuk semua i. Saya ingin memilih urutanxi(1in) dengan masing-masing xiCi sedemikian rupa sehingga total variasi (baik 1 atau 2yaitu i=1n1|xixi+1| atau i=1n1(xixi+1)2) diminimalkan. Sementara sepertinya pilihan untuk masing-masingxi bersifat 'lokal', masalahnya adalah bahwa pilihan dapat menyebar dan memiliki efek non-lokal sehingga masalah tersebut tampaknya bersifat global.

Perhatian utama saya adalah algoritma praktis untuk masalah ini; saat ini saya menggunakan metode anil berdasarkan mutasi singkat, dan sementara mereka seharusnya baik-baik saja sepertinya saya harus dapat melakukan lebih baik. Tapi saya juga tertarik pada kompleksitas abstrak - firasat saya adalah bahwa versi permintaan standar ('apakah ada solusi variasi totalk? ') akan menjadi NP-lengkap melalui pengurangan dari beberapa masalah kendala seperti 3-SAT tapi saya tidak bisa melihat pengurangannya. Petunjuk apa pun untuk studi sebelumnya akan disambut baik - sepertinya masalah alami yang saya tidak percaya itu belum pernah dilihat sebelumnya, tetapi pencarian saya sejauh ini belum menemukan sesuatu yang seperti itu.

Steven Stadnicki
sumber
Pertanyaan bagus! Hanya pertanyaan klarifikasi: panjangxi adalah n, tetapi harus Anda memilih beberapa elemen dari masing-masing Ci? Atau tidak apa-apa untuk memiliki beberapa set dari mana Anda tidak memilih sama sekali?
Juho
@ mrm Harus ada elemen dari masing-masing Ci - itu xs langsung diindeks dari 1n sama seperti Cadalah.
Steven Stadnicki

Jawaban:

4

Ini adalah program yang dinamis. Asumsikan bahwaCi={Ci1,,Cim} untuk semua i[n]demi kejelasan; berikut ini dapat disesuaikan untuk bekerja jikaCimemiliki kardinalitas yang berbeda. MembiarkanCost(i,j) menjadi biaya minimum dari urutan di atas yang pertama i set, diakhiri dengan Cij. Rekursi berikut menjelaskanCost:

Cost(1,j)=0,1jmCost(i,j)=mink=1m(Cost(i1,k)+|C(i1)kCij|) ,2in,1jm.

Biaya minimum keseluruhan adalah minj=1mCost(n,j); urutan pilihan yang sebenarnya dapat ditentukan dengan memeriksa argumen di sepanjang jalan. Runtime adalahO(nm).

tagihan
sumber
Saya mencoba meningkatkan kejelasan jawaban Anda baik dalam format maupun presentasi; tolong periksa bahwa saya tidak mengacaukan segalanya. Alangkah baiknya jika Anda memasukkan argumen mengapa apa yang Anda usulkan adalah benar.
Raphael
Mempertimbangkan jawaban Nicholas , ini mirip dengan algoritma Bellman-Ford, yang disesuaikan dengan masalah yang dihadapi.
Raphael
Kedua jawaban itu benar-benar luar biasa (dan seperti yang dicatat Raphael, sangat mirip), tetapi sementara saya menyukai penerapan yang luas dari yang lain, saya benar-benar lebih suka yang satu ini untuk aplikasi langsung ke pertanyaan khusus saya. Terima kasih!
Steven Stadnicki
4

Tampaknya ini dapat diselesaikan dengan hanya menghitung jalur terpendek dalam grafik asiklik terarah. Alasannya adalah bahwa fungsi tujuan Anda meminimalkan jarak total antara "tetangga" yang dipilih dalam set AndaC={C1,,Cn}.

Bangun sebuah nGrafik -tahap G=(i=1nVi,E) dimana masing-masing vVi sesuai dengan elemen unik xCi. Untuk setiapuVi,vVi+1, tambahkan tepi terarah (u,v) biaya menjadi 1 atau 2 jarak.

Sekarang tambahkan sumber simpul s dengan tepi 0-biaya untuk V1 dan simpul wastafel t dengan tepi 0-biaya dari Vn. Mengingat bahwaG adalah DAG dan kedua fungsi jarak memaksa biaya ujung menjadi non-negatif, Anda dapat menghitung jalur terpendek dalam O(V+E)dengan pengurutan topologi dan pemrograman dinamis (mirip dengan uraian di sini ).

Nicholas Mancuso
sumber