Перебор (перестановка) чисел на Pyton

Полный перебор
(перестановка)
m чисел в n системе.
Пример: n=5 m=3.
000 001 002 003 010 011 012 013 020 021 ... 331 332 333 ... 440 441 442 443 444
Решаем алгоритм рекурсивно. На каждом шаге рекурсии в цикле перебираем одну позицию и формируем начало списка. Уходим на новую рекурсию.

# Функция перебора
def peres(n:int,m:int,prefix=[]):
""" Функция делает полный перебор чисел у которых m
разрядов (позиций) и оно в n-ой системе (от 0 до n-1).
prefix уже сформированная часть списка (начало)"""
# Выход из рекурсии
if m==0:
print(prefix,end=" ")
return None
# перебор вариантов
# добавляем в список элемент
# уходим на новую рекурсию
# убираем его чтобы добавить другой
# на новой итерации
for i in range(n):
prefix.append(i)
peres(n,m-1,prefix)
prefix.pop()
# Выход (return - для красоты)
return None
# Запускаем программу
peres(5,3)
def peres(n:int,m:int,prefix=[]):
""" Функция делает полный перебор чисел у которых m
разрядов (позиций) и оно в n-ой системе (от 0 до n-1).
prefix уже сформированная часть списка (начало)"""
# Выход из рекурсии
if m==0:
print(prefix,end=" ")
return None
# перебор вариантов
# добавляем в список элемент
# уходим на новую рекурсию
# убираем его чтобы добавить другой
# на новой итерации
for i in range(n):
prefix.append(i)
peres(n,m-1,prefix)
prefix.pop()
# Выход (return - для красоты)
return None
# Запускаем программу
peres(5,3)
Результат работы программы:

Полный перебор m чисел в n системе без повторов.
Пример: n=5 m=3.
012 013 014 021 023 024 031 032 034 041 ... 123 124 130 ... 423 430 431 443 432
Полностью используем предыдущиий алгоритм перебора последовательности. Решаем алгоритм рекурсивно. На каждом шаге рекурсии в цикле перебираем одну позицию и формируем начало списка. Уходим на новую рекурсию. Добавим одну строчку. Проверяем если цифра уже есть в списке prefix уходим на новую итерацию пропуская вызов новой рекурсии.

# Функция перебора
def peres(n:int,m:int,prefix=[]):
""" Функция делает полный перебор чисел у которых m
разрядов (позиций) и оно в n-ой системе (от 0 до n-1).
prefix уже сформированная часть списка (начало)"""
# Выход из рекурсии
if m==0:
print(prefix,end=" ")
return None
# перебор вариантов
# добавляем в список элемент
# уходим на новую рекурсию
# убираем его чтобы добавить другой
# на новой итерации
for i in range(n):
if (not (i in prefix)):
prefix.append(i)
peres(n,m-1,prefix)
prefix.pop()
# Выход (return - для красоты )
return None
# Запускаем программу
peres(5,3)
def peres(n:int,m:int,prefix=[]):
""" Функция делает полный перебор чисел у которых m
разрядов (позиций) и оно в n-ой системе (от 0 до n-1).
prefix уже сформированная часть списка (начало)"""
# Выход из рекурсии
if m==0:
print(prefix,end=" ")
return None
# перебор вариантов
# добавляем в список элемент
# уходим на новую рекурсию
# убираем его чтобы добавить другой
# на новой итерации
for i in range(n):
if (not (i in prefix)):
prefix.append(i)
peres(n,m-1,prefix)
prefix.pop()
# Выход (return - для красоты )
return None
# Запускаем программу
peres(5,3)
Результат работы программы:

Исходник программы: копируйте с этой страницы.
Еще алгоритмы тут: Алгоритмы.
Комментарии
Отправить комментарий