Dize İçindeki En Uzun Tekrarlanan (Dağınık) Alt Sıra


26

Gayri Problem Sorunu:

Bir dize verildiğinde, örneğin ACCABBAB , bazı harfleri kırmızı, bazı harfleri mavi (ve bazılarını değil) renklendirmek istiyoruz, öyle ki sadece soldan sağa doğru kırmızı harfleri okumak aynı sonucu verir. sadece mavi harfler.

Örnekte onları şu şekilde renklendirebiliriz: ACCABBAB

Bu nedenle, A C C A B B A B'ninCAB tekrarlanan bir alt dizisi olduğunu söylüyoruz . Aynı zamanda en uzun tekrarlanan alt dizilerden biridir (kontrol edilmesi kolaydır).ACCABBAB

Tekrarlanan en uzun alt ekleri verimli bir şekilde hesaplayabilir miyiz?

Resmi Soru:

Bir dize ve bazıları için karar vermek NP-zor mu k uzunluğu bir tekrarlanan altdizi olsun, k dize var?

  • Eğer öyleyse: Hangi problem bu soruna indirgenebilir?
  • Değilse: Verimli bir algoritma nedir? (Açıkçası, bu algoritma daha sonra tekrarlanan en uzun bir sırayı hesaplamak için kullanılabilir)

Bonus soru:

Alfabenin büyüklüğü sabit tarafından sınırlandırılmışsa , her zaman uzunluğunun tekrarlanan n/2o(n)bir alt dizisi olacak mı?

(Bu ikili alfabe için doğru olduğu bilinmektedir.)

Düzenleme 2: Bonus Soru'a verilen olumsuz cevap, en az büyüklüğünde alfabe için zaten bilinir . Boyutu alfabe için Aslında Σ , sadece bir uzunluğu en uzun tekrarlı dizilerinden olan diziler bulunmaktadır O ( n, · Σ - 1 / 2 ) . Rasgele dizeler bunu göstermek için yeterlidir. Sonuç zaten vardı, ama göz ardı ettim.5ΣO(n·Σ1/2)

Düzenleme: Not:

Bazı insanlar "sıra" derken "alt dize" anlamına gelir. Yapmıyorum. Bu, iki kez alt dizgiler bulmakta sorun değil.


Sekti, teşekkürler. Haklısın: ilk yorumum yanlıştı; Şimdi onu sildim. Öte yandan, benim kalan comment edilir bitişik olmayan dizilerle bahsediyor. Eğer sabittir, sorunu çözmek için bir yol var içinde (bitişik olmayan dizilerle birlikte, örtüşmeyen olmak zorunlu) O ( n 2 k + 2 ) , böylece zaman ya. Her dp alt sorunu, şimdiye kadar seçilen tüm kırmızı harflerin ve tüm mavi harflerin endekslerini takip eder. Bu muhtemelen ilgi çekici değildir, çünkü k , girdinin bir parçası olduğunda ne olacağını bize söylemez . kO(n2k+2)k
DW

@DW Neden resmi soruyu en uzun süren bu ortak altlıkta bu şekilde değiştiremiyorum? Belki bir şeyleri özlüyorum ve birileri benim için netleşebilir.
Bryce Kille

@BryceKille, bilmiyorum; belki olabilir. Nasıl yapılacağını bulursan umarım bir cevap yazarsın!
DW

Yanıtlar:


-2

Bu çözülebilir polinom zamanıHer düğümün S'nin tekrarlanan bir alt sırasındaki bir noktasını ( i , j ) temsil ettiği bir grafiğini oluşturarak öyle ki S [ i ] = S [ j ] . Düğümler arasındaki kenar u ve v bu aygıtın u ile devam edilebilir v uzunluğu 2 bir tekrar alt-dizisinin oluşturulması için.G(i,j)SS[i]=S[j]uvuv

1. Düğümleri bulun. Bu yapılabilir , her bir karakter için endeksler sıralı bir listesini oluşturmaya zamandan c ve daha sonra özel çiftleri numaralandırma. Orada fazla olan m = n 2 düğüm.O(n2)cm=n2

2. Kenarları bulun. Bu alır düğüm olmadığını kontrol etmek için bir zaman u düğümü ile devam edilebilir v böylece tüm çift göz önüne alınarak, ( u , v ) Bu adım alır O ( m, 2 ) süresi.O(1)uv(u,v)O(m2)

3. en uzun yolun geçerli bir tekrarlanan sıra olamayabileceğini unutmayın. Yolları göz önünde bir b ve b c . Bir kenar var ise , bir C daha sonra , bir B c bu alır Bu nedenle uzunluğu 3. geçerli bir tekrar alt-dizi olan O ( m, 4 ), genel durumda, uzunluğu 3. tekrarlanan alt sekanslarını bulmak için zaman bu iki kontrol etmek için doğrusal bir zaman alır geçerli uzunluktaki n yolları geçerli bir uzunluktaki n + 1 yolu ile birleştirilebilir .GabbcacabcO(m4)nn+1

4. Artık yol bulunamayana kadar 3. adımı yineleyin.


Hmm. Çok hızlı. 3. adımda, dikkate alınması gereken ön eklerin sayısı daha da büyür. Yani bu polinom değil.
nopolog

1
CS.SE'ye hoş geldiniz ve bu sorunu çözmeye çalıştığınız için teşekkür ederiz! Korkarım algoritmasını anlamıyorum. 3. Adım nedir? "3" te gördüğüm her şey Bazı bildirimsel ifadeler / gözlemler ancak algoritmanın ne yapması gerektiğine dair usule ilişkin bir açıklama görmüyorum. Ayrıca, 3. Adımı yinelemenin ne demek olduğunu ya da zamanın yeterli olduğunu iddia etmenin gerekçesini göremiyorum . Bir sonraki yorumunuz, artık cevabınızın doğru olduğuna inanmadığınızı söyler. Eğer öyleyse, karışıklığı önlemek için cevabı silmek daha iyi olabilir. O(nnm2)
DW

Daha sonra cevabı bulursanız, her zaman silme veya yeni bir cevap gönderebilirsiniz.
DW

DW, teşekkürler. Adım 3'e giriş, n uzunluğunun tekrarlanan tüm alt dizileridir ve çıkış, n + 1 uzunluklarının tekrarlanan tüm alt dizileridir. Algoritmanın doğru olduğunu, ancak bunun bir polinom zaman algoritması olmadığını düşünüyorum. Şimdi yanlış olduğunu düşündüğüm iddiaları işaretledim.
nopolog

Teşekkür ederim. Anlıyorum. Ne yazık ki, bu revizyonlarla, korkarım bu cevap sorulan soruyu cevaplamıyor. Soru şuydu: Bu NP zor mu? Verimli bir algoritma var mı? Üstel bir zaman algoritması olduğunu göstermek, bu soruların hiçbirine cevap vermede yardımcı olmaz. Gerçekten de, herhangi bir fantezi tekniğine başvurmadan, problem için üssel bir zaman algoritması olduğunu görmek çoktan önemsizdir. Girişiminiz için teşekkür ederim.
DW
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.