【发布时间】:2021-01-04 11:21:30
【问题描述】:
我有这个任务,其中给出了一个元组列表,其中每个元组包含 2 个这样的字符串:
- [ ("...","...") , ("...","...") , ("...","...") ... ]
我必须计算 最短路径,这将导致 extreme-string。
extreme-string 定义为 2 个字符串的元组,其中第一个字符串等于第二个字符串。
我知道这听起来可能令人困惑,所以让我举个例子。
给定:
- 列表 [("0","100") , ("01","00") , ("110","11")]
- 索引为 0,1,2
- 最短路径为:[2,1,2,0]
- extreme-string 等于:“110011100”
分步说明:
- 以索引 2 的元组开始,初始字符串为:"110","11"
- 追加索引1的元组下一个字符串是:“11001”,“1100”
- 附加索引2的元组下一个字符串是:“11001110”,“110011”
- 附加索引0的元组最终字符串是:“110011100”,“110011100”
假设你从元组 ("X","Y") 开始,然后你选择元组 ("A","B") 然后结果是 ("XA","YB")。
我解决这个问题的方法是使用 BFS我已经实现了,这听起来对我来说是正确的,但我正在处理一个问题。
如果输入类似于:
- [("1","111")]
那么算法将永远不会终止,因为它将始终处于“111...”-“111111111...”状态。
检查这个特定的输入不是一个好主意,因为有很多输入可以重现这个结果。
为迭代设置一个上限也不是一个好主意,因为在某些情况下,在迭代限制之后实际上可能存在有限的结果。
任何见解都会非常有用。
【问题讨论】:
-
如何定义“极端字符串”?
-
@Hans 编辑了问题,定义就在里面。
-
附带说明:存在解决方案的一个简单前提是输入列表需要至少一对,其中第一个字符串比第二个短,并且至少一对第一个字符串比第二个长;或者,如果所有字符串对的长度分别相等,则解决方案只能是其中的一个或多个。 (但这不似乎有助于终止,AFAICS。)
-
这让我一直很困惑——你有什么新见解吗?
-
@Hans 老实说,我无法及时找到可以解决输入问题的东西。据我所知,BFS 方法非常有效,而且据我所知,总会有一些有问题的输入。
标签: java algorithm breadth-first-search