Собеседования по алгоритмам: максимальная конкатенация

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Если бы числа на карточках были однозначные, то всё было бы совсем просто: мы бы просто упорядочили их по убыванию. Например, самое большое число, которое можно составить из карточек "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 лет.

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Решили
20% Я нашёл самое большое число, которое можно составить из '4', '42', '46', '427', '465'! 3
60% Я придумал эффективный алгоритм, который и для ста чисел быстро ответ найдёт! 9
40% Хочу узнать решение 6
Проголосовали 15 пользователей. Воздержался 1 пользователь.
Источник: https://habr.com/ru/articles/743762/


Интересные статьи

Интересные статьи

В этой статье я хочу поговорить об этапах отбора в FAANG (он же MAANG) компании. Сразу оговорюсь, что к таким компаниям я отнесу не только компании, которые входят в аббревиатуру, но и все компании, к...
Многие ребята, не имевшие дело с собеседованиями на английском языке, очень их бояться. На самом деле все не так страшно. Давайте расскажу вам об особенностях этого мероприятия на примере тестировщика...
Собеседования в крупные IT-компании почти всегда содержат алгоритмическую секцию — даже если вы собеседуетесь на позицию, в работе на которой алгоритмы возникать вряд ли будут. Ниже мы приводим п...
Так уж сложилось, что в последнее время, я и моё ближайшее окружение активно собеседуемся как в пост-СНГ компании, так и в ближнее зарубежье, что вкупе с моим предыдущим опытом "по ту сто...
Недавно общался со своим знакомым. Парнишка учится Android разработке и обладает довольно крепким багажом знаний. Я ему задал вопрос: «Почему ты до сих пор не ходишь на собеседования? Ты бы у...