Anda diberikan, sebagai daftar atau vektor atau apa pun, sekelompok 3-tupel atau apa pun, di mana dua hal pertama adalah string, dan hal ketiga adalah angka. String adalah kota, dan jumlahnya adalah jarak di antara mereka. Urutan kota-kota dalam tupel adalah arbitrer (yaitu tidak masalah mana yang lebih dulu dan yang datang kedua) karena jaraknya sama untuk setiap jalan. Juga, ada tepat satu tuple untuk setiap pasangan kutipan yang terhubung. Tidak semua kota dapat terhubung. Juga, jaraknya selalu positif (tidak0
). Anda tidak perlu memeriksa kondisi ini, Anda mungkin menganggap input akan terbentuk dengan baik. Tugas Anda adalah mengembalikan kota-kota dalam urutan siklik, sehingga, jika Anda memulai di satu kota, dan berkeliling urutan kembali ke kota yang sama, total jarak antara kota-kota akan minimum (persis dan dalam semua kasing.) Anda mungkin menganggap ada solusi. Sebagai contoh, katakanlah Anda diberi
[("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)]
Anda dapat menampilkan salah satu dari yang berikut ini (tetapi Anda hanya perlu menampilkan satu):
["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"]
karena ini adalah perjalanan tersingkat: 13.9
tapi tidak
["Dillburg","Detroit","New York","Hong Kong"]
karena itu bukan yang terpendek.
Lihat en.wikipedia.org/wiki/Travelling_salesman_problem
Mencetak gol
Di sinilah mulai menarik. Anda mengambil jumlah karakter yang Anda miliki, dan kemudian tancapkan ke rumus O-notasi terburuk. Sebagai contoh, katakanlah Anda menulis program brute force yang terdiri dari 42 karakter. Seperti kita ketahui, kasus terburuk adalah di n!
mana n
jumlah kota. 42! = 1405006117752879898543142606244511569936384000000000, jadi itu adalah skor Anda. The menang skor terendah .
Catatan: Saya juga lega setelah ini, tetapi tidak yakin bagaimana menyelesaikannya dan berharap tidak ada yang memperhatikan. Orang-orang melakukannya, jadi saya akan pergi dengan saran issacg:
satu-satunya pilihan adalah O (n!) dan O (b ^ n n ^ a ln (n) ^ k), dan semua batasan harus sekencang mungkin mengingat notasi tersebut
O(n!)
dan O(b^n*n^a*ln(n)^k)
, dan semua batasan harus sekencang mungkin mengingat notasi itu. OP harus mengklarifikasi.
O(n^2*2^n)
, yang jauh lebih sedikit daripada O(n!)
untuk n besar.
O(n!)
tetapi tidakO(sqrt(n)*n^n/e^n)
atau tidakO(n!/100000000000000000000)
?