Você recebe, como uma lista ou vetor ou o que for, um monte de três tuplas ou o que for, onde as duas primeiras coisas são cadeias de caracteres e a terceira é um número. As strings são cidades e o número é a distância entre elas. A ordem das cidades na tupla é arbitrária (ou seja, não importa o que vem primeiro e o que vem depois), pois é a mesma distância em cada sentido. Além disso, existe exatamente uma tupla para cada par de citações conectadas. Nem todas as cidades podem estar conectadas. Além disso, a distância é sempre positiva (não0
) Você não precisa verificar essas condições, pode assumir que a entrada será bem formada. Seu trabalho é retornar as cidades em uma sequência cíclica, de modo que, se você começar em qualquer cidade e retornar a mesma para a mesma cidade, o total das distâncias entre as cidades será mínimo (exatamente e em todos os aspectos). casos). Você pode assumir que existe uma solução. Por exemplo, digamos que você receba
[("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)]
Você pode produzir qualquer um dos seguintes (mas você só precisa produzir um):
["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 é a viagem mais curta: 13,9
mas não
["Dillburg","Detroit","New York","Hong Kong"]
porque não é o mais curto.
Veja en.wikipedia.org/wiki/Travelling_salesman_problem
Pontuação
É aqui que fica interessante. Você pega o número de caracteres que você possui e os conecta à fórmula de pior notação O na pior das hipóteses. Por exemplo, digamos que você escreva um programa de força bruta com 42 caracteres. Como todos sabemos, o pior caso é n!
onde n
está o número de cidades. 42! = 1405006117752879898543142606244511569936384000000000, então essa é sua pontuação. A pontuação mais baixa vence .
Nota: Também aliviei isso depois, mas não tinha certeza de como resolvê-lo e esperava que ninguém notasse. As pessoas fizeram, então eu vou com a sugestão de issacg:
as únicas opções são O (n!) e O (b ^ n n ^ a ln (n) ^ k), e todos os limites devem ser o mais estreitos possível, considerando essa notação
O(n!)
e O(b^n*n^a*ln(n)^k)
, e todos os limites devem ser o mais estreitos possível, considerando essa notação. OP deve esclarecer, no entanto.
O(n^2*2^n)
é muito menor do que O(n!)
para n grandes.
O(n!)
mas não éO(sqrt(n)*n^n/e^n)
nemO(n!/100000000000000000000)
?