siklus grafik bercak - penjelasan sederhana

9

bisakah beberapa tolong bantu saya memahami bagaimana menemukan siklus dalam grafik dalam istilah awam?

Saya telah membaca pertanyaan-pertanyaan lain, seperti yang ini dan juga beberapa halaman wikipedia, tetapi mereka tampaknya turun dengan cepat ke dalam jargon matematika.

Saya memiliki model grafik di java, memodelkan node, dan 'in' dan 'out' edge - dan model tahu node hanya terhubung dalam satu arah, ini memungkinkan saya untuk menemukan node daun sebagai titik awal, rencana saya adalah untuk berjalan kembali grafik dari masing-masing node daun ini, untuk setiap "berjalan", menyimpan daftar semua node lain yang saya temukan pada rute saya. Jika saya melihat sesuatu sudah ada dalam daftar kapan saja, saya akan tahu saya telah menemukan siklus dalam grafik. Namun ini terasa agak sederhana.

Saya yakin ini adalah masalah yang diselesaikan, alangkah baiknya jika bisa dijelaskan secara sederhana.

-kartu as

Phatmanace
sumber

Jawaban:

6

Cara paling sederhana yang bisa saya pikirkan untuk menjelaskan siklus grafik bercak dalam istilah awam, adalah sesuatu seperti ini:

  • Pertama, saya berasumsi Anda tahu dasar-dasar apa grafik itu, dan apa simpul dan tepi. Contoh ini mengasumsikan bahwa Anda memiliki grafik di mana semua tepi hanya satu arah.
  • Buat grafik Anda, dan pilih satu simpul sebagai titik awal.
  • Buat objek semacam wadah (daftar atau hash akan bekerja terbaik). Sebut saja "Dikunjungi".
  • Buat objek penampung kedua (antrian akan ideal di sini) dan beri nama "Buka".
  • Tambahkan simpul awal ke daftar Buka.
  • Ulangi sementara daftar Buka tidak kosong:
    • Hapus item pertama dari Open dan sebut itu Current
    • Jika Lancar ada di Dikunjungi, Anda memiliki siklus.
    • Jika tidak, tambahkan Arus ke Dikunjungi, lalu tambahkan semua simpul yang saat ini dapat dijangkau dari tepi keluar ke Terbuka.
  • Jika Open berakhir kosong dan tidak ada siklus yang terdeteksi, maka Anda tidak memiliki siklus. (Setidaknya tidak dalam set yang terjangkau yang berasal dari titik awal, yang belum tentu keseluruhan grafik Anda jika Anda memiliki pulau dalam grafik Anda.)
Mason Wheeler
sumber
0

Pada dasarnya, Anda melakukan pencarian pertama yang luas pada grafik dan melacak node yang Anda kunjungi menggunakan hashmap.

Kapan saja, jika Anda menemukan simpul yang telah dikunjungi (hadir dalam hashmap), maka Anda tahu bahwa ada siklus dalam grafik.

agen13
sumber