@Maksym122

Как оптимизировать код на Python во времени?

Вот условия задачи:
За розміщенням знайдіть його номер у лексикографічному порядку.
Вхідні дані:
У першому рядку вхідного файлу знаходяться числа і (1 ≤ ≤
≤ 20). У другому рядку записано попарно різних чисел з діапазону від
1 до - розміщення.
Вихідні дані:
У вихідний файл виведіть єдине число - номер заданого розміщення.
Приклад вхідних даних:
3 2
3 1
Приклад вхідних даних:
5
Пояснення. Розміщенням з елементів по – це впорядкована
вибірка елементів без повторень з множини {1,2,3, … , − 1, }. У
прикладу, наведеного вище, розглядаються вибірки довжиною 2 з 3-х
елементів:
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
Розміщення (3, 1) у списку всіх розміщень записано під номером 5
(нумерація розміщень починається із 1)
Непонятные слова можете перевести
Вот мой код:
from itertools import permutations

def find_permutation_number(N, K, permutation):
    all_permutations = permutations(range(1, N + 1), K)
    all_permutations = list(all_permutations)
    permutation_index = all_permutations.index(permutation) + 1
    return permutation_index

N, K = map(int, input().split())
permutation = tuple(map(int, input().split()))

result = find_permutation_number(N, K, permutation)
print(result)
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Тебе незачем генерировать все возможные перестановки, чтобы найти нужную.
Прочитай внимательно приведённый пример: на каждое изменение первой цифры приходится 3 цифры всего - 1 задействованная = 2 изменения второй цифры. Поэтому, чтобы добраться до первой цифры, равной 3, нужно будет пропустить минимум 4 перестановки: две для смены 1 на 2 и две для смены 2 на 3, так как каждое изменение второй цифры означает одну перестановку. А значит, искомый номер будет не менее 5. Если бы цифр было больше, то каждое изменение второй цифры означало бы более 1 перестановки.
Аналогичные рассуждения выполняешь для последующих цифр, с поправкой на то, что у тебя будет больше задействованных цифр. Таким образом, наращиваешь искомый номер, пока не достигнешь заданной перестановки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы