Bir ipi kaldırmak ne kadar zor?


117

İki diziden oluşan bir karışma, karakterleri yeni bir dizgeye serpiştirerek her dizginin karakterlerini sırayla tutar. Örneğin, ve MISSISSIPPIbir karıştırma . İki özdeş dizgenin karıştırılması durumunda bir dize karesini arayayım . Örneğin , karedir, çünkü ve bir karışıklığıdır , ancak dize kare değildir.MISIPPSSISIABCABDCDABCDABCDABCDDCBA

Bir dize kare olup olmadığını belirlemek için hızlı bir algoritma var mı, yoksa NP-sert mi? Bariz dinamik programlama yaklaşımı işe yaramadı.

(1) her karakter en fazla göründüğü dizeleri: Hatta aşağıdaki özel durumlar zor gibi görünen dört , altı kez, ve (2) sadece iki ayrı karakterler ile dizeleri. Her Austrin'in de işaret ettiği gibi, her bir karakterin en fazla dört kez meydana geldiği özel durum 2SAT'a düşürülebilir.


Güncelleme: Bu problemin sertliği kanıtlamayı kolaylaştıracak başka bir formülasyonu vardır.

Köşeleri 1'den n'e tamsayılar olan G grafiğini düşünün; Her kenarı, bitiş noktaları arasındaki gerçek aralıkla tanımlayın. Bir aralık doğru olarak diğeri içeriyorsa iki G'nin iç içe olduğunu söylüyoruz . Örneğin, kenarlar (1,5) ve (2,3) yuvalanmıştır, ancak (1,3) ve (5,6) değildir ve (1,5) ve (2,8) değildir. G bir uygun olan iç içe geçmemiş durumunda hiçbir kenarlar çiftinin yuvalanmıştır. G'nin yuvalanmamış mükemmel bir eşleşmeye sahip olup olmadığını belirlemek için hızlı bir algoritma var mı, yoksa bu sorun NP zor mu?

  • Bir dizgenin çıkarılması, ayrık bir klik birleşiminde (eşit karakterler arasında kenarlı) iç içe olmayan mükemmel bir eşleşme bulmakla eşdeğerdir. Özellikle, bir unshuffling ikili dize bir ayrık birleşimin olmayan bir iç içe mükemmel eşleme bulma eşdeğerdir iki klikler. Fakat bu sorunun genel grafikler için zor, hatta ilginç grafikler için kolay olup olmadığını bile bilmiyorum.

  • Mükemmel olmayan bulmak için kolay bir polinom zamanlı algoritması vardır geçiş eşleştirmeler.


Güncelleme (24 Haz 2013): Sorun çözüldü! Şimdi kare dizeleri tanımlamanın NP tamamlanmış olduğuna dair iki bağımsız kanıt var.

Olmayan iç içe mükemmel eşleştirmeler bulma nedeniyle Shuai Cheng Li ve "2009'da See Ming Li, NP-zor olduğunu daha basit kanıtı da vardır 2-aralık desen iki açık problemler üzerinde ", Teorik Bilgisayar Bilimi 410 (24-25 ): 2410–2423, 2009.


2
Sıra sadece A000984 değil, "bitlerin yarısı açık ve yarısı kapalı olan 2 * n bit ikili sayının olası değerlerinin sayısı" değil mi?
Travis Brown

5
@Travis, yanlış anlamadığım sürece: n = 4 için 10000111, bitlerin yarısının açık olduğu ve yarısının kapalı olduğu, ancak tanımlandığı gibi kare olmayan 2 * n bit ikili bir sayıdır. Bu mantıktan sonra, kareler A000984'ü oluşturan kümenin katı bir alt kümesi olduğundan, bir ikili alfabe üzerindeki kareler için değerlerin dizilim boyunca eşit endekslerde düşük olması gerekir - hayır?
Daniel Apon

1
Gözlem: Grafik formalizmini kullanarak, 2n'nin G'deki köşelerin sayısı olmasına izin verin. G ed, G'nin iç içe kenarlarına karşılık gelen köşeler arasına kenarları ekleyerek G'nin çizgi grafiğinden elde edilen bir grafik olsun. bağımsız bir boyut kümesi Maksimum bağımsız bir kümenin polinom zamanı hesaplanabileceği çeşitli grafik sınıfları vardır. Bu rotaya gidersek, soru şu: G ′ ne güzel özelliklere sahip? (daha fazla)
Tsuyoshi Ito

2
@Radu: Karelerin fraksiyonlarının kareler dışındaki (ikili alfabe üzerinde) 1/3 değerine yaklaştığını sanmıyorum. 1 / 2'ye yavaş bir yakınsama gösteren bazı Monte-Carlo simülasyonları yaptım. Bu nedenle sınırda, temelde 0 ve 1 bile sayıları olan tüm ikili dizeler karelerdir. Bu benim için şaşırtıcı ve bir algoritmada sömürülebilir. Daha büyük alfabe için karelerin kesri hızla 0'a yaklaşıyor gibi görünüyor.
Martin Berger

8
Bugünkü blog yazısında bu sorudan bahsedildiğinden, bu sorunu çözme konusunda biraz ilgi gösterip gösteremeyeceğimize bakalım. Bu sorunun ortaya çıkmasından bu yana bir yıl geçti ve o zamandan beri birçok yeni kullanıcı kazandık. Bu soru için 100 tekrar ödül aldım.
Alex ten Brink,

Yanıtlar:


66

Michael Soltys ve ben bir dizgenin kare karışık olarak yazılıp yazılmayacağını belirleme sorununun NP tamamlanmış olduğunu kanıtlamayı başardık. Kanıtımız 9 sembollü bir alfabe için yazılmış olmasına rağmen, bu sadece farklı sembollü sonlu bir alfabe için de geçerlidir . Bu soru, sadece 2 sembolle söylenen daha küçük harfler için hala açıktır . Soruna her sembolün sadece 6 kez (veya daha genel olarak sabit sayıda) görünmesi sınırlaması altında bakmadık ; bu yüzden bu soru hala açık.7926

Kanıt, bölümden itibaren bir azalma kullanır . Buraya posta göndermek çok uzun, ancak şu adreste bulunan web sayfalarımızdan " Bir dizgenin çıkarılması NP- hard" yazısının bir kopyası:3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

ve

http://www.cas.mcmaster.ca/~soltys/#Papers .

Bu makale Bilgisayar Sistem Bilimleri Dergisi'nde yayımlanmıştır:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
Korku veren !! (Ve benim büyük rahatlamaya cidden önemsiz.)
Jeffε

15
Teşekkürler. StackExchange bu soru için kaynağımızdı. Harika bir kaynak!
Sam Buss

9
@SamBuss küçük bir istek: Jeff'in sorusuna değinirken, metinde Per Austrin'in çözümünden sadece bahsettin. Cevaplara bakarsanız, cevaplar için resmi bir alıntı oluşturmanın da bir yolu vardır (paylaşım düğmesine tıklayın ve 'alıntı' bağlantısını tıklayın). Bu şekilde, Per'in cevabı için de uygun bir alıntı yapabilirsiniz. Bundan sadece bahsederim ki, siteye resmi katkı yapanlar resmi olarak tanınırlar. Teşekkürler ! ve bu sorunu çözdüğüm için tebrikler
Suresh Venkat

2
@SureshVenkat. İpucu için teşekkürler: bu yararlıdır. Bunu makalenin çevrimiçi versiyonuna ekledim.
Sam Buss

Kare bir karışıklığı tanıma probleminin artık ikili bir alfabe üzerinde bile zor olduğu gösterilmiştir: sciencedirect.com/science/article/pii/S0304397519300258
a3nm 28:15

58

Her karakter en fazla dört kez göründüğünde bahsettiğiniz özel durum için, 2-SAT'ye (bir şey kaçırmadığım sürece ...) basit bir indirim yapılır:

Önemli olan nokta, her karakter için, karakterin oluşumlarını eşleştirmek için (en fazla) iki geçerli yol bulunmasıdır (üçüncü olasılık yerleştirme olacaktır). İki eşlemeden hangisinin seçildiğini göstermek için bir boolean değişkeni kullanın. Şimdi, bu değişkenlere yapılan bir atama, her ikisi de seçilmemiş, iç içe geçmiş her kenar çifti için iff dizesinin geçerli bir karışıklığını verir. Bu durum, söz konusu iki karaktere karşılık gelen değişkenlerin (muhtemelen ihmal edilmiş) ayrılmasıyla kesin olarak tanımlanabilir.


Güzel. Aynı fikir, her bir karakterin en fazla altı defa gerçekleştiği karakter dizileri için genelleşir, ancak sonuç 5-SAT örneğidir. :-(
Jeffε

2
Bu cevap ödül kazanmanın favorisidir.
Jeffε

öyleyse bu sorunun NPC olduğunu ve neden uzun konferans ve günlük kanıtlarına ihtiyacımız olduğunu kanıtlıyor gibi görünüyor?
T ....

@Turbo Çok gecikmeli, ancak bu sorun NPC olduğunu kanıtlamıyor çünkü 2-SAT NPC değil ; P'de
Steven Stadnicki

Alfabenin boyutu sınırsızsa, bu 2-SAT değerine düşürülüyor mu?
Muhammed El-Türkistan

11

İşte ispatlamak zor gözükse de, doğru olma şansına sahip olabilecek bir algoritma ve üzerine evden bahse giremem ...

Bize diyelim olduğu temizlendi her kenar için, eğer e , bir (muhtemelen iç içe) mükemmel eşleme vardır G kullanan e ve ya içeren alan herhangi bir kenar kullanmaz e .GeGee

temizlenip temizlenmediğini ve ihlal eden kenarları bulamazsanız test etmek kolaydır . Açıkçası, bu ihlal edici kenarların hiçbiri, iç içe geçmeyen mükemmel G eşlemesinde kullanılamaz , bu nedenle göz önünde bulundurulmaları güvenlidir. Bu işlemi tekrarlamak, biz bir (tek) temizlendi alt grafiğini elde G IFF olmayan bir iç içe tam bir uyum vardır G bulunur.GGGG

Şimdi, doğru olabilecek veya olmayabilir inanç sıçraması geliyor: umut, temizlenmiş bir grafikte, eğer hala derece derece varsa , açgözlü bir seçim yapabilir ve ilk tepe noktasını ilk komşusuyla eşleştirebiliriz. (veya eşdeğerde, tüm diğer komşularına giden kenarları kaldırın).>1

Açgözlü seçimden sonra grafiği tekrar temizleriz ve böyle devam eder ve grafik (umarım) yuvalanmayan mükemmel bir eşleşme olduğunda işlem sona erer.

İlk başta bunun açgözlü algoritmada küçük bir bakış açısı olması gibi olacağını düşünmüştüm ve gerçekten işe yaramadı, ama bir karşı örnekle gelmenin şaşırtıcı derecede zor olduğunu gördüm.


İkinci açgözlü aşaması konusunda şüpheliyim, ancak grafiği temizlemek yararlı görünüyor. Orijinal string bağlamında, grafiğin klibin ayrık birliği olduğu yerde, tasfiye edilmiş grafiğin yapısı hakkında bir şey söyleyebilir misiniz? Hala ayrık bir klikeler birliği mi? (Başka bir deyişle, giriş dizesindeki her karakterin oluşumunu bölümlere ayırabilir misiniz, böylece farklı bölümlerdeki karakterler eşleştirilemez mi?)
Jeffε

2
İkinci soru için 'aaaa' dizesini düşünün. Temizleme işlemi, 4 devir veren 1-4 ve 2-3 arasındaki kenarları kaldırır. İkinci açgözlü basamağın iki çeşidi de yeterli olacaktır ve bunlar için herhangi bir karşı örnek bulamadım: 1) Temizlenmiş bir grafik, mükemmel bir eşleşmeye sahipse iç içe geçmiş mükemmel bir eşleşmeye sahiptir (bu açgözlü basamağa benzemez) . 2) olmayan bir iç içe geçme mükemmel uyum ile temizlendi grafikte, her kenar kullanılan bazı (çürütmek için daha kolay olmalı, böylece bu hırslı ile birinci madde hem de daha güçlü) iç içe geçmeme mükemmel uyum.
Austrin Per

11

Sam Buss ve ben Kasım 2012'de önerdiğim çözüm (3-bölümden düşürülerek NP-hard'de kareyi karıştırmanın) şu anda Bilgisayar Sistem Bilimleri Dergisi'nde yayınlanan bir makaledir:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
Bu gerçekten ayrı bir cevaptan ziyade Sam Buss'un önceki cevabının bir düzenlemesi olmalı. Başkasının cevabına bir düzenleme önermek için "düzenle" yi tıklayabilirsiniz ve düzenlemeniz sitenin diğer kullanıcıları tarafından incelenir.
DW

11

Romeo Rizzi ve Stéphane Vialette, kare şeritleri tanımanın , en uzun ikili sıralama probleminden azalarak, “ Karışık Ürün için Kareler Olan Kelimeleri Tanıma ” başlıklı 2013 yazısında NP tamamlanmış olduğunu kanıtladı . İkili dizgelerin sökülmesinin karmaşıklığının hala açık olduğunu belirtiyorlar.

İç içe olmayan mükemmel eşleşmeyi bulmanın NP-tamamlayıcı olduğuna dair daha basit bir kanıt, Shuai Cheng Li ve Ming Li tarafından 2009 tarihli “ 2 aralıklı desenlerin iki açık sorununda ” makalelerinde verilmiştir . Bununla birlikte, biyoinformatikten miras kalan terminolojiyi kullanırlar. “Mükemmel iç içe olmayan eşleştirme” yerine, buna “DIS-2-IP- {<,} problemi” diyorlar . İki problem arasındaki denklik, Blin, Fertin ve Vialette ile tanımlanır :

2-IP DIS {<,} sorun genel grafiklerde kısıtlı eşleşmeleri açısından hemen formülasyona sahiptir: bir grafiktir Verilen G doğrusal sipariş birlikte π köşeler G , 2-IP Devrede {<,} sorun maksimum önem düzeyi uygun bulmak eşdeğerdir M de G özelliği ile herhangi bir iki farklı kenarlar {u,v} ve {u,v} ve M demin{π(u),π(v)}<min{π(u),π(v)} vemax{π(u),π(v)<max{π(u),π(v)} Ne min{π(u),π(v)}<min{π(u),π(v)} ve max{π(u),π(v)}<max{π(u),π(v)} gerçekleşir.

Güncelleme (25 Şubat 2019): Bulteau ve Vialette, ikili bir diziyi dağıtma konusundaki karar sorununun makalelerinde NP-tamam olduğunu, ikili karıştırma karelerinin tanınmasının NP-zor olduğunu gösterdi .


Bağlantıyı göremiyorum ve yazarların bir dizgeyi değiştirmenin sorunlarına eşdeğer olduğunu iddia ettiklerini görmüyorum.
Suresh Venkat

2
Dolandırıcılıkla eşdeğer olduğunu söylemiyorlar; bu daha genel bir problem.
Jeffε

@SureshVenkat Cevabımı düzenledim, umarım daha açıktır. Temel olarak, dipnotta söyledikleri, eşleşmedeki ( ) iki kenarın yuvalanmamış olmasıdır. M
Muhammed El-Türkistan

Yayınlanan asıl versiyonda, denklik sayfa 320'de belirtilmiştir. Books.google.com/…
Mohammad Al-Turkistany

Un Düzenlendi Lede gömmek .
Jeffε

9

7
Güzel referans. Sonuçların sorunuma nasıl uygulanacağını görmek zor, ama belki teknikler yardımcı olabilir. Belirli bir dize X'in başka bir dize Y'nin iki kopyasının karışık olup olmadığını söylemek kolaydır. Ekli kağıt, verilen bir dize X'in verilen başka bir Y dizisinin herhangi bir sayıda kopyasının karışık olup olmadığına karar vermenin NP-zor olduğunu kanıtlar. Verilen bir dizginin, SOME UNKNOWN dizgisinin iki kopyasının iki kopyasını karıştırıp karıştırmadığını bilmek istiyorum.
Jeffε

5

ASLA HİÇBİR, BU CEVAP YANLIŞTIR. "AABAAB" girişinde başarısız oluyor: ilk iki A'nın birbiriyle açgözlülükle eşleştirilmesi, kalan sembollerin eşleşmesini imkansız kılıyor. Başkalarının aynı hatayı yapmaktan kaçınmasına yardımcı olmak için silmek yerine onu bırakıyorum.

Bana göre, sözde karenin art arda gelen karakterlerini, mümkün olduğunca erken pozisyonda olan başka bir eşit karakterle, açgözlülükle eşleştirmek her zaman güvenlidir. Yani, aşağıdaki doğrusal zaman algoritmasının çalışması gerektiğini düşünüyorum:

Giriş dizisindeki i, i = 0, 1, 2, ... n. Her i konumu için, o konumun dizideki daha önceki bir konumla eşlenip eşleşmediğini kontrol edin. Aksi halde, eşleştirilen son konumdan sonra gelen ve karakterde mümkün olduğu kadar erken olan eşit bir karakterle eşleştirin. Bazı karakterler için bir eşleşme bulunamazsa, girişin kare olmadığını bildirin; Aksi takdirde, her bir eşleşmenin ilk çiftindeki karakter kümesidir.

İşte Python'da:

def sqrt (S):
    eşleşir = []
    i, j = 0, 0
    iken ben <len (S):
        j <len (eşleşir) ve [j] [1] == i ile eşleşirse:
            i + = 1
            j + = 1
            devam et
        eşleşirse:
            k = [-1] [1] + 1 ile eşleşiyor
        Başka:
            k = 1
        k <len (S) ve S [k]! = S [i]:
            k + = 1
        eğer k> = len (S):
            İstisna yükseltmek ("Kare değil")
        matches.append ((i, k))
        i + = 1
    return "" .join (S [a], a, b için eşleşir)

sqrt yazdır ("ABCABDCD")

Burada i, ana döngü değişkenidir (eşleştirmeye çalıştığımız konum), j, i konumunun zaten eşleşip eşleşmediğini kontrol etmeyi hızlandıran eşleşen çiftler dizisinin bir göstergesidir ve k, aramak için kullanılan bir dizindir i konumundaki karaktere uyan karakter. Doğrusal zamandır, çünkü i, j ve k tel boyunca monoton olarak artmaktadır ve her bir iç döngü yinelemesi bunlardan birini arttırmaktadır.


4
Orada bulunmak. Bunu yaptım. :-)
Jeffε

5

Güncelleme: Etiketlerin 1'den n'ye kadar olması durumunda, iç içe geçmeyen ve geçişi olmayan mükemmel eşleşmeyi bulma zorluğundan bahsetmek mantıklı değildir , çünkü bunlardan sadece bir tanesi vardır. (Evet, kendimi tekmeliyorum.) Ancak, etiketlerde daha geniş bir aralık vermesi mantıklı olacaktır ... bu yüzden hala biraz umut görüyorum, ama sonuçta oldukça anlamsız olabilir. Bunu kesinlikle biraz daha takip etmek zorunda kalacağım.


Yuvalanmayan ve geçiş yapmayan bir eşleşme bulmanın neden zor olduğunu düşünebilirim . Bana böyle bir eşleştirme ayrık eşleştirme diyelim . Bunun ne kadar yardımcı olacağından emin değilim, ama yine de nedenini göstermeme izin verin. (Burada durduğum gibi argümanımın tamamlanmadığını ve dışarıda bıraktığım detayın çok önemli olduğunu belirtmeliyim. Ancak bunun bir başlangıç ​​olabileceğini hayal ediyorum.)

Biraz farklı bir problemle başlayacağım. Bir grafiktir verilen , kenarları ile boyanmaktadır k renk ve köşeler etiketlenir 1 için n , her rengin tam olarak bir kenar içeren bir ayrık uygun var mı? Bu problem NP-zor gibi görünüyor (bunun argümanı hem tam hem de anlaşılır - bir şeyi kaçırmıyorsam). Azalma, ayrık bir klik birliği grafiği ortaya çıkardı.Gk1n

Azalma , [1] 'de getirilen NP-tamamlanmış bir problem olan Disjoint Factors'tan geliyor . Ayrık faktörlerin bir örneği, büyüklüğünde bir alfabe üzerinde bir dize tarafından verilir ve soru, bir faktörün aynı harfle başlayan ve biten bir alt dize olduğu k ayrık faktörlerin olup olmadığı ; ve dizede üst üste binmedikleri takdirde iki faktör birbirinden farklıdır (özellikle 'iç içe geçmenin' de izin verilmez).kk

Bana göstermek Let tarafından , elemanları k ayrık ilişkili ölçüsünde alfabesinin örneğini Faktörler.a1,,akk

nn1nuvai(u,v)i

kkk

Renklerden kurtulmak ve eşleşmeyi mükemmel hale getirmek için, muhtemelen daha geniş bir aralıkta olsa da , grafikte aşağıdaki değişiklikleri yapın:

UaaUaA(A2)Ua

Ua

[1] Polinom çekirdeği olmayan problemlerde Hans L. Bodlaender, Rodney G. Downey, Michael R. Fellows ve Danny Hermelin, J. Comput. Sist. Sci.


3
Kafam karıştı. (1,2), (3,4), (5,6), ..., (n-1, n) SADECE mükemmel ayrık eşleşme değil mi?
Jeffε

'Mükemmel eşleştirme' senaryosuna geçtikten sonra, yapıyı değiştiririm ve çok fazla yeni köşe eklerim (alfabedeki her biri için | U_a | -2 yeni köşe noktaları eklediğime dikkat edin). Böylece n buna göre patlar - k boyutlu bir alfabe için kabaca 2n-2k'ye. Yeni köşelere hangi numaraların tahsis edileceğini belirlemediğim için indirimin eksik olduğunu açıkça belirttiğimi umuyorum, ancak fazla zorlanmadan uzatılabileceğini umuyorum. Ancak, daha fazla bir şey söylemeden önce kesinlikle biraz düşünmeliyim.
Neeldhara,

1
JeffE'nin yorumunun amacının, yuvalanmayan ve geçiş yapmayan (veya bunların yokluğunu bildiren) mükemmel bir eşleşme bulmanın kolay olduğunu düşünüyorum, çünkü sadece bir olasılık var.
Tsuyoshi Ito,

2
Kanıt fikrinizin içeriğinden bahsetmiyorum, ancak cevabınızın ilk cümlesinden bahsediyorum: “Yuvalanmayan ve geçişi olmayan mükemmel bir eşleşme bulmanın neden zor olduğunu düşünebilirim.” Bu görev JeffE'nin yazdığı nedenden dolayı kolaydır.
Tsuyoshi Ito,

2
Ayrılma faktörü probleminin (her rengin en fazla bir kenarı) empoze ettiği renk kısıtlaması olmadan, maksimum ayrışma eşleşmelerini bulmak da kolaydır.
Jeffε

1

Bu yaklaşım işe yaramıyor: karıştırılan kareyi birbiriyle eşleştirerek iki harf alarak ayrıştırmak kareleri karıştırmamaya neden olmaz ... Aşağıdaki Radu yorumlarına bakın.


Σ

S(XY)A(X,Y)(1)A(aX1,birX2Y1Y2)bir(X1,Y1)bir(X2,Y2)(2)bir(ε,ε)ε(3)
birΣε

X1Y1Y1X2Y2Y1Y2X1X2

birbcbirbdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(tarafından 3)bir(d,d)bir(ε,ε)(tarafından 3)bir(ε,ε)bir(ε,ε)bir(ε,ε)(tarafından 2)3εyani başarı

0011

S(0011)bir(0,011)bir(ε,ε)bir(1,1)bir(1,1)*ε

XY


ε

Sanmıyorum
Serge Gaspers

ε

İadeler için teşekkürler; Dilbilgisini biraz değiştirdim ve hatta işe yarayabileceği konusunda küçük bir sezgim bile var.
Sylvain

3
ε , fakat 00000110 bir kare değil. Ayrıca, bir kare olan 100110101010 için türev yok gibi görünüyor.
Radu GRIGore

1

Güncelleme: Tsuyoshi Ito'nun yorumlarda işaret ettiği gibi, bu algoritma üssel çalışma süresine sahiptir.

Orijinal yayın:

İşte bunu Gerçek Dünyada nasıl programlayacağım.

Bize bir S = (S [1], ..., S [n]) dizgisi verilmiştir. Her önek için S_r = (S [1], ..., S [r]), dizi çiftleri {(T_i, U_i)} dizisi vardır, öyle ki S_r (T_i, U_i), ve T_i bir U_i önekidir (yani U_i '' T_i ile başlar). S_r'nin kendisi bir kare ise ve sadece eğer bu set T_i = U_i olan bir çift (T_i, U_i) içeriyorsa.

Şimdi, tüm bu çiftleri oluşturmamıza gerek yok; sadece T_i kopyasını çıkartarak elde edilen U_i dizgisinin V_i sonekini yaratmamız gerekiyor. Bu, (muhtemelen üssel) sayıdaki alakasız kopyaları ortadan kaldıracaktır. Şimdi S_r bir karedir ve eğer sadece bu son ekler kümesi boş dize içeriyorsa. Böylece algoritma şu şekilde olur:

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

Örneğin, S AABAAB ise:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

Giriş dizesinin yarısından daha uzun olan tüm son ekleri atabiliriz, bu nedenle aşağıdakileri basitleştirir:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

Bunu C ++ 'da programladım ve burada verilen tüm örnekler üzerinde çalışıyor. İlgilenen olursa kodu gönderebilirim. Soru şu: SuffixSet'in boyutu polinomdan daha hızlı büyüyebilir mi?


3
Bunu da denedim, ancak deneyler, SuffixSet'in boyutunun orijinal dize (AB) ^ n ise n'de üssel olarak büyüdüğünü gösteriyor.
Tsuyoshi Ito,

1

EDIT: Bu yanlış bir cevaptır.


Sylvain, ne yazık ki bu "karışık kareler" için uygun olmayan bir RCG önerdi. Ancak, bir tane olduğunu düşünüyorum (EDIT: Bir RCG değil, Kurt'un aşağıdaki yorumlarına bakınız!) , Ki şöyle:

S(Y)bir(ε,Y)(1)bir(X,ZY)bir(XZ,Y)(2)bir(birX,birY)bir(X,Y) her şey için birΣ(3)bir(ε,ε)ε(4)

birbir'bb'birbbir'b'(1,2)(3)(2)

100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

Bu dilbilgisinin gerçekten de "karışık kareler" i yakaladığını resmi olarak ispat etmedim, ancak çok zor olmamalıdır. Sylvain, zaten RCG'ler için karar sorununun polinom olduğunu belirtti.


Polinom zamanında bunun nasıl uygulanabileceğini anlamıyorum: 000102030'dan başlarsanız ulaşabilirsiniz.bir(x,ε)23

5
@DananCL, İkinci düşüncede ... Üretim kurallarının RHS'sindeki parametrelerin girdilerin bitişik aralıklarında olması gerekiyor mu? Boullier belgesindeki tanımda açıkça ifade edildiğini görmedim, ancak bu nasıl kullanıldığı anlaşılıyor. Ayrıştırma algoritmasının çalışma zamanının analizinde, cümlelere olası argüman sayısının O (n ^ 2h) olduğu, burada h'nin cümle maddelerinin maksimum ariteliği ve n'nin giriş uzunluğu olduğu söylenir. Dilbilginizde, genel olarak XZ orijinal girişte bitişik olmayacaktır.
Kurt

3
@Kurt, sanırım kusuru buldun. Başka bir makalede ("Çince sayılar, MIX, Scrambling ve Range Birleştirme Gramerleri"), Boullier açıkça şunu belirtir: "Elbette, yalnızca ardışık aralıklar yeni aralıklar içinde birleştirilebilir. bir ikame mekanizmasıyla sınırlara bağlı kalması gerekiyordu. " Bu muhtemelen gramerimin geçerli bir RCG olmadığı, Radu'nun şüphesinin makul olduğu ve bu yaklaşımın da işe yaramadığı anlamına geliyor.
DaniCL

2
@Kurt doğru. Bitişik sınırlama olmadan, NP-tam dili UNARY 3PARTITION'ı tanıyan bir dizi üretim kuralı oluşturabileceğime eminim. Negatif olmayan tamsayıların herhangi biri, dilin (1 * 0) ^ * dilinde bir dize ile aynı anda kodlanabilir. UNARY 3PARTITION, kodlanmış kümesi 3 toplam alt gruba ayrılabilen tüm dizelerin kümesidir, hepsi aynı toplamdadır. (Bkz en.wikipedia.org/wiki/3-partition_problem .)
Jeffε

1
UNARY 3PARTITION için dilbilgisi: S (X0Y0Z) -> A (e, X0, Y0, Z); Bir (W, 1X, Y, Z), A (W, X, 1Y, Z), bir (W, X, Y, 1 Z) -> A (W1, X, Y, Z); Bir (W, 0X, 0Y, 0Z) -> B (W, XYZ); B (W, e) -> E; B (W X0Y0Z) -> C (W, W, X0, Y0, Z); C (W, 1V, 1X, Y, Z), -C (W, 1V, X, 1Y, Z), -C (W, 1V, X, Y, 1 Z) -> C (W, V, X, Y, Z); C (W, e, X, Y, Z) -> B (W, XYZ)
Radu GRIGore
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.