Apakah nol diizinkan sebagai bobot tepi, dalam grafik berbobot?

60

Saya mencoba menulis skrip yang menghasilkan grafik acak dan saya perlu tahu apakah suatu sisi dalam grafik berbobot dapat memiliki nilai 0.

sebenarnya masuk akal bahwa 0 dapat digunakan sebagai bobot tepi, tetapi saya telah bekerja dengan grafik dalam beberapa hari terakhir dan saya belum pernah melihat contohnya.

masukkan deskripsi gambar di sini

Taxellool
sumber
28
Jika nilai negatif "diizinkan", lalu mengapa tidak nol? :)
Derek 朕 會 功夫
5
Sama seperti contoh cepat, jika bobot positif mewakili konsumsi bahan bakar bersih saat bepergian dari satu simpul ke simpul lainnya, maka bobot negatif dapat mewakili pengisian bahan bakar bersih. Tepi berbobot nol adalah tempat bahan bakar yang dikeluarkan dikompensasi secara tepat dengan mengisi bahan bakar.
JW
1
@ DavidRicherby Saya percaya pertanyaan sebenarnya di sini adalah misalnya, "apakah algoritma X benar di hadapan bobot nol tepi". Kalau tidak, apa konteksnya? Jawabannya bisa ya atau tidak, tergantung pada detailnya. Sebuah pertanyaan seperti "dapat sebuah array berisi angka nol" sama berartinya.
Juho
1
@ Juho: Oh tidak apa-apa. Ini seperti menanyakan apakah suatu angka bisa negatif. Bagi Anda tampaknya jelas bahwa itu tergantung pada konteksnya, tetapi jelas tidak jelas bagi orang-orang sampai angka negatif muncul. Bahkan nol pun tidak jelas.
Mehrdad
1
Bergantung pada apa yang ingin Anda lakukan, bobot Anda mungkin bukan bilangan real. Misalnya, jika grafik Anda mewakili sirkuit AC, bobot Anda mungkin fasor, dan itu adalah bilangan kompleks.
user2357112

Jawaban:

165

Diizinkan oleh siapa ? Tidak ada Administrasi Grafik Pusat yang memutuskan apa yang Anda bisa dan tidak bisa lakukan. Anda dapat mendefinisikan objek dengan cara apa pun yang nyaman bagi Anda, selama Anda jelas tentang apa definisi itu. Jika ujung tanpa bobot berguna bagi Anda, maka gunakanlah; pastikan pembaca Anda tahu itu yang Anda lakukan.

Alasan mengapa Anda biasanya tidak melihat tepi nol-bobot adalah bahwa, dalam sebagian besar konteks, tepi dengan bobot nol persis sama dengan tidak adanya tepi. Misalnya, jika grafik Anda mewakili negara dan jumlah perdagangan yang dilakukan di antara mereka, keunggulan nol-bobot berarti tidak ada perdagangan, yang sama dengan tidak memiliki keunggulan sama sekali. Jika grafik Anda mewakili jarak, tepi nol-bobot akan sesuai dengan dua tempat pada jarak nol dari satu sama lain, yang berarti mereka benar-benar berada di tempat yang sama, jadi keduanya harus diwakili oleh titik yang sama. Namun, dalam konteks lain, tepi nol-berat bisa masuk akal. Misalnya, jika grafik Anda mewakili jaringan jalan dan bobot tepi mewakili jumlah lalu lintas, ada perbedaan besar antara jalan yang tidak digunakan siapa pun (tepi nol-bobot) dan tidak ada jalan sama sekali (tidak ada tepi).

David Richerby
sumber
1
Perlu dicatat bahwa banyak algoritma grafik secara eksplisit menentukan apakah mereka bekerja pada grafik dengan bobot negatif atau tidak. Saya pikir ini mengklarifikasi bahwa bahkan bobot negatif diperbolehkan, tergantung pada konteksnya.
Mooing Duck
6
@ MoingDuck Saya pikir inti dari pertanyaannya adalah, walaupun algoritma memang sering mengatakan apakah mereka bekerja untuk bobot negatif, bobot nol jarang disebutkan. Bobot negatif jauh lebih tidak biasa daripada nol sehingga, dalam konteks khusus ini, saya tidak yakin mereka perlu disebutkan.
David Richerby
13

Itu tergantung pada konteksnya. Secara umum ya, tepi nol dan bahkan bobot negatif mungkin diperbolehkan. Dalam beberapa kasus tertentu bobot ujung mungkin diperlukan untuk menjadi non-negatif atau benar-benar positif (misalnya, algoritma Dijkstra mengharuskan bobot menjadi non-negatif).

Tom van der Zanden
sumber
Apakah ada jenis grafik tertentu yang melarang nol? dan memungkinkan nilai negatif atau positif?
Taxellool
9
+ Msgstr "Grafik berbobot tepi bukan nol".
Tom van der Zanden
10
@ Tipellool Objek matematika tidak diatur dalam batu. Tidak ada daftar objek matematika dengan nama tetap yang merupakan satu-satunya yang diizinkan untuk Anda gunakan.
David Richerby
Tergantung pada algoritma yang Anda gunakan. Bellman-Ford menerima nol, sementara di Dijkstra mereka dihilangkan
Manuel Azar
5

Seperti yang dicatat oleh jawaban lain, Anda bebas untuk mempertimbangkan (atau mengecualikan dari pertimbangan) grafik berbobot dengan tepi nol-bobot.

Yang mengatakan, dalam pengalaman saya, konvensi yang biasa di sebagian besar aplikasi grafik tertimbang adalah untuk tidak membuat perbedaan antara tepi nol-berat dan tidak adanya tepi. Salah satu alasannya adalah bahwa, biasanya, grafik berbobot muncul sebagai generalisasi multigraf , yang pada gilirannya adalah generalisasi dari grafik sederhana.

Secara khusus, multigraf adalah grafik yang (tidak seperti grafik sederhana ) memungkinkan banyak sisi antara pasangan node yang sama. Sedangkan, dalam grafik sederhana, setiap pasangan node selalu terhubung dengan 0 atau 1 tepi, sepasang node dalam multigraph dapat dihubungkan oleh 0, 1, 2, 3 atau lebih (tetapi selalu bilangan bulat non-negatif dari ) tepi.

Generalisasi multigraf untuk memungkinkan jumlah fraksional tepi antara sepasang node kemudian secara alami mengarahkan seseorang untuk mempertimbangkan grafik berbobot, dan banyak algoritma yang bekerja pada multigraf sewenang-wenang juga dapat dibuat untuk bekerja pada grafik tertimbang tersebut. Tetapi untuk algoritma seperti itu, "bobot" dari suatu tepi benar-benar menunjukkan keberagamannya . Jadi, mengingat interpretasi ini, tidak ada perbedaan yang berarti antara "no edge" dan "0 edge" antara sepasang node: keduanya berarti hal yang persis sama.

Tentu saja, "grafik berbobot" menurut definisi sebenarnya hanyalah grafik dengan angka yang terkait dengan masing-masing sisi, dan sangat mungkin untuk menafsirkan bobot sebagai sesuatu selain dari multiplisitas, dalam hal ini perbedaan antara tidak ada tepi dan bobot nol. edge mungkin memang bermakna. Tetapi mencoba menerapkan algoritma multigraf standar untuk "grafik berbobot aneh" seperti itu tidak mungkin menghasilkan hasil yang masuk akal dalam hal interpretasi alternatif (non-multiplisitas) dari bobot tepi.

Ilmari Karonen
sumber
6
Bagaimana grafik tertimbang muncul "biasanya" sangat tergantung pada bidang Anda. Ketika saya memodelkan jaringan jalan sebagai grafik untuk menemukan jalur terpendek, bobot mewakili jarak, saya tidak memulai dengan beberapa jalan di antara persimpangan dan kemudian memperkenalkan jalan fraksional.
adrianN
3
@adrianN Meskipun dalam grafik seperti itu tidak adanya tepi sesuai dengan nilai terkait yang tak terbatas dan bukan nol.
CodesInChaos
0

Pikirkan grafik sistem jalan di Cambridge UK, catatan dibagi antara pengendara sepeda dan pengemudi mobil, demikian juga sebagian besar tepi. Melakukannya sangat mengurangi biaya pemeliharaan data.

Sekarang jika kita mendefinisikan bobot tepi sebagai waktu tempuh dalam hitungan detik, dengan bersih setiap tepian akan memiliki dua bobot, satu untuk mobil anter untuk sepeda. Beberapa bobot akan menjadi tak terbatas karena mobil tidak diizinkan pada jalur sepeda.

Sekarang perhatikan dua persimpangan jalan yang sangat dekat satu sama lain sehingga dekat mereka hanya bergerigi oleh beberapa pos yang menghentikan pengemudi mobil. (Misalnya persimpangan jalan, di mana drive mobil hanya bisa belok kiri, tetapi pengendara sepeda bisa pergi ke segala arah.) Kami kemudian mendapatkan beberapa tepi dengan bobot tak terbatas dari pengemudi mobil dan 0 berat untuk pengendara sepeda.

(Jelas grafik kemudian dapat diproses terlebih dahulu untuk membuat grafik yang lebih sederhana untuk perutean pengendara sepeda, sebelum mengerjakan rute terbaik.)

Ian Ringrose
sumber
Saya tidak melihat bagaimana ini menjawab pertanyaan. Pertanyaannya bertanya tentang tepi dengan bobot nol. Dalam contoh Anda (yang, omong-omong, mungkin tidak masuk akal bagi orang-orang yang tidak terbiasa dengan Cambridge), setiap sisi sudah memiliki dua bobot. Sekarang, sejauh Anda dapat menentukan grafik berbobot sesuai keinginan Anda, itu baik-baik saja, tetapi sepertinya tidak menjawab pertanyaan yang diajukan. Juga, tepi yang Anda gambarkan semuanya tampaknya memiliki setidaknya bobot yang sangat kecil untuk pengendara sepeda: bahkan memindahkan jarak pendek membutuhkan jumlah waktu yang tidak nol.
David Richerby
@ DavidRicherby, anggap saja waktu kurang dari 1 detik tidak direkam.
Ian Ringrose
0

Sepertinya Anda menggunakan bobot untuk mencoba dan mewakili dua aspek grafik yang berbeda. Yang pertama adalah apakah grafik benar-benar memiliki sisi yang dapat digambarkan (ditarik), dan yang kedua adalah bobot aktualnya.

Seperti yang telah Anda perhatikan, Anda jatuh ke dalam situasi yang membingungkan jika Anda telah menggunakan 'non-nol' sebagai indikator bahwa ada tepi (dan perlu ditarik, atau terdaftar), sementara pada saat yang sama sekarang telah menemukan situasi di mana nol bobot diklasifikasikan sebagai valid.

Pada dasarnya Anda akan memerlukan cara lain untuk mewakili keberadaan tepi (dengan asumsi Anda benar-benar membutuhkannya, dan tidak bisa hanya membuat array bobot N ^ 2, tetapi kemudian Anda jatuh ke dalam perangkap karena harus memutuskan apa yang harus dilakukan tentang loop tepi belakang ...)

Philip Oakley
sumber
Saya tidak yakin ini benar-benar menjawab pertanyaan. Pertanyaannya adalah apakah grafik memiliki tepi nol-berat; jawaban Anda sebagian besar tentang bagaimana seseorang dapat menerapkan struktur data untuk grafik dengan tepi nol-bobot.
David Richerby
@ DavidRicherby, Tutup; Itu (jawaban saya) lebih tentang mengapa dan bagaimana pertanyaan itu muncul (atau mungkin muncul) - Masalah XYProplem. Sering kali dapat merasionalisasi tentang mengapa itu merupakan masalah pertama-tama dapat sangat membantu dalam melihat bagaimana solusi itu merupakan jawaban yang tepat dan bukan hanya beberapa 'fudge'
Philip Oakley