Kompleksitas waktu dalam menemukan diameter grafik

27

Berapa kompleksitas waktu untuk menemukan diameter grafik ?G=(V,E)

  • O(|V|2)
  • O(|V|2+|V||E|)
  • O(|V|2|E|)
  • O(|V||E|2)

Diameter grafik adalah maksimum himpunan jarak jalur terpendek antara semua pasangan simpul dalam grafik.G

Saya tidak tahu harus berbuat apa, saya perlu analisis lengkap tentang bagaimana menyelesaikan masalah seperti ini.

Gigili
sumber
4
Tolong jelaskan sedikit. Mengapa masalah ini menarik bagi Anda? Apakah Anda memerlukan petunjuk, analisis lengkap atau referensi? Apakah Anda tertarik dengan waktu terburuk atau rata-rata? Apakah diarahkan? G
Raphael
@ Raphael: Jelas saya tidak butuh petunjuk, saya perlu analisis lengkap. Saya tetap mengedit pertanyaan saya.
Gigili
1
@Gigili Maksudmu dalam semua kasus, kan? Kalau tidak, semua digolongkan oleh kemungkinan terakhir (yang pada grafik umum sama dengan ) yang menjadikannya jawaban yang benar, dengan asumsi setidaknya satu jawaban seharusnya benar. Kekhawatiran tambahan adalah bahwa dalam grafik dengan siklus, tidak ada jalur terpanjang. Apa yang dimaksud dengan "jarak terpanjang"? O ( | V | 5 )ΘO(|V|5)
Raphael
@Gigili Dari mana empat pilihan itu berasal?
uli

Jawaban:

5

Memperbarui:

Solusi ini tidak benar.

Solusinya sayangnya hanya benar (dan langsung) untuk pohon! Menemukan diameter pohon bahkan tidak memerlukan ini. Berikut adalah contoh tandingan untuk grafik (diameter 4, algoritma mengembalikan 3 jika Anda memilih ini ):v

masukkan deskripsi gambar di sini


Jika grafik diarahkan ini agak rumit, berikut adalah beberapa kertas yang mengklaim hasil lebih cepat dalam kasus padat daripada menggunakan algoritma untuk semua-pasangan jalur terpendek.

Namun poin utama saya adalah tentang kasus grafik tidak terarah dan dengan bobot non-negatif, saya mendengar trik yang bagus beberapa kali:

  1. Pilih titikv
  2. Temukan sedemikian rupa sehingga maksimumd ( v , kamu )ud(v,u)
  3. Temukan sehingga maksimumd ( u , w )wd(u,w)
  4. Returnd(u,w)

Kompleksitasnya sama dengan dua pencarian pertama kali berturut-turut¹, yaitu jika grafik terhubung².O(|E|)

Tampaknya itu cerita rakyat, tetapi saat ini, saya masih berjuang untuk mendapatkan referensi atau untuk membuktikan koreksinya. Saya akan memperbarui ketika saya akan mencapai salah satu dari tujuan ini. Sepertinya sangat sederhana saya memposting jawaban saya sekarang, mungkin seseorang akan mendapatkannya lebih cepat.

¹ jika grafik ditimbang, wikipedia tampaknya mengatakan tetapi saya hanya yakin tentang .O ( | E | log | V | )O(|E|+|V|log|V|)O(|E|log|V|)

² Jika grafik tidak terhubung Anda mendapatkan tetapi Anda mungkin harus menambahkan untuk memilih satu elemen dari setiap komponen yang terhubung. Saya tidak yakin apakah ini perlu dan bagaimanapun, Anda dapat memutuskan bahwa diameternya tidak terbatas dalam kasus ini.O ( α (O(|V|+|E|)O(α(|V|))

jmad
sumber
Untuk mkae Dijsktra bekerja dalam batas waktu yang ditentukan Anda perlu menggunakan tumpukan Fibonacci, bukan implementasi yang biasa.
Suresh
8
Ini adalah jawaban yang sangat salah, algoritma ini adalah cerita rakyat tetapi dalam pohon bukan grafik umum. PS: Saya bisa melihat contoh balasan Anda, tetapi itu bukan jawaban yang baik untuk ditandai sebagai jawaban.
Saya punya dua pertanyaan tentang solusi yang salah. 1. Apakah ini setidaknya memberikan rentang jawaban yang benar? mis. jika metode menemukan diameter d , apakah solusi yang benar antara d dan 2d ? 2. Apa yang terjadi jika kita menambahkan tipuan lain dan mempertimbangkan semua simpul yang ditemukan tipuan (bukan hanya satu)? Contoh penghitung yang diberikan pada postingan akan bekerja saat itu, karena simpul perifer yang benar adalah di antara simpul yang ditemukan oleh tipuan kedua.
mafu
32

Saya berasumsi Anda berarti diameter dari yang merupakan terpanjang jalur terpendek yang ditemukan di .GGG

Menemukan diameter dapat dilakukan dengan menemukan semua pasangan jalur terpendek terlebih dahulu dan menentukan panjang maksimum yang ditemukan. Algoritma Floyd-Warshall melakukan ini dalam waktu . Algoritma Johnson dapat diimplementasikan untuk mencapai waktu .O ( | V | 2 log | V | + | V || E | )Θ(|V|3)O(|V|2log|V|+|V||E|)

Batas runtime kasus terburuk yang lebih kecil tampaknya sulit untuk dicapai karena ada jarak untuk mempertimbangkan dan menghitung jarak tersebut dalam waktu sublinear (diamortisasi) yang masing-masing akan menjadi sulit; lihat di sini untuk terikat terkait. Perhatikan makalah ini yang menggunakan pendekatan yang berbeda dan mendapatkan algoritma (sedikit) lebih cepat.O(|V|2)

Raphael
sumber
2
Jika Anda mendapatkan bayaran di kertas-kertas itu, periksa Google Cendekia.
Raphael
Juga, pengecualian ini perlu diperhatikan untuk pohon yang tidak diarahkan , di mana Anda bisa mendapatkan dia. hanya dengan satu dfs traversal.
Azam
15

Anda juga dapat mempertimbangkan pendekatan teori grafik aljabar. Diameter adalah bilangan bulat paling tidak dengan matriks memiliki properti bahwa semua entri bukan nol. Anda dapat menemukan dengan iterasi dari perkalian matriks. Algoritma diameter kemudian membutuhkan waktu , di mana adalah terikat untuk perkalian matriks. Misalnya, dengan generalisasi algoritma Coppersmith-Winograd oleh Vassilevska Williams, algoritma diameter akan berjalan dalam . Untuk pengantar cepat, lihat Bab 3 dalam buku Fan Chung di sini .t M = I + A M t t O ( log n ) O ( M ( n ) log n ) M ( n ) O ( n 2,3727 log n )diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)O(n2.3727logn)

Jika Anda membatasi perhatian Anda pada kelas grafik yang sesuai, Anda dapat menyelesaikan masalah APSP dalam waktu optimal . Kelas-kelas ini termasuk setidaknya grafik interval, grafik busur lingkaran, grafik permutasi, grafik permutasi bipartit, grafik chordal kuat, grafik bipartit chordal, grafik herediter jarak, dan grafik chordal ganda. Sebagai contoh, lihat Dragan, FF (2005). Memperkirakan semua pasangan jalur terpendek dalam keluarga grafik terbatas: pendekatan terpadu. Jurnal Algoritma, 57 (1), 1-21 dan referensi di dalamnya.O(n2)

Juho
sumber
2
Perlu dicatat bahwa algoritme ini hanya berfungsi dalam kasus tanpa bobot.
GMB
-2

Asumsi:
1. Grafik tidak berbobot
2. Grafik diarahkan

O (| V || E |) kompleksitas waktu.

Algoritma:

ComputeDiameter(G(V,E)):
  if ( isCycle( G(v,E) ) ) then
     return INFINITY
  if ( not isConnected( G(V,E) )) then
     return INFINITY
  diameter = 0
  for each vertex u in G(V,E):
     temp = BFS(G,u)
     diameter = max( temp , diameter )
  return diameter

Penjelasan:
Kami memeriksa siklus. jika grafik mengandung siklus maka kita tetap bergerak dalam loop, jadi kita akan memiliki jarak tak terbatas. Kami memeriksa terhubung. Jika grafik tidak terhubung, itu berarti simpul u dari G1 ke simpul v di G2. Di mana G1 dan G2 adalah dua sub grafik yang tidak terhubung. Jadi kita akan memiliki jarak tak terbatas lagi. Kami akan menggunakan BFS untuk menghitung jarak maksimum antara node yang diberikan (u) ke semua node lain (v) yang dapat dijangkau dari u. Kemudian kita akan mengambil maksimum dari diameter yang dihitung sebelumnya dan hasilnya dikembalikan oleh BFS. Jadi kita akan memiliki diameter maksimum saat ini.

Analisis waktu berjalan:

  1. O (| E |) menggunakan DFS
  2. O (| E |) menggunakan DFS
  3. BFS berjalan dalam waktu O (| E |).
  4. Kita harus memanggil fungsi BFS untuk setiap dhuwur sehingga totalnya akan membutuhkan waktu O (| V || E |).

Total waktu = O (| v || E |) + O (| E |) + O (| E |)
Sejak | V || E | > | E |
jadi kami telah menjalankan waktu sebagai O (| v || E |).

BFS
DFS

Catatan: Ini bukan solusi elegan untuk masalah ini.

sonus21
sumber
Grafik terhubung asiklik adalah pohon, yang masalahnya lebih mudah (karena diameternya kemudian diberikan oleh jalur terpanjang). Ini telah dibahas di sini dan di sini , di mana algoritma lebih cepat diberikan. (Satu traversal rekursif atau, alterlatif, dua BFS sudah cukup.)
Raphael
1
@ Raphael Tidak, grafik tidak berarah asiklik adalah pohon. DAG adalah DAG.
David Richerby
@ DavidRicherby Benar. (Meskipun, secara teknis, jawabannya tidak mengatakan apakah itu mengecualikan siklus langsung atau tidak langsung;;)) Bagaimanapun, ini tidak lain adalah menyelesaikan APSPP (pendekatan naif), yang telah dicakup untuk kasus umum dengan jawaban sebelumnya.
Raphael
@ Raphael Apakah Anda yakin grafik Acyclic adalah pohon? Grafik asiklik tidak berarti grafik selalu pohon. Tree hanyalah kasus khusus untuk ini. Juga ini adalah algoritma langsung dan kompleksitas waktu adalah O (| V || E |).
sonus21
Ya saya yakin. (Mungkin Anda berpikir tentang pohon yang berakar , yang rasanya berbeda.)
Raphael