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.
algorithms
graphs
graph-theory
singhsumit
sumber
sumber
Jawaban:
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.
sumber
Jika distribusi derajat diberikan sebagai daftar derajat, maka Anda dapat melakukan yang berikut, diberikan simpul dengan derajat :d 1 , . . . , d nn d1,...,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 iKn n vi Kn di vi vi di=0 vij 1≤j≤di
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+...+dn H H M
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 GM M H 1≤i≤n di vi1,...,vidi ui G
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.373 O(n2ω)
sumber