Necesito un algoritmo para hacer una búsqueda binaria cuando la prueba en cada paso puede dar un resultado incorrecto.
Antecedentes:
necesito colocar a los estudiantes en el más apropiado de los 12 niveles de dificultad. El enfoque actual es la fuerza bruta y hace 60 preguntas de opción múltiple de 4 respuestas de dificultad creciente, deteniéndose después de tres errores, y coloca al estudiante en el nivel: floor((score - 1) / 5) + 1
con un mínimo de 1.
Nos preocupa que los clientes se apaguen cuando se enfrentan a un examen con hasta 60 preguntas antes de que realmente puedan usar el programa, por lo que nos gustaría minimizar la cantidad de preguntas formuladas en el examen. También nos preocupa que los clientes se salten la prueba de ubicación (porque parece larga) y luego abandonen el programa porque parece demasiado fácil.
La ubicación media es en realidad en el nivel 2, por lo que más del 50% de los estudiantes obtienen una puntuación <11 (es decir, responden <14 preguntas). Como anécdota, esto puede deberse a que se aburren y dejan de tomar en serio las preguntas (son niños pequeños).
Solución propuesta: Implemente la prueba como una búsqueda binaria en doce elementos, comenzando con una pregunta en el nivel de dificultad 6/7 y continuando en función de si la pregunta es correcta o incorrecta. En teoría, esto podría encontrar el nivel de dificultad adecuado para ellos en 3-4 preguntas.
El problema: como se puede deducir de la prueba existente que solo termina después de tres respuestas incorrectas y usa 60 preguntas para elegir entre 12 niveles, queremos permitir que los estudiantes obtengan respuestas correctas (que deberían hacer el 25% del tiempo) o accidentalmente dar respuestas incorrectas (dedos gordos, preguntas erróneas, etc.). Esto es aún más importante con una búsqueda binaria porque encontrar una respuesta correcta en la primera pregunta podría colocarlo en la mitad superior de los niveles de dificultad, incluso si responde mal todas las demás preguntas.
Entonces, ¿existe un algoritmo reconocido para una búsqueda binaria en el que no pueda garantizar que una prueba individual sea precisa?
Ingenuamente, podría hacer lo mejor de 3 o 5 preguntas en cada paso, y, dado que las primeras preguntas tienen un mayor efecto en el resultado final que las preguntas posteriores, tal vez agregue estas preguntas adicionales solo a los primeros pasos y no a los posteriores. ¿Hay algo más que eso?
Respuestas:
Trate el problema como una serie de probabilidades bayesianas; inicialmente, suponga que hay una probabilidad de 1/13 de que el niño esté justo debajo de cada nivel y, para completar, una probabilidad de 1/13 de que esté fuera de la cima. Luego: 1) Encuentre el nivel medio de su matriz, es decir, el nivel donde la probabilidad de estar por encima de él es más cercano al 50% 2) Hágale una pregunta al niño de ese nivel. 3) Use la regla de Bayes para actualizar la probabilidad de cada celda, suponiendo una tasa de error del 25%. Termina y devuelve el nivel más probable cuando una celda alcanza una probabilidad suficientemente alta, o supongo que cuando te quedas sin preguntas en un nivel.
Un tratamiento más riguroso de este algoritmo está aquí ; Recomiendo leerlo antes de implementar.
fuente