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

Перебор чисел на 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

Решаем алгоритм рекурсивно. На каждом шаге рекурсии в цикле перебираем одну позицию и формируем начало списка. Уходим на новую рекурсию.

Перебор чисел на Pyton
# Функция перебора
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 уходим на новую итерацию пропуская вызов новой рекурсии.

Перебор чисел на Pyton
# Функция перебора
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)

Результат работы программы:
Перебор (перестановка) чисел на Pyton

Исходник программы: копируйте с этой страницы.

Еще алгоритмы тут: Алгоритмы.

Комментарии

Популярные сообщения из этого блога

Программа на Python для Ханойской башни

Нахождение НОК (наименьшее общее кратное) в Python

Поиск простых чисел в диапазоне от 1 до 100

Бинарный поиск (также известный как двоичный поиск или метод половинного деления)

Как найти наибольший общий делитель (НОД) в Python

Сортировка массива методом пузырька на Python

Перевод числа из десятичной системы в двоичную (бинарную) на Python

Сортировка массива методом выбора на Python

Сортировка массива методом вставки на Python