Bagaimana cara mengurangi jumlah garis silang dalam diagram?

10

Saya sedang mengerjakan editor diagram. Diagram menampilkan bentuk 2D ( node ) yang terhubung dengan konektor ( tepi ).

Saya ingin menambahkan operasi yang, diberi pilihan node, "pisahkan" mereka: itu memposisikan mereka untuk mengurangi jumlah tepi yang bersilangan, jika mungkin (dan tidak apa-apa jika ujung-ujungnya harus digambar dengan titik tikungan) .

Jadi saya ingin algoritma grafik yang, diberi embedding ( topologi ) grafik dan subset dari node-nya, memodifikasi embedding ( topologi -nya ) hanya pada node-node itu untuk meminimalkan jumlah crossing edge.

Dari membaca tentang grafik puncak dan menjelajah Cabello dan Mohar (2013) , saya kira masalah ini NP-hard. Jadi saya akan senang dengan algoritma parametrized (misalnya pada jumlah tepi persimpangan) yang memiliki kompleksitas waktu, polinomial, diketahui untuk setiap nilai parameter yang diberikan. Ini tampaknya layak, tetapi saya tidak merasa mudah untuk membuat algoritma sendiri.

Pertanyaan:

  • Di mana saya mencari algoritma seperti itu?
  • Apakah itu ada
  • Dalam perangkat lunak yang ada?
  • Adakah pengalaman praktis yang signifikan dengan operasi semacam itu? (Apa yang tampak baik secara teori mungkin tidak begitu baik dalam praktiknya, atau sebaliknya.)

(Saya tidak yakin di mana sebaiknya menanyakan pertanyaan ini: di sini, di StackOverflow, atau MathOverflow?)

reinierpost
sumber
1
Saya akan berasumsi bahwa pertanyaannya mungkin lebih cocok untuk StackOverflow, tetapi saya perhatikan bahwa pertanyaan serupa di sana memiliki jawaban yang tidak memuaskan. Saya akan menindaklanjuti dengan jawaban yang seharusnya membantu Anda pada akhir teoretis, tetapi mungkin yang terbaik adalah pertanyaan Anda untuk dimigrasi ke sana.
mdxn
Ada banyak pekerjaan mendalam yang dilakukan di sini: complang.tuwien.ac.at/cd/ebner/ebner05da.pdf
Dschoni
Terima kasih! Bukan hanya itu, tetapi jelas merupakan presentasi masalah yang sangat mudah dibaca dan survei dari beberapa pendekatan terkenal.
reinierpost

Jawaban:

9

NP-hard

Masalah yang diajukan dalam pertanyaan sebenarnya lebih sulit dan lebih terlibat daripada yang di atas. Anda sedang mempertimbangkan node grafik dari ukuran dan bentuk tertentu sementara juga membatasi ukuran (area) dari hasil. Selain itu, gagasan estetika yang belum ditentukan diinginkan. Jelas kami ingin heuristik untuk ini, yang tidak menggunakan minimum absolut dalam kasus umum. Jumlah node yang ditemui dalam aplikasi seperti itu kemungkinan tidak besar dalam kasus rata-rata. Menggambar versi persimpangan tepi minimal grafik mungkin layak untuk ukuran kecil.

Sumber daya:
Anda mungkin tertarik pada sumber daya berikut, terutama yang pertama:

Ada banyak sumber daya lain juga. Ini akan membantu Anda memulai.

Pikiran & Pengamatan Tambahan:

Berikut adalah ide untuk menyiasati masalah tentang bentuk dan ukuran node. Mengingat grafik (node ​​sangat kecil), perluas setiap node sambil "mendorong" atau menekuk ujungnya (mis. Menggunakan splines sambil memaksakan batas pada kedekatan). Anda perlu melakukan ini dengan tepi dan simpul lain yang menghalangi, yang dapat memulai reaksi berantai. Lihatlah bagaimana keseimbangan dapat dihitung secara efisien (mis. Struktur molekul). Jika Anda tidak bisa mendapatkan bentuk simpul dengan ukuran yang diinginkan, maka skala seluruh diagram.

Seorang pengguna dapat menikmati hasil dari algoritma acak. Mereka dapat menggunakan fitur Anda beberapa kali hingga mereka mendapatkan sesuatu yang mereka sukai. Hindari perhitungan yang berlebihan dalam hal ini (tidak perlu menghitung nomor persimpangan lagi).

mdxn
sumber
Saya menambahkan topologi pada pertanyaan saya secara khusus untuk menghindari diskusi tentang estetika. Ini penting, tetapi saya tidak berpikir mereka banyak mempengaruhi masalah dasar - saya pikir mereka dapat ditangani dengan langkah yang terpisah, setelah menyesuaikan topologi node (yaitu node yang dikelilingi oleh node yang lain).
reinierpost
Saya pertama kali menggunakan Graphviz lebih dari 15 tahun yang lalu; Saya menggunakannya kira-kira sekali per minggu untuk semua jenis grafik. Saya tidak terlalu terkesan dengan hasilnya, dan saya mengerti sulit melakukan jauh lebih baik.
reinierpost
Saya sering mengunjungi graphviz.org dan saya telah membaca beberapa makalah yang mereka rujuk. Tetapi saya belum menemukan jawaban untuk pertanyaan khusus ini, dan tidak dalam deskripsi pekerjaan saya untuk berkenalan dengan literatur. Itu sebabnya saya bertanya di sini.
reinierpost
Terima kasih atas rujukannya - saya perhatikan ini masih penelitian saat ini .
reinierpost
Hal pertama yang akan saya coba adalah algoritma yang sepele (dan karena itu belum tentu berguna) yang secara kasar didasarkan pada gagasan Ms. Shabbeer. Terima kasih lagi.
reinierpost