Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Комбинаторика – раздел математики, где ставится вопрос о подсчете числа вариантов выбора элементов из некоторого множества согласно определенным правилам.

В задании №8 в ЕГЭ по информатике присутствуют задачи по теме "Комбинаторика", которые могут быть решены как с помощью формул, так и средствами программирования. Как правило, на динамическое программирование задачи в данном задании отсутствуют. Используя сразу два метода при решении задачи, можно с высокой долей вероятности гарантировать получение верного ответа в случае его совпадения в обоих решениях.

Далее рассмотрим основные понятия и формулы по данной теме.

Размещение

Размещение – упорядоченный набор из k различных элементов некоторого n-элементного множества.

Ank=n!(nk)!

Размещение с повторением

Размещение с повторением – упорядоченный набор из k элементов некоторого n-элементного множества.

A‾‾‾nk=nk

Перестановка

Перестановка – последовательность и n различных элементов.

P n = n !

Перестановка с повторением

Перестановка с повторением – последовательность, содержащая n элементов из k типов.

P(n1,n2,..., nk)=n!n1!n2!...nk!

aa...an1 bb...bn2 ... xx...xnk 

Сочетание

Сочетанием из n элементов по k называются подмножества содержащие k элементов из n.

Cnk=n!k!(nk)! 

Следует также упомянуть ряд полезных формул с сочетаниями:

Cnk=Cnnk

Cnk=Cn1k1+Cn1k

Cn0+Cn1+...+Cnn=2n

(x+y)n=Cn0xny0+...+Cnkxnkyk+...+Cnnx0yn

Сочетание с повторением

Сочетанием с повторением называются наборы из k элементов n - элементного множества, возможно с повторяющимися элементами. Порядок элементов не учитывается.

C‾‾‾nk=Cn+k−1k=(n+k1)!k!(nk)! 

Вычисление факториала и сочетаний в Python

Самостоятельная реализация:

#вычисление факториала def f(n): res = 1 for i in range(2, n+1): res *= i return res #вычисление числа сочетаний def c(k, n): return f(n) // f(k) // f(n-k) print(f(5)) # 120 print(c(2, 5)) # 10

Реализация с использованием библиотеки math:

from math import * print(factorial(5)) # 120 print(comb(5, 2)) # 10

Генерация комбинаторных списков в Python

Библиотека itertools языка Python содержит функции, позволяющие генерировать комбинаторные списки:

from itertools import * #декартово произведение l1 = product("AB", [1, 2]) print(list(l1)) #[('A', 1), ('A', 2), ('B', 1), ('B', 2)] #перестановки l2 = permutations([1, 2, 3]) print(list(l2)) #[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)] #сочетания l3 = combinations("ABCD", 2) print(list(l3)) #[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')] #сочетания c повторениями l4 = combinations_with_replacement("ABC", 2) print(list(l4)) #[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

Далее, более детально разберем приведенные выше генераторы:

Декартово произведение (product)

Перестановки (permutations)

Сочетания (combinations)

Сочетания с повторениями (combinations_with_replacement)



Красноярский краевой Дворец пионеров, (c)2006 - 2025, ИНН 246305493507, E-mail: admin@acmp.ru



Контекстная реклама настройка рекламных объявлений в поисковой выдаче