İlginç anagramları bulma


31

ve aynı uzunlukta iki dize olduğunu söyleyin . Bir anagramming iki dizgi örten eşleme şekilde her .b 1 b 2b n p : [ 1 n ] [ 1 n ] a i = b p ( i ) ia1a2anb1b2bnp:[1n][1n]ai=bp(i)i

Aynı tel çifti için birden fazla program olabilir. Örneğin, `abcab` ve , ve , diğerleri arasında.b = p 1 [ 1 , 2 , 3 , 4 , 5 ] [ 4 , 5 , 1 , 2 , 3 ] p 2 [ 1 , 2 , 3 , 4 , 5 ] [ 2 , 5 , 1 , 4 , 3 ]a=b=cababp1[1,2,3,4,5][4,5,1,2,3]p2[1,2,3,4,5][2,5,1,4,3]

Anagramlama ağırlığının , ikinci ipi elde etmek için yeniden düzenlenebilecek topakları almak için birinci ipte yapması gereken kesim sayısı olduğunu söyleyeceğiz . Biçimsel olarak, değerlerin bu sayı olan . Yani, bu noktaların sayısı, bir etmez değil , tam olarak 1.For örneğin artış ve için, keser parçalar halinde, bir kez ve ve kesimler dört kez, beş parçaya.p i [ 1 n - 1 ] p ( i ) + 1 p ( i + 1 ) pw(p)pi[1n1]p(i)+1p(i+1)pw ( p 2 ) = 4 p 1 p 2w(p1)=1w(p2)=4p11234512345p212345

Diyelim ki ve iki dizgisi için bir anagram var . O zaman en az bir anagramın ağırlığı en az olmalıdır. Diyelim ki bu en hafif . (Çok hafif anagramlamalar olabilir; umrumda değil, çünkü yalnızca ağırlıklarla ilgileniyorum.)bab

Soru

Anagramlamanın mevcut olduğu iki dizge verilen ve iki dizenin en hafif anagramlamanın kesin ağırlığını verimli bir şekilde veren bir algoritma istiyorum . Algoritmanın aynı zamanda en hafif bir anagramlama vermesi de sorun değil, ama gerekmiyor.

Bütün anagramların üretilmesi ve tartılması oldukça basit bir meseledir, ancak çok fazla olabilir, bu yüzden doğrudan ışık programlarını bulan bir yöntemi tercih ederim.


Motivasyon

Bu sorunun ilgi sebebi aşağıdaki gibidir. Bilgisayarın sözlüğü aramasını ve anagramları, aynı harfleri içeren sözcük çiftlerini bulmasını sağlamak çok kolaydır. Ancak üretilen anagramların çoğu ilgi çekici değildir. Örneğin, Webster’ın İkinci Uluslararası Sözlüğü’nde bulunabilecek en uzun örnekler:

kolesistoduodenostomi
duodenokolekistostomi

Sorun açık olmalıdır: onlar çok hafif anagramming itiraf çünkü bu ilginç olduklarını basitçe borsaları cholecysto, duedenove stomybölümler Öte yandan 2. bir ağırlık için, bu çok daha kısa bir örnek daha şaşırtıcı ve ilginç:

sahil şeridi
kesit

Burada en hafif anagram 8 ağırlığa sahiptir.

İlginç bir program bulmak için bu yöntemi kullanan bir program var, yani tüm programların yüksek ağırlıklı olduğu bir program. Ancak bunu, yavaş olan tüm olası anagramlamaları üretip tartılarak yapar.


Sadece meraktan, anagram çiftlerini nasıl buluyorsun? Aynı uzunlukta tüm sözcükleri içeren bir kaba kuvvet araması yapıyor musunuz? O(n2)
Pedro,

4
Hayır tabii değil. Her bir kelimeyi aynı harfleri alfabetik sıraya sahip bir kanonik forma dönüştürürsünüz. (Örneğin, kanonik şekli cholecystoduodenostomyşudur ccddeehlmnooooossttuyy.) İki sözcük, eğer aynı kanonik biçime sahipse anagramlardır. Kelimeleri, kanonik biçimleriyle anahtarlanmış bir karma tablosunda saklarsınız ve bir çarpışma bulduğunuzda, bir anagramınız olur.
Mark Dominus

Artık blogumda bununla ilgili daha fazla veya daha az ilgili bilgiye sahibim: (α) (β) (γ) (δ)
Mark Dominus

Yanıtlar:


21

Bu sorun “en az yaygın dize bölümü sorunu” olarak bilinir. (Daha doğrusu, en az ortak dize bölümü sorunundaki cevap, sorununuzdaki cevaba eşittir artı 1). Ne yazık ki, kısıtlı olsa bile Her bir harf, Goldstein, Kilman ve Zheng [GKZ05] tarafından kanıtlandığı gibi, giriş dizelerinin her birinde en fazla iki kez oluşur. Bu, P = NP olmadığı sürece hiçbir polinom-zaman algoritması bulunmadığı anlamına gelir. (Tabii ki, her bir mektup en fazla bir kere meydana gelirse, o zaman sorun önemsizdir, çünkü sadece bir program vardır.)

Olumlu tarafta, aynı yazarlar [GKZ05] aynı sınırlama altında bir polinom-zaman 1.1037-yaklaşım algoritması verir. (Bir “1.1037- yaklaşım algoritması ” doğru yanıt çıkışını bir algoritma anlamına gelmektedir Bir ancak çıkış için bir değer garanti B , öyle ki birB ≤ 1,1037 bir Ayrıca altında doğrusal süresi 4-yaklaşma algoritması verir.) Her harfin giriş dizelerinin her birinde en fazla üç defa meydana gelmesi konusunda daha zayıf kısıtlamalar.

[GKZ05] Avraham Goldstein, Petr Kolman ve Jie Zheng. Minimum ortak dize bölümü problemi: Sertlik ve yaklaşımlar. Elektronik Kombinatorik Dergisi , 12, makale R50, 2005. http://www.combinatorics.org/ojs/index.php/eljc/article/view/v12i1r50



9

Bu, bahsettiği GKZ05 makalesinin en alakalı bölümünü özetleyen Tsuyoshi Ito'nun yukarıdaki cevabını takip ediyor .

Kağıt, Maximal Independent Set ( MIS ) probleminde bir azalma olduğunu kanıtlamıştır . Bir grafiktir Construct olan noktalar vardır çiftleri ( i , j ) bu şekilde bir i = b j ve bir i + 1 = b j + 1 . Bağlan köşe ( i , j ) ve ( k , ) (burada i k bir anagramming tüm haritasına ki imkansız olduğunda bir kenar ile) iG(i,j)ai=bjai+1=bj+1(i,j)(k,)ik ve i + 1 j + 1 ve k ve k + 1 + 1 . Bunu tespit etmek kolaydır; aşağıdakilerden biri geçerli olduğunda böyle bir haritalama kesinlikle mümkün değildir:iji+1j+1kk+1+1

  1. ve j i=kj
  2. ve j + 1 i+1=kj+1
  3. ve { j , j + 1 } , { , + 1 } değerinden ayrıktıri+1<k{j,j+1}{,+1}

Sonuçta ortaya çıkan grafiğinin maksimum bağımsız bir beden büyüklüğü s'ye sahip olduğunu söyleyin . O zaman asgari anagram ağırlığı tam olarak n - s - 1'dir , burada n , a ve b dizelerinin uzunluğudur . (Konuşmalar ayrıca şunları tutar: düşük ağırlıklı bir anagramlama, G için doğrudan büyük bir MIS'ye dönüşür . Ayrıntılar için, bkz. Sayfa 4-5).)Gsns1nabG

yttrioustouristyouriououriris=2y|t|t|ri|ou|st|ou|ri|s|t|y

Öte yandan, deraterve düşünün treader. Bu kez grafiğin üç köşesi vardır:

  1. DErater + treaDEr
  2. dERater + treadER
  3. deratER + treadER

s=2der|a|t|e|rt|r|e|a|der


2
Takip yazısı için teşekkür ederim, ancak bu sorununuzun NP eksiksizliğinin bir kanıtı değildir. Probleminizin NP eksiksizliğini kanıtlamak için, probleminizin bilinen NP komple problemini azaltmak zorundasınız ve bu [GKZ05] Teoremi 2.2'dir. Burada sunduklarınız ([GKZ05] 'in Lemma 1.1'i) zıt yönde bir azalmadır.
Tsuyoshi Ito

Bu güzel bir reformülasyon. Kavramsal olarak küçük bir basitleştirme olan önemsiz bir değişiklik (en azından benim için): uyumsuz olan çiftler arasında kenar çizmek ve maksimum bağımsız küme istemek yerine, uyumlu çiftler arasında kenarları çizebilir ve maksimum klik için sorabiliriz. ("Birlikte tutabileceğimiz maksimum çift sayısı nedir?" Hakkında düşünmeyi daha kolay buluyorum.)
ShreevatsaR

2

Aklınızdaki tam algoritmayı kapsamıyor ( Tsuyoshi Ito'nun cevabını veriyor), fakat "ilginç" anagramları bulma probleminin altında kalmaya çalışıyor ...

İlk düşüncem, atomik değişikliklerin normal "zorluk" veya "karıştırılabilirlik" ağırlıklarından ziyade "ilginçliklerine" göre ağırlıklandırıldığı kurgu-mesafe üzerinde bir miktar değişiklik kullanmaktı. Elbette, gerçekten ilginç dönüşümleri bu şekilde verimli bir şekilde kodlayabilmeniz pek olası görünmüyor, çünkü bunlar yerel değiller ve bu nedenle de MIS'in NP-tamamlayıcı sorunlarına giriyorlar.

Bu nedenle, ikinci düşünce, kelimeler (harflerin makine çevirisi hizalamaları) arasında bir harf-harf hizalaması oluşturmak ve daha sonra "ilginçlik" için hizalamaları kendilerini puanlamak (örneğin, bitişik harfleri bitişik olmayan harfleri saymak) olacaktır. bitişik harfler veya her bir hizalamanın kaç hizalamayı geçtiği vb.

Üçüncü fikir, anagramlamanın kendi yapısına bakmaktan tamamen vazgeçmek, kelimelerin anlamlarına bakmaktır. Genellikle bir anagramı "ilginç" yapan şey, ilgili kelimelerin anlamları arasındaki uyumsuzluktur. Öyleyse, WordNet'teki uzaklıklarını hesaplamak gibi bir şey deneyin.


0

Problem, permütasyon grupları açısından ifade edilebilir .

Şimdi bir permütasyon grubu, hem ilkel (iki harf değiştiren) hem de ilkel hareket dizilerinin birleşiminden oluşan tüm "anagram hareketlerini" içerir. Görünen o ki, muhtemel permütasyonların sadece bir alt grubuyla ilgileniyorsun. Bunları tanımlamaya çalışacağım.

Öncelikle, sözde döngü gösterimi olarak adlandırılan permütasyon gösterimini hatırlayın :

  • ()
  • (1)
  • (12)
  • (123)
  • ve bir tane

Bu basit 'çevrimler' daha karmaşık permütasyonları tanımlamak için oluşturulmuştur.

n

  • tek karakterli çiftlerin takasları: bunlar gibi takaslardır.(12)
  • (a b)(a+1 b+1)a>0b<a+1b+1n
  • ...
  • (a b)(a+1 b+1)(a+i1 b+i1)a>0a+i1bb+i1n

Bu hamle algoritma için temel oluşturur. İlgilendiğiniz, bir sözcükten diğerine geçmek için bu hareketlerin en küçük sırasını bulmak.

Bunu hesaplamak için kaba kuvvet arama dışında hiçbir algoritma bilmiyorum, ama en azından şimdi ilkel hareketlerin ne olduğu hakkında daha net bir açıklama var. (Belki de aramızdaki bazı grup teorisyeni uygun bir algoritmaya işaret edebilir.)


1
Teşekkürler. Belki kötümserim ama bana göre bu yaklaşım zor olacak. Hangi teorik grubun ilgi alanına girdiğini ve giriş dizgilerine bağlı olarak değişiklik göstermediğini fark etmeden grup teorik bir yaklaşımın meyve vereceğini sanmıyorum. Sonlu grupların verimli temsilinin son derece derin ve zengin bir problem olduğunu düşünüyorum. Ama yanılmayı istiyorum.
Mark Dominus,

1
“İlgilendiğiniz şey, bir sözcükten diğerine geçmek için bu hareketlerin en küçük sırasını bulmak.” Bunun doğru olduğunu sanmıyorum. Örneğin, n = 4 ise, takas (1 2) ağırlık 2, takas (2 3) ağırlık 3'tür. Sayma yönteminiz bu ikisini ayırmaz.
Tsuyoshi Ito

Gece geç saatte cevap verdim. Ağırlık ölçüsünü doğru anlamadım. Aslında, şimdi anlamıyorum. Harf bloklarına izin vermek istemenize rağmen, bu yüzden bu ilkellerin tanımlanmasındaki sıkıntıya girdim. Cevabım ilham verebilir, bu yüzden yanlış olsa bile bırakacağım.
Dave Clarke

0

Kolesistoduodenostomi / duodenokolekistostom için, bir delta olarak ne kadar hareket edildiğini açıklayan her bir karaktere bir sayı atadıysanız, 7 7, sonra 8 -7, sonra 6 0 gibi bir şeye sahip olacağınızı fark ettim. Bu doğru değildir, çünkü bazı karakterler tekrar edilmiş olabilir (ikinci c sadece 2 ileri geri hareket etti, geri 7 değil) vb. Ancak yine de çok fazla "çalışma uzunluğu kodlanabilir" çünkü aynı deltaları aynı sırada görüyorsunuz.

Kıyı şeridi / kesit alanı ile karşılaştırın, (+2) (+ 5) (+ 5) (- 3) (- 1) (+ 3) .... +7) ... çok daha az "çalıştırma uzunluğu kodlanabilir".

Belki de deltaların rasgeleliği, anagramın ne kadar ilginç olduğu konusunda size bir "puan" verebilir?

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.