Divide una conquista:
usted podría reducir el número de pasadas en su método de fuerza bruta: permite decir que su preferido (máximo) el tamaño de fuente es 40 y usted tiene un tamaño de letra mínimo de 0
if (40 == falso & & 0 == true)
- 20 = verdaderas posibilidades // dividir por la mitad con cada adivinar
- 30 = false
- 25 = true
- 27 = true
- 28 = false
- así 27 victorias
¿De qué manera es esto mejor?
esto tomó 6 conjeturas en lugar de 13, e incluso si 20, 12 o 39 fueran la respuesta correcta, siempre se necesitarían aproximadamente 6 conjeturas. por lo tanto, la mayoría de las veces no solo son menos conjeturas, sino que es más consistente lo que es importante para la experiencia del usuario.
Creo que el número de conjeturas que se necesitan al dividir las entradas por la mitad cada vez es la raíz cuadrada del rango que está buscando más uno. Math.sqroot (40-0) + 1 (Es solo una suposición, no dude en corregirme). su tamaño de fuente mínimo probablemente no sea 0, por lo que aumentar esto aceleraría la búsqueda de una respuesta.
Ilustración:
Es como jugar Guess Who, los jugadores que preguntan "¿su nombre tiene una A" y reduce las posibilidades de un medio no importa lo que su respuesta es por lo general encuentra la respuesta más rápido que el jugador que pide aproximadamente 1 carácter cada vez "es el nombre de Sam" "es el nombre de Alex"
alternativa: comenzando con una buena suposición, entonces las pruebas de exactitud también me promover trabajar en una lógica de utilizar el resultado proporcionado por La respuesta de Daren usando fontMetrics como una buena conjetura inicial y luego te st it, si cabe la prueba +2 si no se ajusta a la prueba -2; si la nueva prueba cumple con la prueba, omitió 1 y sabrá su respuesta; si no, intente mover otras 2 y así sucesivamente, pero idealmente la respuesta fontMetrics no es más de 4 lejos ...
Sospecho que esto producirá los resultados promedio más rápidos de casos de uso reales.
suponiendo que desea un int y asumiendo que las inexactitudes de las métricas de fuente son mínimas, esto probablemente solo tome 2 o 3 conjeturas.
Véase también [esta cuestión] (http://stackoverflow.com/q/36575192/1329652). –