Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Перебор всех k-элементных подмножествСодержание книги
Поиск на нашем сайте Рассмотрим задачу построения всех подмножеств данного множества, содержащих ровно k единиц. Такой объект (k-элементное подмножество n-элементного множества) можно задать несколькими способами. Первый способ — двоичная строка длины n в которой ровно k единиц. Для построения такой строки модифицируем функцию generate, добавив в нее еще один дополнительный параметр — число единиц k, которое необходимо добавить к исходной строке. Добавляя к строке prefix символ «0», рекурсию нужно вызывать с параметрами (n−1, k), то есть нужно сгенерировать еще n−1 символ, среди которых должно быть k единиц, т. к. новых единиц добавлено не было. А если к строке prefix был добавлен символ «1», то рекурсию нужно будет вызывать с параметрами (n−1, k−1). Но нужно поставить еще дополнительные условия, ограничивающие случаи, когда функцию можно вызывать рекурсивно. А именно, символ «1» можно добавить только в том случае, когда k>0. А символ «0» можно добавить при условии, что k<n, так как при k=n все оставшиеся символы должны быть единицами. def generate(n, k, prefix): Другой способ представления множества — список выбранных элементов. Пусть в множестве nэлементов - числа от 1 до n. Тогда каждое множество - это некоторый набор из k неповторяющихся чисел от 1 до n. Чтобы представление каждого подмножества было единственным, будем считать, что числа в наборе упорядочены по возрастанию. Например, при n=4 и k=2 есть 6 различных множеств: {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4}. Таким образом, задача сводится к задаче построения всех возрастающих последовательностей длины kсоставленных из чисел от 1 до n. Для построения всех таких последовательностей можно использовать следующую функцию: def generate(n, k, prefix): В этом годе параметр prefix — это список уже построенного начала последовательности, поэтому вызывать функцию generate нужно передавая последним параметром пустой список. Параметр n - это максимальное число элементов последовательности, параметр k - это количество элементов последовательности, которое еще необходимо добавить к списку prefix. Если k=0, то больше добавлять к prefix нечего и рекурсия заканчивается. Во всех остальных случаях перебирается следующий элемент, который необходимо добавить к prefix. Его значение перебирается в цикле по переменной next. Минимальное значение next на 1 больше последнего элемента списка prefix, а если prefix пуст, то минимальное значение next равно 1. Дальше возможное значение next увеличивается на 1, при это элемент next добавляется к списку prefix. Максимальное значение next равно n−k+1, т. к. после числа next необходимо записать еще k−1 число, большее next, но не превосходящее n. ПЕРЕБОР ВСЕХ ПЕРЕСТАНОВОК Напишем алгоритм перебора всех перестановок чисел от 1 до n, то есть последовательности, полученной из списка чисел от 1 до n изменением порядка их следования. Известно, что таких перестановок существует n!, напишем функцию, которая выводит все перестановки в лексикографическом порядке. Как и ранее, функция получает в качестве параметра значение n (длина перестановки) и prefix - уже построенное начало перестановки. Далее перебираются все числа от 1 до n в порядке возрастания в качестве возможного продолжения перестановки. Если число не содержится в списке prefix, то к списку prefix добавляется следующий элемент последовательности и функция вызывается рекурсивно. Окончание рекурсии происходит в случае, если список prefix имеет длину n, то есть все числа от 1 до nуже содержатся в списке prefix. def generate(n, prefix):
|
||
|
Последнее изменение этой страницы: 2017-02-19; просмотров: 743; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.006 с.) |