İşte kısa süperdizgi problem: Size verilen dizeleri s 1 , ... , s , n bazı alfabe üzerinde Σ baştan kısa dize bulmak istiyorum ve Σ her içeriyor s ins1,…,snΣΣsi yani bir alt dize ardışık karakterlerin bir alt diziyle olarak.
Sorunun kesin algoritmaları hakkında konuştuğumuzda , en kısa süper sicimin uzunluğunu bulmak , nihai sicimdeki tüm ardışık dize çakışmaları toplamı olan maksimum sıkıştırma C'yi bulmaya eşdeğerdir , yani C = ∑ i | s i | - L .LCC=∑i|si|−L
Bildiğim kadarıyla, en kısa süper sicim için en hızlı tam algoritma ( 2 n ) 'de çalışır, burada n dizelerin sayısıdır. Bu, en uzun yol (ve diğer sorunlar) için dinamik programlama algoritmasına benzer basit bir dinamik programlama algoritmasıdır:O∗2nn
Her dizeleri alt kümesi için ve dize v içinde S biz her yerinden süpersicimlerin üzerinde maksimum sıkıştırma hesaplamak S nerede v ilk dize ((, süperdizgi görünen C olarak saklamak olduğunu v , s )). Biz ilk tek elemanlı tüm alt kümelerini işleme ve sonra C kadar bina gerçekleştirirsiniz (( v , s )) alt kümeleri için değerler S üzerinde k üzerinde olanlardan dizeleri k - 1 dizeleri. özellikle:SvSSvv,Sv,SSkk−1
Her dize için hepimizin alt kümeleri bakmak S ' ile ilgili k - 1 do not dahil dizeleri u ve (değerini ayarlamak u , u ∪ S ' dizeleri üzerinde maksimum) v içinde S ' maksimum toplamının u'nun v ile C ile örtüşmesi (( v , S ′ )).uS′k−1uu,u∪S′vS′uvv,S′
Son çalışma zamanı O'dan ( ) fazla değildir, burada l maksimum dize uzunluğudur.n22n+n2ll
nin küçük olduğunu veya çift üst üste binmelerin küçük olduğunu, alfabe boyutunun küçük olduğunu varsayarsanız daha iyi algoritmalar vardır , ancak 2 n'den daha hızlı olan herhangi bir algoritmanın farkında değilim .l2n