Ukkonen algoritmasının çalışma süresi alfabe boyutuna nasıl bağlıdır?


19

Ukkonen'in algoritmasının asimptotik çalışma süresi , belki de doğrusal (?) Zamanda sonek ağaçları oluşturmak için en popüler algoritma sorunu ile ilgileniyorum .

İşte Dan Gusfield'ın "teller, ağaçlar ve diziler üzerinde algoritmalar" kitabından bir alıntı (bölüm 6.5.1):

"... Aho-Corasick, Weiner, Ukkonen ve McCreight algoritmalarının tümü ya alanı gerektirir ya da zaman sınırı minimum ve ".Θ(m|Σ|)Ö(m)Ö(mgünlükm)Ö(mgünlük|Σ|)

[ , dize uzunluğudur ve alfabenin boyutudur]mΣ

Bunun neden doğru olduğunu anlamıyorum.

  • Boşluk: Eh, boyutunda diziler kullanarak düğümlerin dışındaki dalları temsil edersek , gerçekten de alan kullanımı ile sonuçlanırız . Ancak, görebildiğim kadarıyla, dalları karma tablolar (örneğin Python'daki sözlükler) kullanarak saklamak da mümkündür. O zaman tüm karma tablolarda sadece işaretleyicileri oluruz (O ağaçta kenarları olduğu için), yine de zamanında çocuk düğümlerine erişebilirken dizileri kullanırken olduğu gibi.Θ(|Σ|)Θ(m|Σ|)Θ(m)Θ(m)Ö(1)
  • Zaman : yukarıda belirtildiği gibi, karma tabloları kullanmak zamanında herhangi bir düğümün giden dallarına erişmemizi sağlar . Ukkonen algoritması işlemleri gerektirdiğinden düğümlere erişim dahil), toplam çalışma süresi de .Ö(1)Ö(m)Ö(m)

Sonuçlarda neden yanıldığım ve Gusfield'in Ukkonen'in algoritmasının alfabeye bağımlılığı konusunda neden haklı olduğuna dair ipuçları için size çok minnettar olurum.


3
Alfabetik boyutta bağımsız bir zaman / boşluk sınırının imkansız olduğuna dair bir kanıt olmadığını düşünmüyorum. Gusfield'ın açıklamayı yaptığına inanıyorum çünkü zamandan tamamen kurtulmanın bilinen bir yöntemi yok. Bir tane oluşturmak için, karma işlevlerinizi daha ayrıntılı olarak ele almanız gerekir. Karma arama için gerçek bir en kötü durum O (1) süresi, mükemmel bir karma gerektirir. Bunu algoritma sırasında nasıl yapacağım açık değil (çünkü hash girişleri o noktada statik değildir).
jogojapan

(devamı) Ağaç tamamlandıktan sonra bunu yapabilirsiniz, ancak algoritmanın kendisi için gereken süre değişmeden kalır. (Soru için +1 olsa da.)
jogojapan

Yanıtlar:


2

@Jogojapan'ın yorumlarda belirttiği gibi, genellikle sahip olmak sadece amortismana tabi tutulur , bu nedenle algoritma için yalnızca amortismana tabi sınırlar elde edersiniz. Ancak, bu bile alamadım düşünüyorum: İtfa edilmiş O ( 1 ) karma elde etmek için , karma tabloları Ω ( Σ ) boyutunda olması gerekir , bu yüzden hala Θ ( m Σ ) alanı (ve aynı zamanda başlatma gereksinimi).Ö(1)Ö(1)Ω(Σ)Θ(mΣ)

Dahası, pratikte tüm bu karma tabloları ayarlama zamanı dizileri ayarlama zamanından çok daha yüksek olacaktır.

(Düğüm, karakter) -çiftleri ile dizinlenmiş bir genel sağlama tablosu kullanarak daha iyi ücret alabilirsiniz, ancak en azından "yalnızca itfa edilmiş" bağımsız değişkeni kalacaktır.

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.