评估网格中单词的分布

qwe*_*wer 5 algorithm math statistics

我正在创建一个单词搜索,并试图通过验证单词集在整个网格中"均匀分布"来计算生成的谜题的质量.例如,连续放置每个单词,逐行填充它们并不是特别有趣,因为会有集群,用户会很快注意到一个模式.

如何衡量单词"均匀分布"的方式?

我想做的是编写一个程序,将一个单词搜索作为输入,输出一个评分拼图"质量"的分数.我想知道是否有人遇到过类似的问题并且可以向我推荐一些资源.也许统计数据中有一些概念可能会有所帮助?谢谢.

Pin*_*juh 4

基本问题是正方形或长方形中线的分布。您可以通过几何方式或使用整数数组来完成此操作。我将在这里尝试整数数组。

设 M 为谜题矩阵,

A B C D
E F G H
I J K L
M N O P
Run Code Online (Sandbox Code Playgroud)

假设“EFGH”这个词是一个存在的词,“CGKO”也是一个存在的词。然后,创建一个矩阵,其中包含每个单元格中八个单词的成员资格计数:

0 0 1 0
1 1 2 1
0 0 1 0
0 0 1 0
Run Code Online (Sandbox Code Playgroud)

应用规则:当前像元值等于所有相邻像元的总和(4 路),并乘以该像元的原始值(如果原始值为 2 或更高)。

0 0 1 0      1 2 2 2
1 1 2 1  -\  1 3 8 2
0 0 1 0  -/  1 2 3 2
0 0 1 0      0 1 1 1
Run Code Online (Sandbox Code Playgroud)

并对矩阵的行和列中的所有值求和:

1 2 2 2 =  7
1 3 8 2 = 14
1 2 3 2 =  8
0 1 1 1 =  3
| | | |
3 7 | 6
    14
Run Code Online (Sandbox Code Playgroud)

然后计算两个结果集的平均值:

(7 + 14 + 8 + 3) / 4 = 32 / 4 = 8
(3 + 7 + 14 + 6) / 4 = 30 / 4 = 7.5
Run Code Online (Sandbox Code Playgroud)

并计算每个结果集的平均值的平均差:

3  <-> 7.5 = 4.5       7  <-> 8 = 1
7  <-> 7.5 = 0.5       14 <-> 8 = 6
14 <-> 7.5 = 6.5       8  <-> 8 = 0
6  <-> 7.5 = 1.5       3  <-> 8 = 5
             ___avg               ___avg
             3.25                 3
Run Code Online (Sandbox Code Playgroud)

并将它们相乘:

3 * 3.25 = 9.75
Run Code Online (Sandbox Code Playgroud)

您将其视为分布分数。您可能需要稍微调整它以使其更好地工作,但这应该可以很好地计算分布分数。

下面是一个错误分布的例子:

1 0 0 0      1 1 0 0      2
1 0 0 0  -\  2 1 0 0  -\  3         -\  C avg 2.5  -\  C avg-2-avg 0.5
1 0 0 0  -/  2 1 0 0  -/  3         -/  R avg 2.5  -/  R avg-2-avg 2.5
1 0 0 0      1 1 0 0      2                                       _____*
                           6 4 0 0                                 1.25 < score
Run Code Online (Sandbox Code Playgroud)

编辑:计算。错误已修复。