リストまたはベクターなど、3タプルの束などが与えられます。最初の2つの要素は文字列で、3番目の要素は数値です。文字列は都市であり、数字はそれらの間の距離です。タプル内の都市の順序は任意です(つまり、どちらが最初に来て、どちらが最初に来るかは関係ありません)。また、接続された引用のペアごとにタプルが1つだけあります。すべての都市が接続されているわけではありません。また、距離は常に正です(ではなく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)]
次のいずれかを出力できます(ただし、出力する必要があるのは1つだけです)。
["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)
か?