Misalkan saya memiliki grafik asiklik terarah dengan bobot bilangan real pada simpulnya. Saya ingin menemukan pemesanan topologi DAG di mana, untuk setiap awalan pemesanan topologis, jumlah bobot adalah non-negatif. Atau jika Anda lebih suka terminologi teoretis pesanan, saya memiliki urutan parsial tertimbang dan saya ingin ekstensi linier sehingga setiap awalan memiliki bobot non-negatif. Apa yang diketahui tentang masalah ini? Apakah NP-lengkap atau dipecahkan dalam waktu polinomial?
ds.algorithms
directed-acyclic-graph
partial-order
David Eppstein
sumber
sumber
Jawaban:
Masalah ini tampaknya sangat mirip dengan SEQUENCING TO MINIMIZE BIAYA KUMULATIF MAKSIMUM, masalah [SS7] di Garey & Johnson . Yakni:
sumber
Nah, jawaban saya adalah pertanyaan saya dari mana ternyata jika Anda bisa menyelesaikan masalah ini di P, Anda juga bisa memecahkan masalah terbuka lainnya: Urutan topologis positif, ambil 3
Sunting: Masalah ini juga ternyata merupakan NP-complete, jadi masalah Anda sudah NP-complete jika DAG Anda hanya memiliki dua level, yaitu jika tidak ada jalur yang diarahkan dengan dua tepi.
sumber
Jika saya memahami masalah dengan benar, saya pikir bahwa prioritas masalah mesin penjadwalan dibatasi untuk meminimalkan jumlah waktu penyelesaian tertimbang (1 | prec | \ sum wc) dapat dikurangi menjadi masalah yang Anda minati. Dalam masalah 1 | prec | \ sum wc kami memiliki n pekerjaan, masing-masing dengan bobot non-negatif dan waktu pemrosesan, poset pada pekerjaan dan kami ingin perpanjangan linier pekerjaan sehingga jumlah tertimbang waktu penyelesaian pekerjaan adalah diminimalkan. Masalahnya adalah NP-lengkap meskipun kami mengasumsikan bahwa waktu pemrosesan setiap pekerjaan sama dengan 1. Apakah masuk akal?
sumber
Bagaimana jika kita selalu mengambil elemen maksimal (dalam urutan parsial) dengan bobot paling sedikit. Setelah kami menghabiskan elemen, kami mengembalikannya dalam urutan terbalik sebagai output.
sumber
Masalah ini mengingatkan saya pada banyak pohon keputusan. Saya akan mempertimbangkan jenis solusi ini, yang mencoba untuk selalu memilih jalan yang paling menjanjikan, tetapi dengan melihat keseluruhan subgraph:
Mulai dari node sink, bekerja menuju sumber, satu tingkat pada satu waktu. Saat Anda melakukan ini, beri bobot pada setiap sisi. Bobot ini harus mewakili jumlah minimum yang harus Anda "bayar" atau Anda akan "mendapatkan" dengan melintasi subgraph mulai dari titik titik simpul ke. Misalkan kita berada pada level i + 1 dan kita bergerak ke level i. Inilah yang akan saya lakukan untuk menetapkan bobot untuk ujung yang menunjuk ke simpul level i:
Kemudian, buat pesanan sebagai berikut:
Idenya adalah untuk melintasi subgraph yang akan memberi keuntungan sebanyak mungkin terlebih dahulu, agar dapat menanggung biaya subgraph bobot negatif nanti.
sumber