【问题标题】:smallest "scrabble board" containing every word of a list包含列表中每个单词的最小“​​拼字板”
【发布时间】:2012-04-23 20:49:43
【问题描述】:

我正在寻找一种能够构建字母数组 (2D) 的算法,我可以从中提取给定列表中的每个单词。 就像在拼字游戏中一样,单词可以相互交叉,可以是水平的、垂直的或对角的。当然有一些明显的解决方案,但是这里的目标是让它尽可能的小,这也意味着最大化的交叉次数。

我想到了一种使用大量拼字游戏网格的机器学习方法,由人类或计算机制作,但我确信有一种更简洁的方法。

感谢您的帮助。

PS:这是一个艺术项目,不是开玩笑。

【问题讨论】:

  • 找到最小的解决方案将非常困难。你不能只满足于一个好的解决方案,而不是一个最佳的解决方案吗?关于“这也意味着最大化交叉次数”:这不是一个真实的说法。最大化交叉次数是一个非常相似的问题,但是这两个问题的最优结果在很多情况下会有所不同。
  • 谢谢大家,抱歉不够精确。一个好的解决方案就足够了,肯定找到绝对最优的将是地狱。另外,感谢您强调这与优化交叉不是同一个问题。我完全同意,我的意思是“这些问题似乎很接近”。
  • (评分)拼字游戏中的单词不是对角线。

标签: arrays algorithm letter


【解决方案1】:

那将是相当多的算法。我怀疑解决方案将涉及某种递归。

假设您有一个 G0 网格开始,所有方块都为空白,并且 f(G0) 是优化后的完整网格。

那我试试:

对于第一个单词的每个可能位置 - 设置 G1 = 在这个位置有这个词的网格和所有其他方块空白 - 锻炼 G1 继续下一个位置

要计算出 G1,您可以递归调用 f(G1)。

如果你有一个很大的网格和很多单词,这将需要很长时间才能运行,因为它是一种浪费的算法,但对于一个典型的拼字游戏板,我认为它在笔记本电脑上应该足够快。

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多