İki normal dilin birleştirilmesi ne zaman açıktır?


16

Verilen diller A ve , en kendi birleştirme diyelim olduğu kesin tüm kelimeleri eğer , bir ayrışma tam orada ile ve ve belirsiz aksi. (Bu özellik için belirlenmiş bir terim olup olmadığını bilmiyorum - aramak zor bir şey!) Önemsiz bir örnek olarak, kendisiyle birleştirilmesi belirsizdir ( ), ancak kendisiyle birleşmesi açık değildir.BABwABw=abaAbB{ε,a}w=a=εa=aε{a}

İki normal dilin birleştirilmesinin kesin olup olmadığına karar vermek için bir algoritma var mı?


1
Gah, bu tamamen birinci sınıf CS problemi, değil mi? Dürüst olmak gerekirse, çok fazla denemedim; Literatürde bir yerde bunun için yerleşik bir algoritma olmasını umuyordum ve tekerleği yeniden icat etmek zorunda kalmam. Buraya yazılım yazıyorum; Sadece birkaç CS dersi aldım (birkaç yıl önce) bu yüzden temel olarak Wikipedia'dan başlıyorum. Kimsenin cevabı için çalışmak istemeyen birini sevmediğini biliyorum, bu yüzden bana bir algoritma vermek yerine bir ders kitabı ya da kağıt ya da bana işaret edebileceğiniz bir şey varsa, bu yararlı olacaktır! Teşekkürler!
rstern

Bunu bir yorum olarak ekledim, çünkü nispeten konu dışı, ama belki de sizi biraz yardıma götürebilir. Unicode Konsorsiyumu, diller arasındaki ortaklığı belirlemek için birkaç işleme sahiptir. Onların sitesinde çok bilgilendirici bir bağlantı okudum ama benim hayatım için bunun yerine bir cevap yapmak bugün bulamadım. Bu araştırma için zaman varsa burada onların SSS sayfası unicode.org/faq
htm11h

Yanıtlar:


10

İpucu: ve B için DFA'lar verildiğinde , A B'de en az iki farklı ayrışmaya sahip kelimeleri kabul eden bir NFA oluşturun . NFA için standart NFA iki kopya izler bir B (için DFAS birleştirilmesiyle oluşturulan A ve B ile ε gelen geçiş sağlanması, geçişler) A için B , iki farklı noktalarda gerçekleşir.ABABABABϵAB


İpucu için teşekkürler! Anlıyorsam, belirsiz kelimeler için bir NFA oluşturabilir ve sonra otomayı boşluk için test edebilirim. Zor kısmı "dan geçiş sağlamak gibi görünüyor A'ya karşı B iki farklı noktada olur". Bunu iki A B DFA'nın çapraz ürününü (?) Alıp tüm ( A -terminal, A -terminal) ürün durumlarını silmekten başka nasıl yapacağımdan emin değilim - el yıkama , geçiş A B NFA bir B DFA fikri ile screw AABABABAAABABA-terminal. Sesler, um, verimsiz olsa da; yazılıma uygun bilinen bir algoritma var mı?
rstern

Evet, kulağa çok verimli gelmiyor, ancak her zaman akıllı bir şekilde yapma seçeneği var. Bu sorun için belirli bir algoritmanın farkında değilim, ama biri olabilir.
Yuval Filmus

7

Güncellendi (Yuval Filmus sayesinde).

A ∗' nın iki dili ve Y verildiğinde , X - 1 Y olsunXYA o İstemX, Yve sadece dil eğer açık olanX-1xY'ninY-1bir+boştur.

X1Y={uAthere exists xX such that xuY}YX1={uAthere exists xX such that uxY}
XYX1XYY1A+

Kanıt . Diyelim ki belirsiz. Daha sonra bir kelime vardır u üzerinden iki Ayırma sahiptir X, Y , ki U = x 1 y 2 = x 2 y 1 , x 1 , x 2x ve y 1 , y 2Y . Genelliği kaybetmeden x 1'in x 2 öneki olduğunu varsayabiliriz , yani x 2 = xXYuXYu=x1y2=x2y1x1,x2Xy1,y2Yx1x2Bazı z A + için 1 z . Bunu u = x 1 y 2 = x 1 z y 1 , bu nedenle y 2 = z y 1 takip eder . Böylece z X - 1 X Y Y - 1 .x2=x1zzA+u=x1y2=x1zy1y2=zy1zX1XYY1

Şimdi bazı boş olmayan kelimeler z içerdiğini varsayalım . Sonra x 1 , x 2X ve y 1 , y 2Y vardır, öyle ki x 2 = x 1 z ve y 2 = z y 1 olur . Bunu takip eder x 2 y 1 = x 1 z y 1 =X1XYY1zx1,x2Xy1,y2Yx2=x1zy2=zy1x2y1=x1zy1=x1y2 and hence the product XY is ambiguous.

If X and Y are regular, then both X1X and YY1 are regular and thus X1XYY1 is also regular (see Yuval's answer for an automaton accepting this language).


What if z is the empty word?
Yuval Filmus

Ooops. I update.
J.-E. Pin
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.