寻找有趣的字谜


31

假设和是两个长度相同的字符串。两个字符串的拼写是双射映射这样每个。a1a2anb1b2bnp:[1n][1n]ai=bp(i)i

同一对字符串可能不止一个拼写。例如,如果 `abcab`和我们有和等。a=b=cababp1[1,2,3,4,5][4,5,1,2,3]p2[1,2,3,4,5][2,5,1,4,3]

我们要说的是,词法的权重 是一个人必须在第一个字符串中进行剪切的次数,才能获得可以重新排列以获取第二个字符串的块。形式上,这是的值个数,其中。也就是说,它是在该点的数量不会正好1.适用于例如增加,和,因为切割一次,进入块和,和切口4次,分为五个大块。w(p)pi[1n1]p(i)+1p(i+1)pw(p1)=1w(p2)=4p11234512345p212345

假设存在两个字符串和的拼写。然后,至少一个词法必须具有最小的权重。可以说这是最轻的。(可能有多个最简单的拼写;我不在乎,因为我只对权重感兴趣。)ab

我想要一种算法,给定存在两个字符串的两个字串,它们可以有效地产生两个字符串最轻的字串的精确权重。如果该算法还能产生最轻巧的字词排序,也可以,但不是必须的。

生成所有拼写并对其进行加权是一件相当简单的事情,但是可能会有很多,所以我宁愿直接找到轻型拼写的方法。


动机

引起该问题的原因如下。使计算机搜索字典并查找字谜(包含完全相同的字母的单词对)非常容易。但是产生的许多字谜没有意思。例如,在《韦伯斯特第二国际词典》中找到的最长的例子是:

胆囊
十二指肠造口术十二指肠胆囊造口术

这个问题应该清楚:这些都是索然无味,因为他们承认一个很轻的anagramming,简单地交流cholecystoduedenostomy段,对于一个体重2.在另一方面,这种更短的例子是更令人惊讶和有趣:

海岸线
剖面

这里最轻的字谜权重为8。

我有一个程序使用此方法来定位有趣的字谜,即所有字谜的权重很高的字谜。但这是通过生成并加权所有可能的拼写来实现的,这很慢。


出于好奇,您如何找到成对的字谜?您是否在相同长度的所有单词中进行蛮力搜索?O(n2)
Pedro

4
不,当然不是。您将每个单词转换为具有相同字母字母顺序的规范形式。(例如,cholecystoduodenostomyis 的规范形式ccddeehlmnooooossttuyy。)当且仅当两个词具有相同的规范形式时,它们才是字谜。您将单词存储在哈希表中,并以其规范的形式作为关键字,每当发现冲突时,便有一个字谜。
Mark Dominus

我现在在我的博客上拥有或多或少的相关信息:(α) (β) (γ) (δ)
Mark Dominus

Answers:


21

此问题被称为“最小公共字符串分区问题”。(更确切地说,最小公共字符串分区问题的答案等于您问题的答案加1。)不幸的是,即使存在以下限制,它也是NP难的:每个字母在每个输入字符串中最多出现两次,如Goldstein,Kilman和Zheng [GKZ05]所证明的。这意味着除非P = NP,否则不存在多项式时间算法。(当然,如果每个字母最多出现一次,那么问题就很简单了,因为只有一个字谜。)

从积极方面来说,相同的作者[GKZ05]在相同的限制下给出了多项式时间1.1037近似算法。(A“1.1037- 近似算法 ”是指可以不输出了正确的答案的算法但是保证输出的值使得 ≤1.1037 )。它们也给一个线性时间4近似算法下的较弱的限制是每个字母在每个输入字符串中最多出现3次。

[GKZ05] Avraham Goldstein,Petr Kolman和Jie Zheng。最小的常见字符串分区问题:硬度和近似值。 电子期刊,2005年第12期,R50。http: //www.combinatorics.org/ojs/index.php/eljc/article/view/v12i1r50



9

这是对伊藤刚义的回答的后续,总结了他引用的GKZ05论文中最相关的部分。

本文证明了最大独立集(MIS)问题的简化。构造一个图其顶点为对,使得和。每当无法通过语法分析将所有映射到和映射和将顶点和(其中)与边连接和。这很容易发现;如果满足以下条件之一,则这样的映射是不可能的:G(i,j)ai=bjai+1=bj+1(i,j)(k,)ikiji+1j+1kk+1+1

  1. i=kj
  2. i+1=kj+1
  3. i+1<k和与不相交{j,j+1}{,+1}

假设结果图具有最大独立的大小集。那么最小的歧义权重就是,其中是字符串和的长度。(反之亦然:低权重的字词转换直接转化为的大MIS 。有关详细信息,请参见本文的第4-5页。)Gsns1nabG

例如,考虑两个字符串yttrioustouristy。对应的图具有两个顶点,一个用于共享ou对,一个用于共享ri对。还有就是顶点之间没有边,因为它可能有一个映射同时具有anagramming ououriri; 或可以检查以上三个条件是否全部失败。因此,曲线图显然有大小的MIS,最小重量anagramming确实8-2-1 = 5,对应于anagramming ↔ “。s=2y|t|t|ri|ou|st|ou|ri|s|t|y

另一方面,考虑deratertreader。这次,图形具有三个顶点:

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

2和3不兼容,而1和3不兼容,但是1和2兼容。因此,独特MIS具有大小,并且包含顶点1和2的重量对应的anagramming 7-2-1 = 4是↔ 。s=2der|a|t|e|rt|r|e|a|der


2
感谢您的后续帖子,但这并不是您问题的NP完整性的证明。为了证明问题的NP完全性,您必须将一些已知的NP完全性问题简化为问题,这就是[GKZ05]的定理2.2。您在此处介绍的内容([GKZ05]的引理1.1)是朝相反方向的缩小。
伊藤刚(Tsuyoshi Ito)2012年

这是一个很好的公式。一项微不足道的更改在概念上是一个小的简化(至少对我而言):与其在不兼容的线对之间绘制边并要求最大的独立集,不如在兼容的线对之间绘制边并要求最大的派系。(我发现更容易思考“我们可以保持在一起的最大对数是多少”。)
ShreevatsaR

2

它没有涵盖您所想到的确切算法(伊藤刚之答案就做了),而是试图解决发现“有趣的”字谜的潜在问题……

我的第一个想法是在编辑距离上使用一些变体,其中原子更改是根据其“兴趣”加权,而不是通常的“困难”或“易混淆”加权。当然,您似乎不太可能以这种方式有效地编码真正有趣的转换,因为它们很可能是非本地的,因此会遇到MIS等NP完全问题。

因此,第二个想法是在单词之间构造字母到字母的对齐方式(例如机器翻译对齐方式),然后对对齐方式本身进行评分以使其“有趣”(例如,计算将相邻字母与非字母对齐的对齐方式)相邻字母,或每个路线交叉多少个路线等;然后通过对数线性模型等将它们全部组合在一起)。

第三个想法是完全放弃看字谜本身的结构,而只看单词的语义。通常使字谜“有趣”的是所涉及单词的含义之间的不一致。因此,请尝试在WordNet中计算距离或类似方法。


0

这个问题可以用排列组来表述。

现在,置换组包含所有“字谜移动”,包括原始(交换两个字母)和原始移动序列的组合。似乎您只对可能排列的一部分感兴趣。我将尝试定义这些。

首先,回顾排列的表示法,即所谓的循环表示法

  • ()表示无排列。
  • (1)表示将1与1交换,这也不是置换。
  • (12)表示1和2被交换。
  • (123)表示1代替2,而2代替3,该1代替1(旋转)。
  • 等一个

这些简单的“循环”组成来描述更复杂的排列。

您感兴趣的动作似乎是(长度为的单词):n

  • 成对的单字符交换:这些是诸如的交换(12)
  • 交换两个连续字符对:这些是形式的置换,其中和和(a b)(a+1 b+1)a>0b<a+1b+1n
  • ...
  • 交换n个连续字符对:这些是形式的置换, 其中,和。(a b)(a+1 b+1)(a+i1 b+i1)a>0a+i1bb+i1n

这些动作构成了算法的基础。您感兴趣的是找到这些移动的最小顺序,以从一个单词移到另一个单词。

除了蛮力搜索外,我不知道有什么算法可以计算出这种情况,但至少现在(我希望)对原始运动的内容有了更清晰的描述(我希望如此)。(也许我们中间的一些小组理论家可以指出一种合适的算法。)


1
谢谢。也许我很悲观,但是在我看来,这种方法将很困难。我认为除非我们首先找出感兴趣的排列组,否则组理论方法不会取得成果,并且该排列因输入字符串而异。我认为有限组的有效表示是一个非常深刻和丰富的问题​​。但是我想弄错了。
Mark Dominus

1
“您感兴趣的是找到这些动作中从一个单词到另一个单词的最小顺序。”我认为这是不正确的。例如,如果n = 4,交换(1 2)的权重为2,但是交换(2 3)的权重为3。您的计数方式无法区分这两个。
伊藤刚(Tsuyoshi Ito)

我深夜回答。我不正确理解体重测量方法。实际上,我现在还不了解。我虽然您想允许移动字母块,这就是为什么我要麻烦定义这些原语的原因。我的回答可能会提供启发,因此即使它是错误的,我也将保留它。
戴夫·克拉克

0

对于胆囊十二指肠造口术/十二指肠胆囊造口术,我注意到,如果为每个字符分配一个数字,描述该数字作为增量移动了多少,那么您会看到类似7 7、8 -7s和6 0的数字。这是不对的,因为可能重复了一些字符(第二个c仅向前移动了2个,而不向后移动了7个),但是仍然非常“游程长度可编码”,因为您连续看到相同的增量。

与海岸线/断面相比,您看到的像是(+2)(+ 5)(+ 5)(-3)(-1)(+ 3)...。少了“可编码游程长度”。

也许三角洲的随机性可以使您对七字谜有多有趣?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.