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
sumber
O(n!)
tetapi tidakO(sqrt(n)*n^n/e^n)
atau tidakO(n!/100000000000000000000)
?O(n!)
danO(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 daripadaO(n!)
untuk n besar.Jawaban:
Haskell, 259
Saya pikir saya akan bisa membuatnya lebih pendek. mungkin aku akan.
ini memiliki kompleksitas waktu O (n ^ 2 * 2 ^ n) * sehingga nilainya sekitar 6.2e82
* Saya tidak benar-benar yakin, tetapi jika ada "penambahan" pada kompleksitas, itu tidak lebih dari polinomial, jadi ini seharusnya tidak mengubah banyak skor.
sumber
Python 2,
237231228225 karakterKarena ini adalah algoritma yang naif, nilainya mungkin sekitar 225! ≈ 1.26e433.
sumber
from itertools import*
akan lebih pendek.("a", "a", 0)
, perlu ada logika tambahan di suatu tempat untuk melewati batas panjang nol. (Dan jika Anda di web, Anda selalu dapat menguji dengan sesuatu seperti codepad.org. )sum
setiap item permutasi. Bukan begituO(n!*n)
?Julia, 213 karakter
Mungkin seperti
n!n
, jadi ~ 2e407.Agar mudah dibaca dan untuk didemonstrasikan, saya meninggalkan beberapa baris dan tab baru yang tidak diawetkan, serta input contoh dan panggilan ke fungsi. Saya juga menggunakan algoritma yang membutuhkan
n!
waktu, tetapi bukann!
memori, ini sedikit lebih layak untuk dijalankan.sumber
sum
pada setiap item permutasi. Bukankah itu O (n! * N)?Python 3 - 491
Saya tidak menghitung panjang variabel grafik input
g
. Solusi ini menggunakan pemrograman dinamis, dan memiliki kompleksitas n ^ 2 * 2 ^ n, dengan skor total ~ 6.39e147. Saya masih cukup baru dalam bermain golf, jadi silakan berbaur jika Anda melihat pemborosan kode di suatu tempat!sumber
Mathematica, 66 byte
Tidak tahu kompleksitasnya, jadi nilainya ada di antara
10^23
dan10^93
.sumber
Rubi,
198180 byteBaris pertama yang membaca input tidak diberi nilai, karena sepertinya itulah yang dilakukan orang lain. Juga, tidak ada baris baru final yang diperlukan untuk ruby.
Itu dengan bodohnya menghasilkan semua permutasi kota, jadi turunkan aku
O(n!*n)
. Sebenarnya, setelah dipikir-pikir, ini lebih lambat dari itu, karena ini memilah semuaO(n!)
jalur daripada melacak yang terbaik sejauh ini.sumber