Вам дают в виде списка или вектора, или чего-то еще, набор из 3-х кортежей или чего-то еще, где первые две вещи - это строки, а третья - это число. Строки - это города, а число - это расстояние между ними. Порядок городов в кортеже произвольный (т. Е. Не имеет значения, что идет первым, а что вторым), так как это одинаковое расстояние в каждом направлении. Кроме того, существует ровно один кортеж для каждой пары связанных сайтов. Не все города могут быть связаны. Кроме того, расстояние всегда положительно (не0
). Вам не нужно проверять эти условия, вы можете предположить, что входные данные будут правильно сформированы. Ваша задача состоит в том, чтобы возвращать города в циклической последовательности, так что, если вы начнете с какого-либо одного города и обойдете последовательность обратно в один и тот же город, общее расстояние между городами будет минимальным (точно и во всех случаи.) Вы можете предположить, что решение существует. Например, скажем, вам дали
[("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)]
Вы можете вывести любое из следующего (но вам нужно вывести только одно):
["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"]
потому что это самая короткая поездка: 13,9
но нет
["Dillburg","Detroit","New York","Hong Kong"]
потому что это не самый короткий.
См. En.wikipedia.org/wiki/Travelling_salesman_problem
счет
Вот где это становится интересным. Вы берете количество символов, которое у вас есть, а затем вставляете их в формулу O-обозначения в наихудшем случае. Например, допустим, вы пишете программу грубой силы длиной 42 символа. Как мы все знаем, худший случай , n!
когда n
это число городов. 42! = 1405006117752879898543142606244511569936384000000000, так что это ваш счет. Самый низкий балл побеждает .
Примечание: потом я тоже это облегчил, но не знал, как ее решить, и надеялся, что никто не заметит. Люди сделали, так что я пойду с предложением issacg:
единственными вариантами являются O (n!) и O (b ^ n n ^ a ln (n) ^ k), и все границы должны быть как можно более точными, учитывая эту запись
O(n!)
и O(b^n*n^a*ln(n)^k)
, и все границы должны быть максимально точными, учитывая эту запись. ОП следует уточнить, хотя.
O(n^2*2^n)
, что гораздо меньше, чем O(n!)
для больших n.
O(n!)
но неO(sqrt(n)*n^n/e^n)
ниO(n!/100000000000000000000)
?