Merekonstruksi Grafik dari Distribusi Derajat

12

Diberikan distribusi derajat, seberapa cepat kita dapat membuat grafik yang mengikuti distribusi derajat yang diberikan? Sketsa tautan atau algoritme akan bagus. Algoritme harus melaporkan "tidak" jika tidak ada grafik yang dapat dibuat dan salah satu contohnya jika banyak grafik dapat dibuat.

singhsumit
sumber
Selamat datang! Bagaimana "distribusi derajat" diberikan? Sebagai distribusi stokastik, sebagai daftar derajat, ...?
Raphael
1
Lihat Latihan 2.6 di sini . Algoritma untuk membuat grafik dari urutan derajat diberikan.
utdiscant
2
Untuk memperjelas komentar Raphael, ketika saya membaca distribusi gelar , saya memikirkan distribusi probabilistik pada derajat. Seperti menyebutkan utdiscant, urutan derajat mungkin apa yang Anda inginkan. Jika Anda maksud arti probabilistik, Anda mungkin mencari beberapa algoritma konstruksi acak yang mencoba untuk "memperkirakan" distribusi. Tidak masuk akal bagi saya untuk "melaporkan tidak" dalam pengaturan ini, karena saya pikir sebagian besar grafik akan menjadi semacam outlier?
Lucas Cook
Dan jika Anda benar-benar ingin menghasilkan grafik dengan distribusi derajat tertentu, maka makalah ini tampaknya memiliki trik. Sepertinya algoritma yang dijelaskan dalam komentar saya sebelumnya, sebenarnya adalah algoritma Havel-Hakimi dalam jawaban oleh Wu Yin.
utdiscant

Jawaban:

9

Jika yang Anda maksud adalah bagaimana membuat grafik sederhana seperti itu (tidak ada loop sendiri dan tidak ada tepi paralel), mungkin teorema Havel-Hakimi adalah yang Anda cari. Anda dapat google sendiri, dan Gelar halaman wikipedia (teori grafik) juga membantu.

Wu Yin
sumber
Terima kasih. ya halaman wiki sangat membantu dalam hal ini ..
singhsumit
11

Jika distribusi derajat diberikan sebagai daftar derajat, maka Anda dapat melakukan yang berikut, diberikan simpul dengan derajat :d 1 , . . . , d nnd1,...,dn

Buat grafik lengkap pada -vertices. Untuk setiap simpul dalam , pisahkan menjadi salinan. Membagi di sini berarti, membuat sejumlah salinan dengan tepian ke setiap simpul memiliki tepi untuk, tetapi tidak ada tepi ke salinan lain dari . Jika maka cukup hapus simpul. Dalam grafik baru, panggil simpul ini untuk . n v i K n d i v i v i d i = 0 v i j 1 j d iKnnviKndivividi=0vij1jdi

Setelah selesai, Anda memiliki grafik yang sangat padat pada simpul; sebut grafik ini . Pilih algoritma favorit Anda untuk pencocokan maksimum (karena grafik begitu padat, Anda mungkin harus menggunakan salah satu algoritma cepat matriks-perkalian berbasis) dan menjalankannya pada . Ini akan mengembalikan nilai cocok . Jika pencocokan tidak sempurna (yaitu jika tidak mencakup semua simpul) maka distribusi gelar Anda tidak mungkin; jadi kembalikan no . H H MN=d1+...+dnHHM

Jika Anda memiliki cocok dengan sempurna , maka hapus semua tepi bukan dalam dari , dan kemudian untuk setiap menggabungkan banyak simpul menjadi satu titik . Menggabungkan dua simpul berarti menggabungkan mereka menjadi satu, sehingga simpul yang dihasilkan memiliki tepi ke setiap simpul setidaknya satu dari yang asli memiliki tepi. Panggil grafik yang dihasilkan ; ia memiliki distribusi derajat yang diinginkan.M H 1 i n d i v i 1 , . . . , v i d i u i GMMH1indivi1,...,vidiuiG

Runtime yang dihasilkan adalah mana adalah konstanta untuk algoritma penggandaan-matriks tercepat (yang pada saat penulisan adalah sekitar ). Dalam hal jumlah simpul dalam grafik yang dihasilkan, dalam kasus terburuk distribusi derajat menjadi padat, kita memiliki .ω 2.373 O ( n 2 ω )O(Nω)ω2.373O(n2ω)

Artem Kaznatcheev
sumber
Dari penjelasan Anda (cukup jelas), sama sekali tidak jelas mengapa perkalian matriks memasuki persamaan.
Raphael
2
Multiplikasi matriks @Raphael adalah salah satu cara untuk menyelesaikan pencocokan maksimum dan ini adalah metode yang disukai untuk grafik padat, karena versi terbaik dari algoritma pencocokan Edmonds berjalan di yang akan memberikan untuk masalah ini, karena cukup padat. Jadi jika Anda memiliki akses ke perkalian matriks cepat yang baik (atau bekerja dengan bahasa yang berorientasi matriks seperti Matlab) saya akan menggunakan pendekatan matriks Mucha dan Sankowski untuk mencocokkan. O(N2.5)HO(|V||E|)O(N2.5)H
Artem Kaznatcheev