Temukan siklus negatif dengan kendala titik


11

Diberi grafik dengan tepian berbobot, bagaimana kita bisa menemukan siklus negatif yang mengandung setidaknya satu simpul dalam set simpul yang diberikan ? Terima kasih.{V1,V2,,Vk}


Pertanyaan ini sangat tidak jelas. Bobot pada apa, tepi atau simpul? Apa itu , apakah sebuah simpul atau satu set simpul? V 1{V1,V2,,Vk}V1
Yixin Cao

@YixinCao Terima kasih telah mencatat, diedit: bobot pada tepian, adalah simpul. V1
Tianyi Cui

Jawaban:


8

Jika Anda tidak memerlukan siklus sederhana, maka pecahkan grafik (terarah) menjadi komponen-komponen yang terhubung kuat, dan untuk setiap komponen yang mengandung salah satu dari simpul yang diberikan , periksa apakah komponen tersebut mengandung siklus negatif. Jika tidak ada komponen yang berfungsi, tidak ada siklus negatif yang mengandung V i . Tetapi jika beberapa komponen melakukannya, Anda dapat menemukan siklus negatif (non-sederhana) yang mengandung V i dengan mengambil banyak salinan dari siklus negatif, dan menambahkan ke jalur itu ke dan dari beberapa titik dalam siklus ke V i . (Total waktu untuk menemukan representasi implisit dari siklus yang diinginkan akan sama dengan waktu untuk menemukan siklus negatif dalam grafik yang diarahkan, misalnya O (ViViViVi , jika saya ingat.)O(nm)

Jika Anda memerlukan siklus untuk menjadi sederhana, maka masalahnya menjadi NP-lengkap, bahkan jika hanya satu simpul diberikan. (Anda dapat mengurangi Hamiltonian Path ke masalah: untuk menemukan jalur Hamiltonian dari sumber S yang diberikan ke wastafel T dalam grafik G yang diberikan , berikan bobot tepi yang ada -1, lalu tambahkan simpul buatan V 1 dengan dua tepi dari biaya N / 2 - 0,01 masing-masing, satu dari V 1 ke S dan satu dari T ke V 1. )V1STGV1N/20.01V1STV1

Jika Anda membiarkan siklus untuk mengulang simpul tetapi tidak tepi, saya percaya itu masih NP-lengkap (dengan pengurangan yang sama, tetapi membelah setiap simpul menjadi tepi yang diarahkan ( v , v ) dengan cara standar).v(v,v)


2
Saya suka jawaban ini jauh lebih baik daripada jawaban saya.
David Eppstein

6

Saya akan menganggap input Anda adalah grafik terarah; Saya tidak tahu bagaimana melakukan ini untuk kasus yang tidak diarahkan.

Buat salinan set simpul dari grafik Anda, di mana n adalah jumlah simpul dalam grafik. Ganti setiap tepi dari u ke v dalam grafik asli Anda dengan tepi yang pergi dari copy i dari u untuk menyalin i + 1 dari v , untuk semua pilihan saya . Selain itu, jika Anda milik set simpul yang ditentukan tetapi tidak sebaliknya, sertakan juga tepi dari copy i of u ke copy 0 of v .nnuviui+1viuiu0v

Siklus dalam grafik yang diperluas semua proyek kembali ke siklus dalam grafik asli, tetapi setiap siklus dalam grafik yang diperluas berisi salah satu simpul yang ditentukan (jika tidak, Anda tidak dapat mundur melalui lapisan ekspansi), sehingga grafik asli berisi siklus negatif yang berisi simpul yang ditentukan jika grafik diperluas berisi siklus negatif.


Jika grafik asli memiliki simpul dan m tepi, grafik yang baru dibangun akan memiliki n 2 simpul dan n m tepi. Menemukan siklus negatif di dalamnya akan membutuhkan waktu O ( n 3 m ) , yang tampaknya cukup besar. Saya masih menunggu solusi yang lebih baik, dan terima kasih banyak! nmn2nmO(n3m)
Tianyi Cui

2
Mungkin lebih bermasalah, siklus yang ditemukannya tidak harus sederhana. Apakah Anda memerlukan siklus negatif sederhana?
David Eppstein
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.