【问题标题】:Find The Longest Word Sequence in Word Snake Game Problems在 Word Snake 游戏问题中找到最长的单词序列
【发布时间】:2021-10-17 07:32:39
【问题描述】:

我在玩 Word Snake 游戏,我正在徘徊是否可以使用算法解决这个游戏。

以下是游戏说明:

给定一袋短语(可能重复值的集合):S = {phrase1、phrase2、phrase3、 ...,短语N}

snake 是 S 中短语的有序列表,除了第一个短语外,短语中的第一个单词与前一个短语中的最后一个单词匹配。此外,短语i (其中 1 ≤ i ≤ N) 只能出现一次。

如何找到所有可能的蛇的最大长度?

示例:对于S = { 'A B' , 'B C' , 'B D' , 'C B' , 'C D'},最大长度为4,因为['A B', 'B C', 'C B', 'B D'] 是最长的蛇。

【问题讨论】:

  • 这是一个NP-hard问题,见en.m.wikipedia.org/wiki/Longest_path_problem
  • @n.1.8e9-where's-my-sharem。我不确定是不是。决策问题(使用所有短语查找是否存在最佳路径)绝对不是 NP-Hard。

标签: algorithm optimization dynamic-programming graph-algorithm


【解决方案1】:

这可能可以通过Eulerian Path problem 的优化问题的一些变化来解决。

将问题简化为图表:

G = (V, E) where:
V = { all words }
E = {(word1, word2) | ​If there is a phrase word1, word2 }

在你的例子中:

V = {A, B, C, D }
E = {(A,B), (B,C) (B,D), (C, B), (C, D) }

现在,不幸的是,这个问题的实例不是欧拉路径,但如果存在欧拉路径 - 找到它将为您提供最佳解决方案。例如,如果添加短语'D C',则图形变为欧拉,并且确实可以找到欧拉路径:

A -> B -> C -> B -> D -> C -> D,代表'A B', 'B C', 'C B', 'B D', 'D C', C D'

关于欧拉路径的好消息 - 这个问题可以有效地解决并且不是 NP 完全的(除非 P=NP)。

注意:此解决方案是开箱即用的,用于查找是否存在包含所有短语的序列(并让您轻松找到它)。我不熟悉,也没有研究过这个问题,如果优化问题明显更难。

【讨论】:

    【解决方案2】:

    编辑:我认为短语重复是被禁止的。如果允许短语重复,则可以检查是否可以从起始短语访问任何循环。如果是,则输出无穷大。否则,按照 DAG 方法进行。

    我们可以将短语排列成一个图,其中每个顶点都是一个短语,并且存在从phraseAphraseB 的有向边当且仅当来自phraseA 的最后一个单词与第一个单词相同来自phraseB 的消息。一旦我们构建了这个图,我们想要在这个图中找到最长的路径。

    如果图是非循环的,这意味着不存在环,那么可以通过在同一个图上使用Bellman-Ford 算法找到最长的路径,但边的权重为-1

    但是,如果图表包含循环,这是绝大多数情况,那么问题就变成了NP-hard,可能与其他一些边缘情况不同。

    注意,您非常简单的示例已经包含一个循环:'B C' -> 'C B' -> 'B C'

    总之,您希望解决问题的唯一方法是遍历所有n! 可能性,其中nS 的大小。

    【讨论】:

    • If, however, the graph contains cycles, which is the overwhelming majority of cases, the problem becomes NP-hard, possibly apart from some other edge cases. - 请注意,原始问题的简化变成了 NP-Hard,而不是问题本身......
    • @amit 您可以通过采用任意有向图并将每个顶点解释为一个单词并将每条边解释为一个句子来减少它。
    • @n.1.8e9-where's-my-sharem。不确定它是否有效。最长路径问题只是寻找最长的 simple 路径,而这个问题显然允许循环。 (因此,此问题的有效解决方案不会反映到最长路径的有效解决方案,这会导致归约失败)。原始问题的唯一限制是只使用一次相同的短语,事实上 - 找到所有短语的解决方案是多项式的。
    • @amin 如果有一个包含所有短语的解决方案,那么找到它就是多项式。这是一个寻找欧拉路径的问题。然而,找到一个最大的欧拉子图仍然很困难。 arxiv.org/abs/1304.5746
    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多