寻找有趣的字谜
假设和是两个长度相同的字符串。两个字符串的拼写是双射映射这样每个。a1a2…ana1a2…ana_1a_2\ldots a_nb1b2…bnb1b2…bnb_1b_2\ldots b_np:[1…n]→[1…n]p:[1…n]→[1…n]p:[1\ldots n]\to[1\ldots n]ai=bp(i)ai=bp(i)a_i = b_{p(i)}iii 同一对字符串可能不止一个拼写。例如,如果 `abcab`和我们有和等。a=a=a=b=b=b=cababp1[1,2,3,4,5]→[4,5,1,2,3]p1[1,2,3,4,5]→[4,5,1,2,3]p_1[1,2,3,4,5]\to[4,5,1,2,3]p2[1,2,3,4,5]→[2,5,1,4,3]p2[1,2,3,4,5]→[2,5,1,4,3]p_2[1,2,3,4,5] \to [2,5,1,4,3] 我们要说的是,词法的权重 是一个人必须在第一个字符串中进行剪切的次数,才能获得可以重新排列以获取第二个字符串的块。形式上,这是的值个数,其中。也就是说,它是在该点的数量不会不正好1.适用于例如增加,和,因为切割一次,进入块和,和切口4次,分为五个大块。w(p)w(p)w(p)pppi∈[1…n−1]i∈[1…n−1]i\in[1\ldots n-1]p(i)+1≠p(i+1)p(i)+1≠p(i+1)p(i)+1\ne p(i+1)pppw(p1)=1w(p1)=1w(p_1) = 1w(p2)=4w(p2)=4w(p_2) = 4p1p1p_11234512345p2p2p_212345 假设存在两个字符串和的拼写。然后,至少一个词法必须具有最小的权重。可以说这是最轻的。(可能有多个最简单的拼写;我不在乎,因为我只对权重感兴趣。)aaabbb 题 我想要一种算法,给定存在两个字符串的两个字串,它们可以有效地产生两个字符串最轻的字串的精确权重。如果该算法还能产生最轻巧的字词排序,也可以,但不是必须的。 生成所有拼写并对其进行加权是一件相当简单的事情,但是可能会有很多,所以我宁愿直接找到轻型拼写的方法。 动机 引起该问题的原因如下。使计算机搜索字典并查找字谜(包含完全相同的字母的单词对)非常容易。但是产生的许多字谜没有意思。例如,在《韦伯斯特第二国际词典》中找到的最长的例子是: 胆囊 十二指肠造口术十二指肠胆囊造口术 这个问题应该清楚:这些都是索然无味,因为他们承认一个很轻的anagramming,简单地交流cholecysto,duedeno和stomy段,对于一个体重2.在另一方面,这种更短的例子是更令人惊讶和有趣: 海岸线 剖面 这里最轻的字谜权重为8。 我有一个程序使用此方法来定位有趣的字谜,即所有字谜的权重很高的字谜。但这是通过生成并加权所有可能的拼写来实现的,这很慢。