Как научиться решать задачи на комбинаторику


Комбинаторика: основные правила и формулы.

КОМБИНАТОРИКА

Комбинаторика – раздел математики, который изучает задачи выбора и расположения элементов из некоторого основного множества в соответствии с заданными правилами. Формулы и  принципы  комбинаторики  используются  в  теории  вероятностей для подсчета  вероятности  случайных  событий и,  соответственно, получения законов распределения случайных величин. Это,  в  свою  очередь,  позволяет  исследовать  закономерности массовых случайных явлений, что является весьма важным для правильного понимания  статистических  закономерностей, проявляющихся в природе и технике.

 

Правила сложения и умножения в комбинаторике

Правило суммы.  Если два действия А и В взаимно исключают друг друга, причем действие А можно выполнить m способами, а В – n способами, то выполнить одно любое из этих действий (либо А, либо В) можно n + m  способами.

 

Пример 1.

В классе учится 16 мальчиков и 10 девочек. Сколькими способами можно назначить одного дежурного?

Решение

Дежурным можно назначить либо мальчика, либо девочку, т.е. дежурным может быть любой из 16 мальчиков, либо любая из 10 девочек.

По правилу суммы получаем, что одного дежурного можно назначить 16+10=26 способами.

 

Правило произведения.  Пусть требуется выполнить последовательно k действий. Если первое действие можно выполнить n1 способами, второе действие n2 способами, третье – n3 способами и так до k-го действия, которое можно выполнить nk  способами, то все k действий вместе могут быть выполнены:

способами.

Пример 2.

В классе учится 16 мальчиков и 10 девочек. Сколькими способами можно назначить двух дежурных?

Решение

Первым дежурным можно назначить либо мальчика, либо девочку. Т.к. в классе учится 16 мальчиков и 10 девочек, то назначить первого дежурного можно 16+10=26 способами.

После того, как мы выбрали первого дежурного, второго мы можем выбрать из оставшихся 25 человек, т.е. 25-ю способами.

По теореме умножения двое дежурных могут быть выбраны 26*25=650 способами.

 Сочетания без повторений. Сочетания с повторениями

 Классической задачей комбинаторики является задача о числе сочетаний без повторений, содержание которой можно выразить вопросом: сколькими способами можно выбрать m из n различных предметов?

Пример 3.

Необходимо выбрать в подарок 4 из 10 имеющихся различных книг. Сколькими способами можно это сделать?

Решение

Нам из 10 книг нужно выбрать 4, причем порядок выбора не имеет значения. Таким образом, нужно найти число сочетаний из 10 элементов по 4:

.

 Рассмотрим задачу о числе сочетаний с повторениями: имеется по r одинаковых предметов каждого из n различных типов; сколькими способами можно выбрать m () из этих (n*r) предметов?

.

Пример 4.

В кондитерском магазине продавались 4 сорта пирожных: наполеоны, эклеры, песочные и слоеные. Сколькими способами можно купить 7 пирожных?

Решение

Т.к. среди 7 пирожных могут быть пирожные одного сорта, то число способов, которыми можно купить 7 пирожных, определяется числом сочетаний с повторениями из 7 по 4.

.


 Размещения без повторений. Размещения с повторениями

 Классической задачей комбинаторики является задача о числе размещений без повторений, содержание которой можно выразить вопросом: сколькими способами можно выбрать и разместить по m различным местам m из n различных предметов?

 

Пример 5.

В некоторой газете 12 страниц. Необходимо на страницах этой газеты поместить четыре фотографии. Сколькими способами можно это сделать, если ни одна страница газеты не должна содержать более одной фотографии?

Решение.

В  данной  задаче мы не просто выбираем фотографии, а размещаем их на определенных страницах газеты, причем каждая страница газеты должна содержать не более одной фотографии. Таким  образом,  задача сводится к классической задаче об определении числа размещений без повторений из 12 элементов по 4 элемента:

Таким образом, 4 фотографии на 12 страницах можно расположить 11880 способами.

 

Также классической задачей комбинаторики является задача о числе размещений с повторениями, содержание которой можно выразить вопросом: сколькими способами можно выбрать и разместить по m различным местам m из n предметов, среди которых есть одинаковые?

Пример 6.

У мальчика остались от набора для настольной игры штампы с цифрами 1, 3 и 7. Он решил с помощью этих штампов нанести на все книги пятизначные номера– составить каталог. Сколько различных пятизначных номеров может составить мальчик?

Решение

Можно  считать,  что  опыт  состоит  в 5-кратном выборе  с возращением одной из 3 цифр (1, 3, 7). Таким образом,  число  пятизначных  номеров  определяется  числом  размещений с повторениями из 3 элементов по 5:

.

 Перестановки без повторений. Перестановки с повторениями

 Классической задачей комбинаторики является задача о числе перестановок без повторения, содержание которой можно выразить вопросом: сколькими способами можно разместить n различных предметов на n различных местах?

Пример 7.

Сколько можно составить четырехбуквенных «слов» из букв слова«брак»?

Решение

Генеральной  совокупностью  являются 4  буквы слова  «брак» (б, р, а, к). Число  «слов» определяется перестановками этих 4 букв, т. е.

Для случая, когда среди выбираемых n элементов есть одинаковые (выборка с возвращением), задачу о числе перестановок с повторениями можно выразить вопросом: сколькими способами можно переставить n предметов, расположенных на n различных местах, если среди n предметов имеются k различных типов (k < n), т. е. есть одинаковые предметы.

Пример 8.

Сколько разных буквосочетаний можно сделать из букв слова «Миссисипи»?

Решение

Здесь 1 буква  «м», 4 буквы «и», 3 буквы «c» и 1 буква  «п», всего 9 букв. Следовательно, число перестановок с повторениями равно

Крутейшие задачи на комбинаторику

Суть реше­ния сво­дит­ся к сле­ду­ю­ще­му: мы шаг за шагом будем брать дан­ные из усло­вий, что­бы най­ти неиз­вест­ные пока зна­че­ния, а все резуль­та­ты впи­сы­вать в такую таб­ли­цу:

Дом  1 2 3 4 5
Цвет жёл­тый синий ? ? ?
Наци­о­наль­ность нор­ве­жец ? ? ? ?
Напи­ток вода ? ? ? ?
Крип­то­ва­лю­та Ethereum ? ? ? ?
Живот­ное ? ? ? ? ?

Затем мы будем брать новые резуль­та­ты, смот­реть, как их мож­но сов­ме­стить с усло­ви­я­ми, так­же зане­сём в таб­ли­цу и ста­нем так делать до тех пор, пока не запол­ним все ячей­ки.

Разбираемся с первым домом

В п. 10 явно ска­за­но, что нор­ве­жец живёт в пер­вом доме, а если доба­вить сюда п. 15 (нор­ве­жец живёт рядом с синим домом), то ста­но­вит­ся понят­но, что вто­рой дом — синий.

Теперь раз­бе­рём­ся с цве­том пер­во­го дома. Мы уже зна­ем, что рядом с пер­вым домом сто­ит синий дом, а зна­чит это един­ствен­ный дом, кото­рый сто­ит рядом с пер­вым. Из пунк­та 6 (зелё­ный дом сто­ит сра­зу спра­ва от бело­го дома) сле­ду­ет, что пер­вый дом не может быть зелё­ным или белым — зелё­ный и белый долж­ны сто­ять рядом, а у нас рядом с пер­вым домом сто­ит синий. Оста­ют­ся крас­ный или жёл­тый. Но в крас­ном доме живёт англи­ча­нин — так напи­са­но в п. 2, поэто­му оста­ёт­ся толь­ко жёл­тый. Пер­вый дом — жёл­тый.

Смот­рим, что гово­рят нам усло­вия зада­чи про жёл­тый дом:

п. 8 — в жёл­том доме май­нят Ethereum;

п. 12 — в доме по сосед­ству с тем, в кото­ром дер­жат лошадь, май­нят Ethereum.

Но у нас рядом с домом, где май­нят Ethereum, сто­ит толь­ко вто­рой дом, поэто­му лошадь дер­жат во вто­ром доме.

Пере­хо­дим к напит­кам. Мы уже зна­ем, что в пер­вом жёл­том доме живёт нор­ве­жец, кото­рый май­нит Ethereum. Вот как это вли­я­ет на усло­вия:

  • Нор­ве­жец не пьёт чай, пото­му что это дела­ет укра­и­нец в п. 5.
  • Нор­ве­жец не пьёт кофе, пото­му что по п. 4 кофе пьют в зелё­ном доме.
  • Нор­ве­жец так­же не пьёт моло­ко, пото­му что в п. 9 напи­са­но, что в цен­траль­ном доме пьют моло­ко. Но так как пер­вый дом — не цен­траль­ный, то и моло­ко в пер­вом доме не пьют.
  • Нор­ве­жец не пьёт апель­си­но­вый сок, пото­му что соглас­но п. 13 апель­си­но­вый сок пьёт тот, кто май­нит IOTA.

Поэто­му един­ствен­ное, что оста­ёт­ся пить нор­веж­цу, — это вода. Отлич­но, мы нашли ответ на пер­вый вопрос. Не забу­дем зане­сти всю най­ден­ную инфор­ма­цию в таб­ли­цу:

Дом  1 2 3 4 5
Цвет жёл­тый синий ? ? ?
Наци­о­наль­ность нор­ве­жец ? ? ? ?
Напи­ток вода ? моло­ко ? ?
Крип­то­ва­лю­та Ethereum ? ? ? ?
Живот­ное ? лошадь ? ? ?

Всё о втором доме

Нач­нём с крип­то­ва­лю­ты.

Мы точ­но зна­ем, что это не Ethereum, пото­му что её май­нит нор­ве­жец в пер­вом доме. А ещё, раз у жиль­ца сине­го дома есть лошадь, то он точ­но не май­нит Bitcoin — в п. 7 напи­са­но, что тот, кто май­нит Bitcoin, раз­во­дит ули­ток. Давай­те пора­бо­та­ем с пред­по­ло­же­ни­я­ми и про­ве­рим, насколь­ко вер­ное каж­дое из них.

Допу­стим, что во вто­ром доме май­нят IOTA. По п. 13 (тот, кто май­нит IOTA, пьёт апель­си­но­вый сок) жилец пьёт апель­си­но­вый сок, а это зна­чит, что тут живёт не укра­и­нец, пото­му что он пьёт чай (п. 5). Это так­же не англи­ча­нин, кото­рый живёт в крас­ном доме (п. 2), и не испа­нец, пото­му что по п. 3 у испан­ца есть соба­ка. Япо­нец тоже тут жить не может, пото­му что по п. 14 япо­нец май­нит Monero, а не IOTA. Нор­ве­жец же, напом­ним, живёт в пер­вом доме. Полу­ча­ет­ся, что во вто­ром доме никто не живёт, а тако­го не может быть, сле­до­ва­тель­но, наше пред­по­ло­же­ние, что во вто­ром доме май­нят IOTA, невер­ное.

Идём даль­ше и пред­по­ло­жим, что во вто­ром доме май­нят Monero, а зна­чит, из п. 14 вид­но, что тут живёт япо­нец (япо­нец май­нит Monero). Поэто­му во вто­ром доме не пьют чай, пото­му что чай пьёт укра­и­нец (п. 5), не пьют кофе, пото­му что кофе пьют в зелё­ном доме (п. 4). А ещё здесь не пьют моло­ко — моло­ко пьют в тре­тьем доме (п. 9), и не пьют апель­си­но­вый сок, пото­му что сок пьёт люби­тель IOTA (п. 13). А раз вода уже заня­та нор­веж­цем, то полу­ча­ет­ся, что во вто­ром доме ниче­го не пьют. Тако­го не может быть, а зна­чит, наше пред­по­ло­же­ние, что во вто­ром доме май­нят Monero, невер­ное. Мы выяс­ни­ли, что там не май­нят Ethereum, Bitcoin, IOTA и Monero. Оста­ёт­ся толь­ко Stellar — её и май­нят во вто­ром доме.

Давай­те выяс­ним наци­о­наль­ность, зная назва­ние крип­то­ва­лю­ты. Это не англи­ча­нин, кото­рый живёт в крас­ном доме (п. 2), и не испа­нец с соба­кой (п. 3), пото­му что во вто­ром доме дер­жат лошадь. Ещё это не япо­нец, кото­рый май­нит Monero (п. 14), и не нор­ве­жец из пер­во­го дома. Полу­ча­ет­ся, что во вто­ром доме живёт укра­и­нец, а соглас­но п. 5 укра­и­нец пьёт чай.

Зане­сём новые дан­ные в таб­ли­цу:

Дом  1 2 3 4 5
Цвет жёл­тый синий ? ? ?
Наци­о­наль­ность нор­ве­жец укра­и­нец ? ? ?
Напи­ток вода чай моло­ко ? ?
Крип­то­ва­лю­та Ethereum Stellar ? ? ?
Живот­ное ? лошадь ? ? ?

Где живёт лиса

Исхо­дя из п. 11 (сосед того, кто май­нит Stellar, дер­жит лису), мы пони­ма­ем, что раз Stellar май­нят во вто­ром доме, то лиса живёт или в пер­вом, или в тре­тьем доме.

Допу­стим, что лиса — в тре­тьем доме. Теперь дела­ем вне­зап­ный пово­рот и зада­дим­ся вопро­сом: а что тогда пьёт чело­век из п. 7, кото­рый раз­во­дит ули­ток и май­нит Bitcoin? Он не пьёт сок, пото­му что сок пьёт люби­тель IOTA (п. 13), и моло­ко — его пьют в тре­тьем доме, где, как мы пред­по­ла­га­ем, дер­жат лису. Вода и чай уже заня­ты на преды­ду­щих эта­пах. Оста­ёт­ся толь­ко кофе, кото­рый пьют в зелё­ном доме (п. 4).

А раз так, то полу­ча­ет­ся, что в зелё­ном доме живёт чело­век, кото­рый раз­во­дит ули­ток, май­нит Bitcoin и пьёт кофе. Он точ­но не нор­ве­жец или укра­и­нец — мы это выяс­ни­ли рань­ше. И это точ­но не англи­ча­нин, кото­рый живёт в крас­ном доме (п. 2), не испа­нец, у кото­ро­го соба­ка (п. 3), и не япо­нец, кото­рый май­нит Monero (п. 14). Мы исклю­чи­ли все наци­о­наль­но­сти, а тако­го не может быть, поэто­му наше исход­ное пред­по­ло­же­ние о том, что лиса живёт в тре­тьем доме — невер­ное.

Полу­ча­ет­ся, что лиса живёт в пер­вом доме. Доба­вим это в таб­лич­ку:

Дом  1 2 3 4 5
Цвет жёл­тый синий ? ? ?
Наци­о­наль­ность нор­ве­жец укра­и­нец ? ? ?
Напи­ток вода чай моло­ко ? ?
Крип­то­ва­лю­та Ethereum Stellar ? ? ?
Живот­ное лиса лошадь ? ? ?

Третий дом

У нас оста­лось два сво­бод­ных напит­ка — кофе и апель­си­но­вый сок, кото­рые пьют в чет­вёр­том и пятом доме.

Тот, кто май­нит Bitcoin и раз­во­дит ули­ток, не живёт в доме, где пьют сок, пото­му что его пьёт люби­тель IOTA (п. 13). Зна­чит, дела­ем пред­по­ло­же­ние, что люби­тель ули­ток живёт в доме, где пьют кофе, а по п. 4 кофе пьют в зелё­ном доме. А мы толь­ко что разо­бра­ли в раз­де­ле про лису имен­но ту ситу­а­цию, когда жилец зелё­но­го дома раз­во­дит ули­ток и пьёт кофе. Тогда мы при­шли к выво­ду, что это невоз­мож­но, а зна­чит, люби­тель ули­ток не может пить кофе или сок, поэто­му он не живёт в чет­вёр­том или пятом доме.

Полу­ча­ет­ся, что люби­тель ули­ток, кото­рый май­нит Bitcoin, живёт в тре­тьем доме.

Дом  1 2 3 4 5
Цвет жёл­тый синий ? ? ?
Наци­о­наль­ность нор­ве­жец укра­и­нец ? ? ?
Напи­ток вода чай моло­ко ? ?
Крип­то­ва­лю­та Ethereum Stellar BitCoin ? ?
Живот­ное лиса лошадь улит­ки ? ?

Четвёртый и пятый дома

В зелё­ном доме пьют кофе (п. 4), а люби­тель IOTA пьёт сок (п. 13), поэто­му он не может жить в зелё­ном доме. Полу­ча­ет­ся, что в зелё­ном доме май­нят Monero, а раз так, то это — япо­нец (п. 14).

Это озна­ча­ет, что в остав­шем­ся доме пьют сок и май­нят IOTA, и дом этот на 3-м или на 4-м месте (по п. 6 — зелё­ный дом сто­ит сра­зу спра­ва от бело­го дома). Допу­стим, в тре­тьем доме живёт испа­нец, у кото­ро­го долж­на быть соба­ка (п. 3), но в таб­ли­це в тре­тьем доме уже есть улит­ки, а зна­чит, испа­нец с соба­кой живёт в чет­вёр­том доме, и как раз имен­но он пьёт сок и май­нит IOTA.

Тре­тий дом мето­дом исклю­че­ния оста­ёт­ся англи­ча­ни­ну, а это зна­чит, что тре­тий дом — крас­ный (п. 2). Полу­ча­ет­ся, что у испан­ца белый дом.

Запи­шем всё в таб­ли­цу:

Дом  1 2 3 4 5
Цвет жёл­тый синий крас­ный белый зелё­ный
Наци­о­наль­ность нор­ве­жец укра­и­нец англи­ча­нин испа­нец япо­нец
Напи­ток вода чай моло­ко сок кофе
Крип­то­ва­лю­та Ethereum Stellar BitCoin IOTA Monero
Живот­ное лиса лошадь улит­ки соба­ка ?

Зебра

У нас оста­лась одна неза­пол­нен­ная клет­ка в таб­ли­це, кото­рая тоже мето­дом исклю­че­ния доста­ёт­ся зеб­ре.

Теперь мы можем отве­тить на вопро­сы по зада­че: воду пьёт нор­ве­жец, а зеб­ру дер­жит япо­нец.

Решение комбинаторных задач с PySpark | Салил Джайн | Август, 2020

Фотография Джо Чичиарелли на Unsplash

Разбиение комбинаторных задач с использованием двоичного представления

Рассмотрим постановку задачи. Учитывая n действительных чисел x1 , x2 , xn , выберите любой набор различных чисел так, чтобы функция f для этих выбранных чисел давала максимальное значение. функция f может принимать любое количество входов, поэтому можно выбрать любое количество чисел.

Ожидаемый результат: набор чисел S = { xi , xj ,…, xm } или максимальное значение для f (xi, xj,…, xm).

Стратегия грубой силы для решения этой проблемы заключается в перестановке чисел так, что сначала выбирается 1 из n чисел, затем 2, затем 3 и так далее. Если бы мы не знали функцию f , то мы не знали бы, важен ли порядок входных параметров или нет. Следовательно, нам нужна перестановка против комбинации.n-1, получить их представление как двоичный вектор из n битов, а затем выбрать числа в зависимости от того, какие биты включены.

Метод get_data преобразует num в двоичное представление и на основе того, какие биты находятся в этом индексе, из данных возвращается.

 Вывод: 
000 []
001 [1]
010 [4]
011 [4, 1]
100 [3]
101 [3, 1]
110 [3, 4]
111 [3, 4 , 1]

Как видно из вышеприведенного вывода, двоичная строка 010 получит значение 4 с индексом 1, а 011 получит значение [4, 1] с индексами 1 и 2.n в количестве сегментов, а затем вычисления функции f выполняются на каждом сегменте параллельно.

process_combination метод обрабатывает один набор чисел, вычисленных из равных частей. Он выполняет функцию f для всех этих чисел и возвращает максимальное значение.

resolve_combination объединяет все вместе. Сначала он вычисляет количество комбинаций, а затем делит их на равные сегменты. Затем распараллеливайте эти сегменты, чтобы вычислить функцию f по всем сегментам, используя метод process_combination .

Существуют различные случаи, когда знание функции f может значительно сократить пространство поиска.

Среднее значение

Допустим, функция f вычисляет среднее значение всех входных параметров (чисел).

Если из всех входных данных выбрано наибольшее число, среднее значение будет наибольшим. Таким образом, в этом сценарии мы можем просто выбрать наибольшее число, а не использовать искру.

Сумма

Аналогично среднему, если функция f вычисляет сумму всех входных параметров (чисел).

Мы можем просто просуммировать все числа из входных данных, потому что это будет наибольшее число.

Синус

Если функция f вычисляет синус суммы всех входных параметров, то лучше использовать искровое решение. Может быть более сложная функция f , где искровой раствор может оказаться чрезвычайно полезным.

Выше я обсуждал, как можно легко вычислить среднее значение и сумму без искрового раствора. Я использую ту же парадигму для модульного тестирования.В случае среднего я сравниваю выходной сигнал искры с максимальным значением входных данных. И в случае суммы я сравниваю выход искры с суммой всех входных данных.

В этом посте я изложил простую схему решения комбинаторной задачи с использованием простой функции f, , хотя решение этим не ограничивается и может быть применено к множеству задач. Надеюсь, вам понравилось!

java - Комбинаторная реализация оптимизации

Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Общественные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним возможности технической карьеры
.Алгоритм

- В чем разница между комбинаторными и численными задачами

Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Общественные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним возможности технической карьеры
.

Смотрите также