给您一个列表或向量或其他任何东西,一堆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)
,并且给定该表示法,所有边界必须尽可能紧密。不过,OP应该澄清。
O(n^2*2^n)
,比O(n!)
大n的要小得多。
O(n!)
不是,O(sqrt(n)*n^n/e^n)
也不是O(n!/100000000000000000000)
?