Arrays “最小的”;拼字板“;包含列表中的每个单词

Arrays “最小的”;拼字板“;包含列表中的每个单词,arrays,algorithm,letter,Arrays,Algorithm,Letter,我正在寻找一种能够构建字母数组(2D)的算法,从中我可以提取给定列表中的每个单词。 就像拼字游戏一样,单词可以相互交叉,可以是水平的、垂直的或对角的。当然有一些显而易见的解决方案,但这里的目标是使其尽可能小,这也意味着最大限度地增加交叉口的数量 我曾想到一种机器学习方法,使用大量的拼字网格,由人类或计算机制作,但我相信有一种更干净的方法可以做到这一点 谢谢你的帮助 PS:那是一个艺术项目,不是开玩笑。那将是相当不错的算法。我怀疑解决方案将涉及某种递归 假设你有一个网格G0开始,所有的方块都是空白

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

我曾想到一种机器学习方法,使用大量的拼字网格,由人类或计算机制作,但我相信有一种更干净的方法可以做到这一点

谢谢你的帮助


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

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

假设你有一个网格G0开始,所有的方块都是空白的,f(G0)是经过优化的完整网格

然后我会尝试:

对于第一个单词的每个可能位置 -设置G1=该位置有该单词且所有其他方格为空的网格 -算出G1 转到下一个位置

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


如果你有一个大的网格和大量的单词,这将需要永远运行,因为这是一个浪费的算法,但对于一个典型的拼字板,我认为它在笔记本电脑上足够快。

这将是一个相当不错的算法。我怀疑解决方案将涉及某种递归

假设你有一个网格G0开始,所有的方块都是空白的,f(G0)是经过优化的完整网格

然后我会尝试:

对于第一个单词的每个可能位置 -设置G1=该位置有该单词且所有其他方格为空的网格 -算出G1 转到下一个位置

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


如果你有一个大的网格和大量的文字,这将需要永远运行,因为这是一个浪费的算法,但对于一个典型的拼字板,我认为它在笔记本电脑上足够快。

找到最小的解决方案将是极其困难的。难道你不能仅仅满足于一个好的解决方案,而不是一个最优的解决方案吗?关于“这也意味着最大化交叉次数”:这不是一个正确的说法。最大化交叉口的数量是一个非常相似的问题,但是这两个问题的最佳结果在很多情况下是不同的。谢谢大家,很抱歉不够精确。一个好的解决方案就足够了,当然,找到绝对最优的解决方案将是一件痛苦的事情。另外,感谢您强调,这与优化交叉不是一个问题。我完全同意,我的意思是“这些问题似乎很接近”。(得分)拼字游戏中的单词不是对角的。找到最小的解决方案将是极其困难的。难道你不能仅仅满足于一个好的解决方案,而不是一个最优的解决方案吗?关于“这也意味着最大化交叉次数”:这不是一个正确的说法。最大化交叉口的数量是一个非常相似的问题,但是这两个问题的最佳结果在很多情况下是不同的。谢谢大家,很抱歉不够精确。一个好的解决方案就足够了,当然,找到绝对最优的解决方案将是一件痛苦的事情。另外,感谢您强调,这与优化交叉不是一个问题。我完全同意,我的意思是“这些问题似乎很接近”。(得分)拼字游戏中的单词不是对角线。