On vous donne, sous forme de liste ou de vecteur ou autre, un tas de 3-tuples ou autre, où les deux premières choses sont des chaînes, et la troisième chose est un nombre. Les chaînes sont des villes et le nombre est la distance entre elles. L'ordre des villes dans le tuple est arbitraire (c'est-à-dire que peu importe ce qui vient en premier et ce qui vient en second) car c'est la même distance dans chaque sens. En outre, il existe exactement un tuple pour chaque paire de citations connectées. Toutes les villes ne sont pas connectées. De plus, la distance est toujours positive (pas0
). Vous n'avez pas besoin de vérifier ces conditions, vous pouvez supposer que l'entrée sera bien formée. Votre travail consiste à renvoyer les villes dans une séquence cyclique, de sorte que, si vous commencez dans une ville et que vous revenez dans la même ville, le total des distances entre les villes sera minimum (exactement et en tout .) Vous pouvez supposer qu'une solution existe. Par exemple, disons qu'on vous donne
[("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)]
Vous pouvez générer l'un des éléments suivants (mais vous n'en avez besoin que d'un):
["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"]
car c'est le trajet le plus court: 13,9
mais non
["Dillburg","Detroit","New York","Hong Kong"]
car ce n'est pas le plus court.
Voir en.wikipedia.org/wiki/Travelling_salesman_problem
Notation
C'est là que ça devient intéressant. Vous prenez le nombre de caractères que vous avez, puis vous les branchez dans la pire formule de notation O du pire cas. Par exemple, disons que vous écrivez un programme de force brute de 42 caractères. Comme nous le savons tous, le pire des cas est n!
où n
est le nombre de villes. 42! = 1405006117752879898543142606244511569936384000000000, c'est donc votre score. Le score le plus bas l'emporte .
Remarque: J'ai également soulagé cela par la suite, mais je ne savais pas comment le résoudre et j'espérais que personne ne le remarquerait. Les gens l'ont fait, je vais donc suivre la suggestion d'Issacg:
les seules options sont O (n!) et O (b ^ n n ^ a ln (n) ^ k), et toutes les limites doivent être aussi serrées que possible étant donné que la notation
O(n!)
et O(b^n*n^a*ln(n)^k)
, et toutes les limites doivent être aussi serrées que possible compte tenu de cette notation. OP devrait clarifier, cependant.
O(n^2*2^n)
, ce qui est beaucoup moins que O(n!)
pour les grands n.
O(n!)
mais pasO(sqrt(n)*n^n/e^n)
niO(n!/100000000000000000000)
?