Se le da, como una lista o vector o lo que sea, un grupo de 3 tuplas o lo que sea, donde las dos primeras cosas son cadenas y la tercera es un número. Las cadenas son ciudades, y el número es la distancia entre ellas. El orden de las ciudades en la tupla es arbitrario (es decir, no importa cuál viene primero y cuál viene segundo) ya que es la misma distancia en cada sentido. Además, hay exactamente una tupla por cada par de citas conectadas. No todas las ciudades pueden estar conectadas. Además, la distancia siempre es positiva (no0
) No es necesario que verifique estas condiciones, puede suponer que la entrada estará bien formada. Su trabajo es devolver las ciudades en una secuencia cíclica, de modo que, si comienza en cualquier ciudad y recorre la secuencia de regreso a la misma ciudad, el total de las distancias entre las ciudades será mínimo (exactamente y en total casos.) Puede suponer que existe una solución. Por ejemplo, digamos que le dan
[("New York", "Detroit", 2.2), ("New York", "Dillsburg", 3.7), ("Hong Kong", "Dillsburg", 4), ("Hong Kong", "Detroit", 4), ("Dillsburg", "Detroit", 9000.1), ("New York", "Hong Kong", 9000.01)]
Puede generar cualquiera de los siguientes (pero solo necesita generar uno):
["Detroit","Hong Kong","Dillsburg","New York"]
["Hong Kong","Dillsburg","New York","Detroit"]
["Dillsburg","New York","Detroit","Hong Kong"]
["New York","Detroit","Hong Kong","Dillsburg"]
["Dillsburg","Hong Kong","Detroit","New York"]
["New York","Dillsburg","Hong Kong","Detroit"]
["Detroit","New York","Dillsburg","Hong Kong"]
["Hong Kong","Detroit","New York","Dillsburg"]
porque es el viaje más corto: 13,9
pero no
["Dillburg","Detroit","New York","Hong Kong"]
porque no es el más corto
Ver en.wikipedia.org/wiki/Travelling_salesman_problem
Puntuación
Aquí es donde se pone interesante. Usted toma la cantidad de caracteres que tiene y luego los conecta a la fórmula de notación O más desfavorable. Por ejemplo, supongamos que escribe un programa de fuerza bruta que tiene 42 caracteres. Como todos sabemos, el peor de los casos es n!
dónde n
está el número de ciudades. 42! = 1405006117752879898543142606244511569936384000000000, así que ese es tu puntaje. El puntaje más bajo gana .
Nota: También alivié esto después, pero no estaba seguro de cómo resolverlo y esperaba que nadie lo notara. La gente lo hizo, así que iré con la sugerencia de issacg:
las únicas opciones son O (n!) y O (b ^ n n ^ a ln (n) ^ k), y todos los límites deben ser lo más ajustados posible dada esa notación
O(n!)
y O(b^n*n^a*ln(n)^k)
, y todos los límites deben ser lo más ajustados posible dada esa notación. OP debería aclarar, sin embargo.
O(n^2*2^n)
, que es mucho menor que O(n!)
para n grande.
O(n!)
pero noO(sqrt(n)*n^n/e^n)
niO(n!/100000000000000000000)
?