algorithm - 在 Word Snake 游戏问题中找到最长的单词序列
问题描述
我正在玩 Word Snake 游戏,如果可以使用算法解决这个游戏,我正在徘徊。
以下是游戏的描述:
给定一个短语包(一组可能的重复值):S = {短语1 , 短语2 , 短语3 , ..., 短语N }
蛇是 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']
是最长的蛇。
解决方案
这可能可以通过欧拉路径问题的优化问题的一些变化来解决。
将问题简化为图:
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)。
注意:此解决方案开箱即用,可查找是否存在包含所有短语的序列(并让您轻松找到它)。我不熟悉,也没有研究过这个问题,如果优化问题要困难得多。
推荐阅读
- android - 如何将字符串传递给布局?
- windows - 如何在 Windows 10 上可靠地复制数 TB 的文件夹?
- c++ - NSTask 启动或弹出需要 15-20 秒才能在 macOS 中启动简单的 Bash 脚本
- react-native - React Native - 标签按钮 - 开箱即用 vs 自定义
- python - 在 Python3 中使用 .replace() 永久更改字符串
- c# - 在 C# 中通过索引(而不是分配给它的值)获取枚举成员
- swiftui - SwiftUI 深色模式不适用于工作表
- pandas - 如何更改索引列的熊猫显示字体
- node.js - MERN中的排序
- r - 在 R 中构建二进制包时出现问题