Ti viene dato, come elenco o vettore o altro, un gruppo di 3 tuple o altro, in cui le prime due cose sono stringhe e la terza cosa è un numero. Le stringhe sono città e il numero è la distanza tra loro. L'ordine delle città nella tupla è arbitrario (cioè non importa quale viene prima e quale seconda) poiché ha la stessa distanza in entrambe le direzioni. Inoltre, esiste esattamente una tupla per ogni coppia di citazioni collegate. Non tutte le città potrebbero essere collegate. Inoltre, la distanza è sempre positiva (no0
). Non è necessario controllare queste condizioni, si può presumere che l'input sia ben formato. Il tuo compito è quello di restituire le città in una sequenza ciclica, in modo tale che, se inizi in una qualsiasi città, e riporti la sequenza nella stessa città, il totale delle distanze tra le città sarà minimo (esattamente e in tutto casi.) Si può presumere che esista una soluzione. Ad esempio, supponiamo che ti venga dato
[("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)]
È possibile produrre uno dei seguenti (ma è necessario solo produrre 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"]
perché è il viaggio più breve: 13.9
ma no
["Dillburg","Detroit","New York","Hong Kong"]
perché non è il più corto.
Vedi en.wikipedia.org/wiki/Travelling_salesman_problem
punteggio
Questo è dove diventa interessante. Prendi il numero di caratteri che hai e poi inseriscili nella formula O-notation nel peggiore dei casi. Ad esempio, supponiamo che tu scriva un programma di forza bruta di 42 caratteri. Come tutti sappiamo, il caso peggiore è n!
dov'è n
il numero di città. 42! = 1405006117752879898543142606244511569936384000000000, quindi questo è il tuo punteggio. I più bassi vince punteggio .
Nota: in seguito ho sollevato anche questo, ma non ero sicuro di come risolverlo e speravo che nessuno se ne accorgesse. La gente l'ha fatto, quindi seguirò il suggerimento di issacg:
le uniche opzioni sono O (n!) e O (b ^ n n ^ a ln (n) ^ k), e tutti i limiti devono essere il più stretti possibile data quella notazione
O(n!)
e O(b^n*n^a*ln(n)^k)
e tutti i limiti devono essere il più stretti possibile data quella notazione. Tuttavia, l'OP dovrebbe chiarire.
O(n^2*2^n)
, che è molto meno che O(n!)
per grandi n.
O(n!)
ma non èO(sqrt(n)*n^n/e^n)
néO(n!/100000000000000000000)
?