Al contar la cantidad de backtracks que se necesitan antes de encontrar una solución.
Esto puede sonar frívolo, pero lo digo en serio: el algoritmo de retroceso más eficiente es uno que no tiene que retroceder en absoluto. Obviamente, en un sistema que admite la búsqueda con retroceso, espera hacer un retroceso, pero si sus parámetros están configurados de forma inteligente, el retroceso se minimizará.
Los sistemas Prolog tienen varias herramientas disponibles para contar las pistas, pero que yo sepa, ninguna ha sido estandarizada. Este es un truco rápido para crear un predicado de paso que cuenta las llamadas de puerto ‘rehacer’:
- ¿Hay alguna razón para almacenar cosas en una lista en lugar de un árbol?
- ¿Cuál es un ejemplo de un algoritmo iterativo que se ejecuta en [matemáticas] O (2 ^ n) [/ matemáticas]?
- ¿Cuál es el algoritmo que utilizan los ferrocarriles indios para la confirmación de un boleto de espera? ¿Cuál es la mejor manera de confirmar un boleto cuando hay una gran lista de espera?
- ¿Qué enunciado describe mejor por qué la notación Big-O es una forma muy útil de analizar la complejidad del algoritmo?
- ¿Existe un algoritmo que lo ayude a visualizar las distancias entre los n nodos de manera óptima?
count_bt: –
( cierto
; retractarse (bt_count (A)),
B es A + 1,
afirmar (bt_count (B)),
fallar
)
Debería investigar la especificación ISO para ver si hay una mejor opción. Si sabes de uno, ¡por favor comenta!
editar: El predicado originalmente causó una recalculación innecesaria porque la cláusula ‘else’ tuvo éxito a pesar de que fue invocada como consecuencia de una falla posterior: ‘call’ debería pasar a ‘exit’; ‘rehacer’ debería pasar a ‘fallar’ (y actualizar el contador como un efecto secundario) para un verdadero predicado transparente.