Я создаю поиск слова и пытаюсь вычислить качество сгенерированных загадок путем проверки, что набор слова "распределяется равномерно" всюду по сетке. Например, размещение каждого слова последовательно, заполнение их построчный не особенно интересны, потому что будут кластеры, и пользователь быстро заметит шаблон.
Как я могу иметь размеры, насколько 'равномерно распределенный' слова?
То, что я хотел бы сделать, записать программу, которая берет, одним словом, поиск в качестве ввода и вывода счет, который оценивает 'качество' загадки. Я задаюсь вопросом, видел ли кто-либо подобную проблему и мог бы отослать меня к некоторым ресурсам. Возможно, существует некоторое понятие в статистике, которая могла бы помочь?Спасибо.
Основной задачей является распределение прямых в квадрате или прямоугольнике. Это можно сделать как геометрически, так и с помощью целочисленных массивов. Здесь я попробую целочисленные массивы.
Пусть M будет матрицей вашей головоломки,
A B C D
E F G H
I J K L
M N O P
Пусть слово "EFGH" будет существующим словом, так же как и "CGKO". Затем создайте матрицу, которая будет содержать подсчет членства в восьми словах в каждой ячейке:
0 0 1 0
1 1 2 1
0 0 1 0
0 0 1 0
Применить правило: текущее значение ячейки равно сумме всех соседей (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
И просуммируйте все значения в строках и столбцах матрицы:
1 2 2 2 = 7
1 3 8 2 = 14
1 2 3 2 = 8
0 1 1 1 = 3
| | | |
3 7 | 6
14
Затем вычислите среднее значение обоих результирующих множеств:
(7 + 14 + 8 + 3) / 4 = 32 / 4 = 8
(3 + 7 + 14 + 6) / 4 = 30 / 4 = 7.5
И вычислите разность среднего значения до среднего значения каждого результирующего множества:
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
И умножьте их вместе:
3 * 3.25 = 9.75
Которое вы рассматриваете как распределенную массу. Вам, возможно, придется немного подправить его, чтобы он работал лучше, но это должно вычислить distributionscore довольно хорошо.
Вот пример плохого распределения:
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
Правка: calc. ошибки исправлены.