Algorithm 布格发生器算法

Algorithm 布格发生器算法,algorithm,language-agnostic,Algorithm,Language Agnostic,最近我遇到了一个有趣的问题。虽然我熟悉解决它的方法,但我现在想为Boogle板制作一个好的字母生成器,并正在寻找一个有效的算法来实现这一点。 前两步很简单: 1) Boogle board is 5x5, so I will have an array of 25 chars. Randomly generate an array of 25 chars. 2) Shuffle the array obtained in the step 1 接下来呢?我需要优化获得的数组,以便能够获得尽可能

最近我遇到了一个有趣的问题。虽然我熟悉解决它的方法,但我现在想为Boogle板制作一个好的字母生成器,并正在寻找一个有效的算法来实现这一点。 前两步很简单:

1) Boogle board is 5x5, so I will have an array of 25 chars. Randomly generate an array of 25 chars.
2) Shuffle the array obtained in the step 1
接下来呢?我需要优化获得的数组,以便能够获得尽可能多的有意义的单词。我想到的一件事是丢弃一行中三个相同字母的所有组合。 示例:[b a c c] 不太好。还是我应该限制每个字母最多出现两次

此外,在生成数字时,必须对字母进行加权。例如,我们没有太多的X和Y,但元音可以出现很多次

还有别的吗


欢迎提供任何指导。

看看,我认为Digram适合于这个问题,以生成具有高出现概率的字母组合

任何类型的非基于词典的board generator都可能包含很少或没有实际单词

为了解决这一问题,我想到了一种相当简单的方法,至少在高级方法上是这样的:

有一本允许使用的单词词典

如果要从字典中重复随机选取一个未勾选的单词(如果你要选取很大比例的单词),这将有助于你有效地做到这一点,否则你可以只保留一组已经选取的单词-这是假设你实际上不想在同一块板上重复单词,并对该单词执行以下操作:

在电路板上随机选取一个开放单元。这将是单词第一个字母的位置

在一个开放的单元格中以随机方向重复输入下一个字母。如果相邻的一个单元格已经包含下一个字母,我们可以转到该单元格。如果遇到没有方向的情况,请选择与前一个字母不同的方向

如果你选择了细胞,但无法形成一个单词,那么你也许可以避免细胞被重复。您还可以在为该单词分配单元格的过程中删除您访问的所有单元格。虽然这不是完美的——如果你不能匹配一个10个字母的单词,那并不意味着一个3个字母的单词就不起作用

很明显,你会在黑板上已经满了或者已经有一些单词的时候停下来


这仍然给实现留下了很大的余地,但这只是一个高层次的想法。

如果随机生成数组,为什么要洗牌呢?这不是多余的吗?请检查-随机生成数组时,洗牌数组肯定是多余的。这不是一个定义明确的问题。如果你只想要一个有很多单词的网格,那么生成多个网格,然后选择其中单词最多的一个。请注意,Boggle使用4x4网格。