Вам дають, як список чи вектор, чи що завгодно, купу 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)
, і всі оцінки повинні бути якомога щільніше , враховуючи , що позначення. Хоча ОП має уточнити.
O(n^2*2^n)
, що набагато менше, ніж O(n!)
для великих n.
O(n!)
але ніO(sqrt(n)*n^n/e^n)
ніO(n!/100000000000000000000)
?