DFS'nin neden olduğu düşünülüyor?


11

Göre bu notları , DFS sahip olduğu kabul edilirO(bm) uzay karmaşıklığı, nerede b ağacın dallanma faktörüdür ve m durum alanındaki herhangi bir yolun maksimum uzunluğudur.

Aynı şey Bilgisiz Arama'daki bu Wikibook sayfasında da söyleniyor .

Şimdi DFS'deki Wikipedia makalesinin "bilgi kutusu" , algoritmanın alan karmaşıklığı için aşağıdakileri sunar:

O(|V|), tüm grafik tekrarlanmadan çaprazlanırsa, O(aranan en uzun yol uzunluğu) yinelenen düğümleri ortadan kaldırmadan örtük grafikler için

DFS'nin uzay karmaşıklığı, yani, O(m), nerede m algoritmanın ulaştığı maksimum uzunluktur.

Neden böyle olduğunu düşünüyorum?

Temel olarak, şu anda baktığımız yolun düğümlerinden başka bir düğüm depolamamız gerekmiyor, bu nedenle b Wikibook tarafından sağlanan analizde ve size yönlendirildiğim notlarda.

Dahası, Richard Korf'un IDA * üzerine yazdığı bu makaleye göre , DFS'nin alan karmaşıklığıO(d), nerede d "derinlik kesme" olarak kabul edilir.

Peki, DFS'nin doğru alan karmaşıklığı nedir?

Uygulamaya bağlı olabileceğini düşünüyorum, bu yüzden bilinen farklı uygulamalar için alan karmaşıklığının bir açıklamasını takdir ediyorum.


DFS is considered to […] of the treeilk olarak her çapraz grafik derinliği bir ağaç değildir .
greybeard

"Buradaki DFS uygulamasının maliyeti X" ve "DFS, maliyeti X olacak şekilde uygulanabilir" demek arasında bir fark vardır. Dolayısıyla, hiç de çelişkili olması gerekmeyen ikinci türden farklı ifadeler hakkında tartışıyor gibi görünüyor. (O zamandan beri hiçbir çelişki olmadığını unutmayınO(bm)O(m), Eğer O(bm)hiçbir şey ifade etmektir.)
Raphael

@greybeard Bir grafik üzerinde derinlik ilkinin ilk geçişinin bir ağaçla sonuçlanmayacağı bir örnek söyleyebilir misiniz?
nbro

example where a depth-first traversal on a graph would not result in a treeçok fazla düşünmeden: ayrıştırma. (Bekleyin: ne demek istiyorsun:? result in a treeSoru, bir grafik arama / kaydırma hakkındadır.)
greybeard

1
@greybeard Şimdiye kadar bulduğum tüm tanımlara göre. Bana düğümleri yeniden ziyaret ettiği bir tanım bul, sonra bunun hakkında tartışabiliriz.
nbro

Yanıtlar:


7

Tam olarak DFS olarak adlandırdığınız şeye bağlıdır. Örneğin Wikipedia'da açıklanan DFS yinelemeli algoritmasını düşünün ve daha önce ziyaret ettiğiniz düğümleri takip etmek zorunda kalmamanız için bir ağaç üzerinde çalıştırdığınızı varsayın. Diyelim ki tam olarak çalıştırıyorsunuzb- derinlik ağacı m. Ağaçlarındaki düğümleri şu kelimelerle tanımlayabiliriz:[b] en fazla uzunluk m. Algoritma aşağıdaki gibi çalışır:

  1. Kökten başlayın. it1,2,,b (tersine sırayla).

  2. Pop 1ve it 11,12,,1b yığını.

  3. Pop 11ve it 111,112,,11b yığını.

  4. Pop 1m1ve it 1m,1m12,,1m1b yığını.

Bu noktada, yığın aşağıdakileri içerir:

1m,1m12,,1m1b,,112,,11b,12,,1b,2,,b,

Toplamda (b1)m+1düğümleri. Bunun, yığının boyutunun en üst düzeye çıkarıldığı zaman dilimi olup olmadığını kontrol edebilirsiniz.


2
Zamanında bir pint doktoru uzak tutar.
greybeard

3

Burada dikkat edilmesi gereken iki nokta var:

  1. Yığın içine mevcut düğümün tüm torunlarını tanıtırsanız, o zaman etkili bir şekilde, alan karmaşıklığı O(bd) nerede b dallanma faktörüdür ve dmaksimum uzunluktur. Yuval Filmus'un yanıtı gerçekten de bu davaya değiniyor. Ancak, genel olarakd çok daha büyük b. Üstelik sürgülü karo bulmacası gibi birçok alanda,b bir sabitle (bu özel durumda, 4) üst sınırlıdır ve bu nedenle DFS'nin bir alan karmaşıklığına sahip olduğunu güvenle söyleyebiliriz. O(d).

  2. Ancak itiraf etmek gerekirse, bu her zaman böyle değildir. Örneğin, Gözleme bulmacasında dallanma faktörü, optimum çözümün uzunluğu ile büyür ve her ikisinin de benzer değerleri vardır. Yine de, alan karmaşıklığıO(d). Bunu görmek için sadece herhangi bir düğümün genişletme prosedürünü değiştirin: Geçerli düğümün tüm torunlarını eklemek yerine (Yuval Filmus tarafından önerildiği gibi) bunları sırayla yerleştirin. İlk olarak ilk torunu üretiyorsunuz ve derinlik-birinci sırada ilerledikten hemen sonra --- aslında, bu noktada diğer tüm torunlara ihtiyacınız yok . Bu düğüme geri gitmeniz durumunda, onun torunu yığından kaldırıldı. Ardından, ikinci torunu oluşturun ve tekrar derinlik-birinci sırada ilerleyin. Bu düğüme geri gitmeniz durumunda, daha fazla torun kalmayana kadar üçüncü nesneyi vb. Bu şekilde devam ederseniz, sadeced dallanma faktörü ne olursa olsun yığınınızdaki düğümler, b.

Özetle, asla DFS'nin bir uzay karmaşıklığına sahip olduğunu söyleyemem. O(bd) ve bunun yerine, uzay karmaşıklığının O(d).

Bu yardımcı olur umarım,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.