Bir liste ya da vektör ya da her neyse, bir grup 3-tuples ya da her neyse, ilk iki şey dizgidir ve üçüncü şey bir sayıdır. Dizeler şehirlerdir ve sayı aralarındaki mesafedir. Tuple içindeki şehirlerin sırası keyfidir (yani hangisinin önce hangisinin ikinci, hangisinin ikinci olacağı önemli değildir) çünkü her yönüyle aynı mesafedir. Ayrıca, her bir bağlı alıntı çifti için tam olarak bir grup vardır. Tüm şehirler bağlı olmayabilir. Ayrıca, mesafe her zaman pozitiftir (değil0
). Bu koşulları kontrol etmenize gerek yoktur, girdinin iyi oluşturulacağını varsayabilirsiniz. İşiniz şehirleri döngüsel bir sırayla döndürmektir, öyle ki, herhangi bir şehirde başlarsanız ve aynı şehre geri dönerseniz, şehirler arasındaki mesafelerin toplamı minimum olacaktır (tam olarak ve tümüyle) ) Bir çözüm olduğunu varsayabilirsiniz. Örneğin, size
[("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)]
Aşağıdakilerden herhangi birini çıktılayabilirsiniz (ancak yalnızca birini çıktılamanız gerekir):
["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"]
çünkü en kısa yolculuk: 13.9
Ama değil
["Dillburg","Detroit","New York","Hong Kong"]
çünkü en kısa değil.
Bkz. En.wikipedia.org/wiki/Travelling_salesman_problem
puanlama
Burada ilginç hale geliyor. Sahip olduğunuz karakter sayısını alır ve bunları en kötü durum O-gösterim formülüne bağlarsınız. Örneğin, 42 karakterlik bir kaba kuvvet programı yazdığınızı varsayalım. Hepimizin bildiği gibi, en kötü durum şehir sayısının n!
nerede n
olduğudur. 42! = 1405006117752879898543142606244511569936384000000000, bu yüzden puanınız. En düşük puan kazanır .
Not: Daha sonra da rahatladım, ancak nasıl çözüleceğinden emin değildim ve kimsenin fark etmeyeceğini umuyordum. İnsanlar yaptı, bu yüzden issacg'ın önerisiyle gideceğim:
tek seçenek O (n!) ve O (b ^ n n ^ a ln (n) ^ k) şeklindedir ve tüm gösterim sınırları, bu gösterime göre mümkün olduğunca sıkı olmalıdır
O(n!)
ve O(b^n*n^a*ln(n)^k)
ve tüm sınırları olduğunu notasyonu verilen mümkün olduğunca Sımsıkı gibi olmalıdır. Ancak OP açıklığa kavuşturmalıdır.
O(n^2*2^n)
çok daha azdır O(n!)
.
O(n!)
olduğunu,O(sqrt(n)*n^n/e^n)
ne olmadığını nasıl söylersinizO(n!/100000000000000000000)
?