Чему равно самое большое число, которое можно составить из следующих карточек?

Если бы числа на карточках были однозначные, то всё было бы совсем просто: мы бы просто упорядочили их по убыванию. Например, самое большое число, которое можно составить из карточек "2", "3", "9" — это 932.

Когда же на карточках числа могут быть произвольной длины, то решение придумать становится сложнее, но при этом есть такое же простое решение! (И соответствующий алгоритм можно реализовать в одну строчку!)

Как это часто бывает в алгоритмах, первым делом полезно придумать наивный алгоритм. В нашем случае — это просто перебор всех перестановок. Например, для чисел "6", "61", "69" он выдаст нам ответ 69661.

from itertools import permutations

xs = ['6', '61', '69']
print(max(''.join(p) for p in permutations(xs)))

Если чисел мало, то этот код отработает быстро. Но с ростом n, количества входных чисел, этот алгоритм быстро станет непрактичным, потому что количество перестановок есть n!, а n!растёт непозволительно быстро.

Например, если перебирать перестановки со скоростью 10^9штук в секунду, то на перебор всех перестановок двадцати объектов понадобится \frac{20!}{10^9 \times 60 \times 60 \times 24 \times 365} \approx 77 лет.

Можете вручную найти ответ для пяти карточек из шапки поста? И можете написать программу, которая за секунду обработает сто карточек?

Only registered users can participate in poll. Log in, please.
Решили
32.7%Я нашёл самое большое число, которое можно составить из '4', '42', '46', '427', '465'!52
31.45%Я придумал эффективный алгоритм, который и для ста чисел быстро ответ найдёт!50
51.57%Хочу узнать решение82
159 users voted. 33 users abstained.