Мне нужен алгоритм для бинарного поиска, когда тест на каждом шаге может дать неправильный результат.
Справочная информация:
мне нужно расположить студентов на наиболее подходящем из 12 уровней сложности. Текущий подход - грубая сила, и он задает 60 вопросов с 4 вариантами ответов с несколькими вариантами ответов, увеличивая сложность, останавливаясь после трех неправильных ответов, и ставя ученика на уровень: floor((score - 1) / 5) + 1
как минимум 1.
Мы обеспокоены тем, что клиенты отключаются, когда они сталкиваются с тестом, содержащим до 60 вопросов, прежде чем они действительно смогут использовать программу, поэтому мы хотели бы свести к минимуму количество вопросов, задаваемых в тесте. Мы также обеспокоены тем, что клиенты пропускают тест размещения (потому что он кажется долгим), а затем отказываются от программы, потому что она кажется слишком простой.
Среднее положение на самом деле находится на уровне 2, поэтому 50 +% студентов набрали <11 (т.е. ответили <14 вопросов). Как ни странно, это может быть потому, что им становится скучно, и они перестают относиться к вопросам всерьез (они маленькие дети).
Предлагаемое решение: Проведите тест в виде бинарного поиска по двенадцати элементам, начиная с вопроса на уровне сложности 6/7 и продолжая в зависимости от того, правильно ли они задают вопрос. Теоретически, это может найти подходящий уровень сложности для них в 3-4 вопросах.
Проблема: Как вы можете догадаться, из существующего теста, заканчивающегося только после трех неправильных ответов и использующего 60 вопросов для выбора между 12 уровнями, мы хотим учесть, что учащиеся с легкостью получают правильные ответы (что они должны делать в 25% случаев) или случайно давать неправильные ответы (толстые пальцы, неправильное чтение вопросов и т. д.). Это еще более важно при бинарном поиске, потому что правильный ответ на первый вопрос может поставить вас в верхнюю половину уровня сложности, даже если вы ошиблись в каждом другом вопросе.
Так есть ли признанный алгоритм для бинарного поиска, где вы не можете гарантировать, что отдельный тест является точным?
Наивно, я мог бы попробовать лучшие из 3 или 5 вопросов на каждом шаге, и, так как ранние вопросы оказывают большее влияние на конечный результат, чем более поздние вопросы, возможно, добавьте эти дополнительные вопросы только к ранним шагам, а не к более поздним. Есть ли что-то большее, чем это?
Ответы:
Рассматривайте проблему как массив байесовских вероятностей; вначале предположим, что есть вероятность 1/13 того, что ребенок находится чуть ниже каждого уровня, а для полноты - вероятность 1/13, что он не на вершине. Затем: 1) Найдите медианный уровень вашего массива, т. Е. Уровень, на котором вероятность быть выше него ближе всего к 50%. 2) Задайте ребенку вопрос с этого уровня. 3) Используйте правило Байеса для обновления вероятности каждой ячейки, допуская 25% ошибок. Завершите и верните наиболее вероятный уровень, когда одна ячейка достигает достаточно высокой вероятности, или, я полагаю, когда у вас заканчиваются вопросы на уровне.
Более строгое рассмотрение этого алгоритма здесь ; Я рекомендую прочитать его перед внедрением.
источник