Yönlendirilmemiş sonlu bir seyrek grafiğim olduğunu ve aşağıdaki sorguları verimli bir şekilde çalıştırabilmem gerektiğini varsayalım:
- - ve arasında bir yol varsa değerini döndürür , aksi takdirde
- - erişilebilen düğüm kümesini döndürür
Bu, grafiğin bağlı bileşenlerini önceden hesaplayarak kolayca yapılabilir. Her iki sorgu da zamanda çalışabilir .
Ayrıca keyfi olarak kenarları ekleyebilmem - - o zaman bileşenleri ayrık olarak ayarlanmış bir veri yapısında saklayabilirim . Bir kenar eklendiğinde, farklı bileşenlerde iki düğümü bağlarsa, bu bileşenleri birleştiririm. Bu , maliyetini ekler ve ve ( olabilir maliyetini .
Kenarları keyfi olarak da çıkartabilmem gerekirse, bu durumu ele almak için en iyi veri yapısı nedir? Bilinen biri var mı? Özetlemek gerekirse, aşağıdaki işlemleri verimli bir şekilde desteklemelidir:
- - ve arasında bir yol varsa değerini döndürür , aksi takdirde döndürür .
- - erişilebilen düğüm kümesini döndürür .
- - iki düğüm arasına bir kenar ekler. O Not , veya her ikisi önce var olmayabilirdi.
- - iki düğüm arasındaki mevcut bir kenarı kaldırır.
(Bunu oyun geliştirme perspektifinden ilgileniyorum - bu sorun çok az durumda ortaya çıkıyor gibi görünüyor. Belki oyuncu güç hatları inşa edebilir ve bir jeneratörün bir binaya bağlı olup olmadığını bilmemiz gerekir. Belki oyuncu kilitleyebilir ve kapıların kilidini açıyoruz ve bir düşmanın oyuncuya ulaşıp ulaşamayacağını bilmeliyiz.Ama bu çok genel bir sorun, bu yüzden bunu şöyle ifade ettim)