ve aynı uzunlukta iki dize olduğunu söyleyin . Bir anagramming iki dizgi örten eşleme şekilde her .b 1 b 2 … b n p : [ 1 … n ] → [ 1 … n ] a i = b p ( 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 ]cabab
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 2 ) = 4 p 1 p 212345
123
45
12345
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.)b
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
, duedeno
ve stomy
bö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.
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.