![]() |
|
#16
|
||||
|
||||
|
У вас в незнайке некий двоичный алгоритм, а там должен быть некий матричный.
Там допускаются неверные ответы, иногда он одинаоковые вопросы два раза подряд задает, как бы переспрашивает, когда в тупик заходит. И вариантов ответов там 5: да, нет, не знаю, скорее да, скорее нет. Как бы я делал алгоритм акинатора. пусть 100.000 персонажей. и 1.000 вопросов. На каждый вопрос и каждый персонаж матрица содержит всего один байт, со знаком. Получается 100.000 *1.000 — всего 100Мб которые можно без проблем засунуть в оперативную память. Байт матрицы — отвечает за степень привязки конкретного вопроса к конкретному персонажу. Если на вопрос отвечают четко, и стабильно, то значение по модулю больше. Для большей эффективности алгоритма, вероятно, суммы всех отрицательных и всех положительных значений по вопросу в итоге должны быть равны некоторым константам. Для чего требуется периодическая индексация. для примера: 3 вопроса, 4 персонажа, сумма 100. персонаж мужчина? Джон Сильвер +90 Алла пугачева -100 Я 0 Конек-Горбунок +10 ваш персонаж одноногий и с попугаем? Джон Сильвер +100 Алла пугачева -34 Я -32 Конек-Горбунок-34 ваш персонаж человек? Джон Сильвер +33 Алла пугачева +33 Я +33 Конек-Горбунок -100 На первых этапах можно задавать вопросы случайно, но нужно считать ответы по всем персонажам. Лучше особенно выделить стартовые вопросы: те, что имеют плавное распределение ответов, и близкое к равному количество положительных и отрицательных. Ближе к концу можно отсеивать из алгоритма персонажей с низкой набранной суммой. Но нужно выбирать вопросы так, что-бы выявить из нескольких лидеров явного лидера. Для этого нужно задавать вопрос с наибольшей суммой абсолютных значений в линии матрицы, из оставшихся в лидерах персонажей. Он будет наиболее информативен. Последний раз редактировалось Alexander B., 13.03.2013 в 14:28. |