В вашем случае используется дерево решений: http://en.wikipedia.org/wiki/Decision_tree_learning
По сути, поиск оптимального дерева (т. Е. Который минимизирует среднее количество вопросов, заданных до того, как вы сможете идентифицировать заболевание) является трудной задачей.
Вы можете использовать жадный алгоритм, а затем попытаться оптимизировать его (если вам это нужно).
На каждом шаге вы хотите максимально уменьшить количество смертей, которые все еще "возможны",
Вы находитесь на вершине своего дерева, поэтому у вас есть три возможных варианта для данного s
, подсчитайте количество заболеваний в каждом из вариантов: pc
nc
uc
.
С одной стороны у вас есть pc
, с другой nc
и uc
, вы не можете ничего сказать (вы можете посмотреть на два уровня своего дерева, чтобы получить некоторую информацию, но пока мы не делаемчто).
В худшем случае, у вас есть pc
/ nc + uc
или pc + uc
/ nc
, выберите s
, который минимизирует наихудший случай (то есть: только одна сторонанесколько на другом).
Вам нужно минимизировать abs( pc - (nc + uc)) + abs ( (pc+uc) - nc)
.
Теперь у вас есть s
для вашего первого вопроса, и вы можете итеративно строить свое дерево.