Setup saya adalah sesuatu seperti ini: Saya memiliki serangkaian set integer , dengan relatif kecil - pada urutan empat atau lima item untuk semua . Saya ingin memilih urutan dengan masing-masing sedemikian rupa sehingga total variasi (baik atau yaitu atau ) diminimalkan. Sementara sepertinya pilihan untuk masing-masing 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 total? ') 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.
sumber
Jawaban:
Ini adalah program yang dinamis. Asumsikan bahwaCi={Ci1,…,Cim} untuk semua i∈[n] demi kejelasan; berikut ini dapat disesuaikan untuk bekerja jikaCi memiliki kardinalitas yang berbeda. MembiarkanCost(i,j) menjadi biaya minimum dari urutan di atas yang pertama i set, diakhiri dengan Cij . Rekursi berikut menjelaskanCost :
Biaya minimum keseluruhan adalahminmj=1Cost(n,j) ; urutan pilihan yang sebenarnya dapat ditentukan dengan memeriksa argumen di sepanjang jalan. Runtime adalahO(nm) .
sumber
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 sebuahn Grafik -tahap G=(⋃ni=1Vi,E) dimana masing-masing v∈Vi sesuai dengan elemen unik x∈Ci . Untuk setiapu∈Vi,v∈Vi+1 , tambahkan tepi terarah (u,v) biaya menjadi ℓ1 atau ℓ2 jarak.
Sekarang tambahkan sumber simpuls 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 ).
sumber