Cómo encontrar el salto más pequeño

Una manera simple de extender su solución es ejecutarla en todas las permutaciones de longitud 2, luego longitud 1, y dar el mejor salto en los tres bucles. Cuando N = 3 casi cualquier solución es lo suficientemente buena. 🙂

La otra forma en que puedo pensar en hacer una búsqueda exhaustiva es tratar el problema como un gráfico y usar la búsqueda en profundidad para examinar todas las opciones. (Técnicamente, estaría haciendo DFS en el árbol de decisión de posibles rutas, ya que puede visitar cada roca varias veces durante la búsqueda). En psuedocode:

dfs (currentLocation, visitado):
si currentLocation es el banco opuesto:
volver (mejor salto 0, camino vacío)
para cada roca R que no está en el conjunto visitado: // trata aquí el banco opuesto como una roca
(maxHop, ruta) = dfs (R, visitado + ubicación actual)
salto = distancia (currentLocation, R)
ruta = [R] + ruta
si hop> maxHop entonces maxHop = hop
encontrar el mejor salto, par de ruta sobre todos los R
volver (mejor salto, mejor camino)

Ahora, ciertamente es posible mejorar esto. Tenga en cuenta que si es más corto de R a la orilla que a cualquier otra roca, entonces ningún mejor camino visitaría R y luego saltaría a otro lugar que no sea la orilla. Y si el mejor camino desde R hasta la orilla se ha identificado sin rocas visitadas, entonces la respuesta será la misma siempre que el conjunto visitado no incluya rocas del mejor camino. Esto puede podar bastante del árbol de búsqueda.

¿Es posible llegar a un mejor algoritmo? Originalmente pensé que sí, pero no parece haber ninguna manera de determinar el mejor camino desde cada piedra en un orden fácil de definir.

More Interesting

¿Qué es más importante, aprender múltiples lenguajes de programación o practicar algoritmos?

¿Qué debe aprender primero, algoritmos y DS o un lenguaje de programación?

¿Por qué no necesito conocer algoritmos para lenguajes de programación modernos como Java o Python?

¿Deberíamos memorizar algoritmos, o simplemente saber cómo implementarlos?

¿Cuáles son algunos URI de buen código de ejemplo que utilizan algoritmos STL (aparte de la ordenación)?

¿Cómo se calculan los tiempos de conducción de Google Maps?

¿Es necesario aprender Java antes de comenzar el curso de Estructuras de datos y Algoritmos en el IIT en Delhi?

¿Cuáles son los ejemplos de aplicación de la estructura de datos gráficos en la programación real?

¿Puede un camino más corto contener un ciclo?

¿Cuál es el número esperado de pasos necesarios para que una entidad sin memoria atraviese un gráfico completo de 4 nodos?

¿Cuáles son los algoritmos gráficos 'imprescindibles' para un programador competitivo?

¿Qué algoritmos usa Dropbox para la compresión de datos?

¿Cuál es la complejidad temporal del tipo de conteo y fusión?

¿Cómo funciona el retroceso en el caso de encontrar un subconjunto de una suma particular?

¿Qué debo aprender en línea si quiero obtener un trabajo bien remunerado en TI en India? ¿Debería ser algo así como algoritmos de estructura de datos o un lenguaje como Python o R o algo así como un desarrollador de aplicaciones de Android o algo más?