如果L和M是链表,则在什么条件下LM = ML

时间:2013-03-16 03:21:21

标签: algorithm language-agnostic linked-list

这是来自Ullman的List Data Model的问题

  • 如果L和M是链表,那么在什么条件下LM = ML?

我正在阅读计算机科学基础书。问题来自http://i.stanford.edu/~ullman/focs/ch06.pdf 6.3.2

3 个答案:

答案 0 :(得分:3)

我能想到两个最重要的条件:

其中一个清单是空的。

{}+{1,2,3} = {1,2,3}+{} = {1,2,3}

一个列表是另一个列表的多个实例的串联。

{1,2,3}+{1,2,3,1,2,3} = {1,2,3,1,2,3}+{1,2,3} = {1,2,3,1,2,3,1,2,3}

两个附注:1)在第一个条件中,空列表{}是串联操作的标识。 2)条件M=L实际上是条件二的特殊情况。

编辑:感谢@ jwpat7,这是另一个条件:

{2,3,2,3}+{2,3,2,3,2,3} = {2,3,2,3,2,3}+{2,3,2,3}

两个列表都是同一列表的多个实例的连接,在上面的示例中为{2,3}

答案 1 :(得分:3)

不失一般性,我们可以假设| L | < = | M |。 (否则只是反转标签L和M的分配。)然后我们有LM = ML = LAL,其中M = LA = AL。请注意,我们现在有一个新版本的相同问题,LA取代LM。这说明我们可以给出一个递归条件:

LM = ML if and only if M = AL = LA for some list A 

答案 2 :(得分:2)

有一个鲜为人知的定理(最近在这里使用:Detect whether sequence is a multiple of a subsequence in Python

根据该定理,假设x和y是字符串。然后xy = yx 如果只有 x和y都是某个字符串z的幂,即两者都是相同字符串z的连接,即x = zzz..z(k次)和y = zz..z(l次)。

用“普通旧”链接列表来谈论基本相同。

我相信通过归纳证明其中一个琴弦的长度有效。

(不幸的是,我曾经记得这个定理的名字,但我已经忘记了,所以找不到你的参考)。