- 11. Свойства биномиальных коэффициентов
- Доказательство формулы бинома Ньютона.
- Формула бинома Ньютона
- Содержимое разработки
- Бином Ньютона.
- Коэффициенты бинома Ньютона, свойства биномиальных коэффициентов, треугольник Паскаля.
- Треугольник Паскаля.
- Свойства биномиальных коэффициентов.
- Доказательство формулы бинома Ньютона.
- Расчет биномиальных коэффициентов на Си (С++) и Python
- Расчет биномиальных коэффициентов через факториальную формулу
- Использование 64 битных типов для расчета C(n,k)
- Дальнейшее повышение точности и расчет при n>67
- Для экстремалов и «олимпийцев»
- Дополнение после публикации
- Расчет биномиальных коэффициентов на Python
11. Свойства биномиальных коэффициентов
Свойство 3 является следствием формулы бинома Ньютона:
. (9.1)
Поэтому сочетания еще иногда называют биномиальными коэффициентами.
Сумма биномиальных коэффициентов всех членов разложения равна 2n. Сумма биномиальных коэффициентов членов разложения, стоящих на нечетных местах, равна сумме биномиальных коэффициентов, стоящих на четных местах, и равно 2n–1.
Пример 9.1. Найти разложение степени бинома (2x–3)5.
Решение. Полагая a=2x, b=–3, получим
Пример 9.2. Пятый член разложения не зависит от x. Найти n.
Решение. Пятый член разложения T5 имеет следующий вид:
.
По условию T5 не зависит от x; это означает, что показатель степени при x равен нулю, т. е. (n–4)/3–4=0. Из последнего уравнения находим n=16.
Пример 9.3. Вычислить сумму
.
Решение. Согласно формуле бинома Ньютона, при любом x имеем равенство:
.
Полагая здесь x=1, получим
.
Итак, искомая сумма равна 35, т. е. 243.
9.1. Напишите разложение степени бинома
А) ; б)
; в)
.
Ответ: а) ,
Б) ,
В) .
9.2. Найдите пятый член разложения .
Ответ: .
9.3. Найдите два средних члена разложения .
Ответ: и
.
9.4. Найдите в биномиальном разложении член, не содержащий x.
Ответ: .
9.5. Найдите сумму .
Ответ: .
9.6. Сумма биномиальных коэффициентов разложения равна 64. Напишите член, не содержащий переменную x.
Ответ: n=6, .
Доказательство формулы бинома Ньютона.
Формула бинома Ньютона для натуральных n имеет вид , где
— биномиальные коэффициенты, представляющие из себя сочетания из n по k, k=0,1,2,…,n, а «!» – это знак факториала).
К примеру, известная формула сокращенного умножения «квадрат суммы» вида есть частный случай бинома Ньютона при n=2.
Треугольник Паскаля.
Биномиальные коэффициенты для различных n удобно представлять в виде таблицы, которая называется арифметический треугольник Паскаля. В общем виде треугольник Паскаля имеет следующий вид:
Треугольник Паскаля чаще встречается в виде значений коэффициентов бинома Ньютона для натуральных n:
Боковые стороны треугольника Паскаля состоят из единиц. Внутри треугольника Паскаля стоят числа, получающиеся сложением двух соответствующих чисел над ним. Например, значение десять (выделено красным) получено как сумма четверки и шестерки (выделены голубым). Это правило справедливо для всех внутренних чисел, составляющих треугольник Паскаля, и объясняется свойствами коэффициентов бинома Ньютона.
Свойства биномиальных коэффициентов.
Для коэффициентов бинома Ньютона справедливы следующие свойства:
· коэффициенты, равноудаленные от начала и конца разложения, равны между собой , p=0,1,2,…,n;
· ;
· сумма биномиальных коэффициентов равна числу 2, возведенному в степень, равную показателю степени бинома Ньютона: ;
· сумма биномиальных коэффициентов, стоящих на четных местах, равна сумме биномиальных коэффициентов, стоящих на нечетных местах.
Первые два свойства являются свойствами числа сочетаний.
Доказательство формулы бинома Ньютона.
Приведем доказательство формулы бинома Ньютона, то есть докажем справедливость равенства .
Воспользуемся для доказательства методом математической индукции.
1. Проверим справедливость разложения для какого-нибудь n, допустим, для n = 3.
Получили верное равенство.
2. Предположим, что равенство верно для n-1, то есть, что справедливо равенство .
3. Докажем, что верно равенство , основываясь на предположении второго пункта.
Поехали!
Раскрываем скобки
Группируем слагаемые
Так как и
, то
; так как
и
, то
; более того, используя свойство сочетаний
, получим
Подставив эти результаты в полученное выше равенство
придем к формуле бинома Ньютона .
Этим доказана формула бинома Ньютона.
Общим термином «соединения» мы будем называть три вида комбинаций, составляемых из некоторого числа различных элементов, принадлежащих одному и тому же множеству (например, буквы алфавита, книги в библиотеке, машины на стоянке и т.д.).
Их общее количество обозначается: и равно произведению:
Вот эти размещения: ab, ba, ac, ca, ad, da, bc, cb, bd, db, cd, dc.
Их общее количество обозначается и может быть вычислено по формуле:
Из этой формулы ясно, что
В соответствии с этим определением получим:
Общее число сочетаний можно вычислить, пользуясь и другим выражением:
Эти сочетания: abc, abd, abe, acd, ace, ade, bcd, bce, bde, cde.
Бином Ньютона. Это формула, представляющая выражение ( a + b ) n при положительном целом n в виде многочлена:
Заметим, что сумма показателей степеней для a и b постоянна и равна n.
Числа называются биномиальными коэффициентами.
Их можно вычислить, применяя только сложение, если пользоваться следующей схемой. В верхней строке пишем две единицы. Все последующие строки начинаются и заканчиваются единицей. Промежуточные числа в этих строках получаются суммированием соседних чисел из предыдущей строки. Эта схема называется треугольником Паскаля:
мы можем получить результат моментально, используя таблицу:
Свойства биномиальных коэффициентов.
Для доказательства достаточно положить a = b = 1. Тогда в правой части разложения бинома Ньютона мы будем иметь сумму биномиальных коэффициентов, а слева:
2. Коэффициенты членов, равноудалённых от концов разложения, равны.
Это свойство следует из соотношения:
3. Сумма коэффициентов чётных членов разложения равна сумме коэффициентов нечётных членов разложения; каждая из них равна
Формула бинома Ньютона
Анализ получения и применения биномных формул. Их свойства.умение раскрывать биномные уравнения
Содержимое разработки
Формула бинома Ньютона
(а + b) 2 = а 2 + 2аb + b 2 ;
(а + b) 3 = а 3 + За 2 b + 3аb 2 + b 3 ;
Проанализируем полученные формулы
Свойства биномиальных коэффициентов:
(x + a1)(x + a2). (x + an) Открыв скобки, получим:
Свойство биномиальных коэффициентов
Раскрыть скобки в выражении:
Задача. Пять девушек и трое юношей играют в волейбол. Сколькими способами они могут разбиться на две команды по четыре человека, если в каждой команде должно быть хотя бы по одному юноше?
Решение. Понятно, если мы отберём одну команду из четырёх человек, то вторая определится автоматически. Сколькими способами можно выбрать четыре человека из восьми, чтобы в ней были один или два юноши. Посчитаем команды 1-го типа (содержащие одного юношу). Одного юношу из трёх можно выбрать
способами, трёх девушек из 5 можно выбрать способами. По принципу произведения число команд 1 типа равно
Бином Ньютона.
Навигация по странице.
Коэффициенты бинома Ньютона, свойства биномиальных коэффициентов, треугольник Паскаля.
Треугольник Паскаля.
Биномиальные коэффициенты для различных n удобно представлять в виде таблицы, которая называется арифметический треугольник Паскаля. В общем виде треугольник Паскаля имеет следующий вид:
Треугольник Паскаля чаще встречается в виде значений коэффициентов бинома Ньютона для натуральных n :
Боковые стороны треугольника Паскаля состоят из единиц. Внутри треугольника Паскаля стоят числа, получающиеся сложением двух соответствующих чисел над ним. Например, значение десять (выделено красным) получено как сумма четверки и шестерки (выделены голубым). Это правило справедливо для всех внутренних чисел, составляющих треугольник Паскаля, и объясняется свойствами коэффициентов бинома Ньютона.
Свойства биномиальных коэффициентов.
Первые два свойства являются свойствами числа сочетаний.
Доказательство формулы бинома Ньютона.
Приведем доказательство формулы бинома Ньютона, то есть докажем справедливость равенства .
Получили верное равенство.
Докажем, что верно равенство , основываясь на предположении второго пункта.
Поехали!
Раскрываем скобки
Группируем слагаемые
Так как и
, то
; так как
и
, то
; более того, используя свойство сочетаний
, получим
Подставив эти результаты в полученное выше равенство
придем к формуле бинома Ньютона .
Этим доказана формула бинома Ньютона.
Рассмотрим подробные решения примеров, в которых применяется формула бинома Ньютона.
Напишите разложение выражения (a+b) 5 по формуле бинома Ньютона.
Найдите коэффициент бинома Ньютона для шестого члена разложения выражения .
В заключении рассмотрим пример, в котором использование бинома Ньютона позволяет доказать делимость выражения на заданное число.
Доказать, что значение выражения , где n – натуральное число, делится на 16 без остатка.
Представим первое слагаемое выражение как и воспользуемся формулой бинома Ньютона:
Расчет биномиальных коэффициентов на Си (С++) и Python
При решении задач комбинаторики часто возникает необходимость в расчете биномиальные коэффициентов. Бином Ньютона, т.е. разложение также использует биномиальные коэффициенты. Для их расчета можно использовать формулу, выражающую биномиальный коэффициент через факториалы:
или использовать рекуррентную формулу:
Из бинома Ньютона и рекуррентной формулы ясно, что биномиальные коэффициенты — целые числа. На данном примере хотелось показать, что даже при решении несложной задачи можно наступить на грабли.
Прежде чем перейти к написанию процедур расчета, рассмотрим так называемый треугольник Паскаля.
или он же, но немного в другом виде. В левой колонке строки значение n, дальше в строке значения для k=0..n
В полном соответствии с рекуррентной формулой значения равны 1 и любое число равно сумме числа, стоящего над ним и числа «над ним+шаг влево». Например, в 7й строке число 21, а в 6й строке числа 15 и 6: 21=15+6. Видно также, что значения в строке симметричны относительно середины строки, т.е.
. Это свойство симметричности бинома Ньютона относительно a и b и оно видно в факториальной формуле.
Ниже для биномиальных коэффициентов я буду также использовать представление C(n,k) (его проще набирать, да и формулу-картинку не везде можно вставить.
Расчет биномиальных коэффициентов через факториальную формулу
поскольку биномиальные коэффициенты неотрицательные, будем использовать в расчетах беззнаковый тип.
Значение в очередной строке должно быть примерно в 2 раза больше, чем в предыдущей. Поэтому последний правильно вычисленный коэффициент (см треугольник выше) — это C(12,6) Хотя unsigned int вмещает 4млрд, правильно вычисляются значения меньше 1000. Вот те раз, почему так? Все дело в нашей процедуре bci, точнее в строке, которая сначала вычисляет большое число в числителе, а потом делит его на большое число в знаменателе. Для вычисления C(13,6) сначала вычисляется 13!, а это число > 6млрд и оно не влезает в unsigned int.
Как оптимизировать расчет ? Очень просто: раскроем 13! и сократим числитель и знаменатель на 7! В результате получится
. Запрограммируем расчет по этой формуле
Явно лучше, ошибка возникла при расчете C(31,15). Причина понятна — все то же переполнение. Сначала умножаем на 31 (оп-па — переполнение, потом делим на 15). А что, если использовать рекурсивную формулу? Там только сложение, переполнения быть не должно.
Что ж, пробуем:
Все, что влезло в unsigned int, посчиталось правильно. Вот только строчка с n=34 считалась около минуты. При расчете C(n,n/2) делается два рекурсивных вызова, поэтому время расчета экспоненциально зависит от n. Что же делать — получается либо неточно, либо медленно. Выход — в использовании 64 битных переменных.
Замечание по результатам обсуждений: в конце статьи добавлен раздел, где приведен простой и быстрый вариант «bcr с запоминанием» одного из участников обсуждения.
Использование 64 битных типов для расчета C(n,k)
2.8*10 19 уже не влезает в unsigned long long
Дальнейшее повышение точности и расчет при n>67
Для экстремалов и «олимпийцев»
В принципе, для практических задач точности функции bcd достаточно, но в олимпиадных задачах часто даются тесты «на грани». Т.е. теоретически может встретится задача, где точности double недостаточно и C(n,k) влезает в unsigned long long еле-еле. Как избежать переполнения для таких крайних случаев? Можно использовать рекурсивный алгоритм. Но если он для n=34 считал минуту, то для n=67 будет считать лет 100. Можно запоминать рассчтанные значения (см Дополнение после публиукации).Также можно использовать рекурсию не для всех n и k, а только для «достаточно больших». Вот процедура расчета, которая считает правильно для n 67 при малых k (к примеру, считает C(82,21)=1.83*10 19 ).
В какой-то из олимпиадных задач мне потребовалось вычислять много C(n,k) для n >70, т.е. они заведомо не влезали в unsigned long long. Естественно, пришлось использовать «длинную арифметику» (свою). Для этой задачи я написал «рекурсию с памятью»: вычисленные коэффициенты запоминались в массиве и экспоненциального роста времени расчета не было.
Дополнение после публикации
При обсуждении часто упоминаются варианты с запоминанием рассчитанных значений. У меня есть код с динамическим выделением памяти, но я его не привел. На даный момент вот самый простой и эффективный из комментария chersanya: http://habrahabr.ru/post/274689/#comment_8730359http://habrahabr.ru/post/274689/#comment_8730359
Если в программе надо использовать [почти] все коэффициенты треугольника Паскаля (до какого-то уровня), то приведенный рекурсивный алгоритм с запоминанием — самый быстрый способ. Аналогичный код годится и для unsigned long long и даже для длинной арифметики (хотя там, наверное, лучше динамически вычислять и выделять требуемый объем памяти). Конкретные значения N_MAX могут быть такими:
35 — посчитает все коэффициенты C(n,k), n 19
K_MAX — это может быть N_MAX/2+1, но не больше 35, поскольку C(68,34) за границей unsigned long long.
Для простоты можно всегда брать K_MAX=35 и не думать «войдет — не войдет» (до тех пор, пока не перейдем к числами с разрядностью >64 бита).
Расчет биномиальных коэффициентов на Python
Это дополнение появилось спустя примерно погода после публикации статьи. Автор начал осваивать Python и для тренироки я решаю олимпиадные задачи, сделанные ранее на C++. Для задач связанных в точными/длинными вычислениями приходится либо всячески исхитряться (как при расчетах биномиальных коэфиициентов), дабы избежать раннего переполнения, либо смиряться с потерей точности (перейдя к типу double) либо писать(или искать) длинную арифметику. В Python длинная арифметика уже есть, поэтому тут для вычисления биномиальных коэффициентов достаточно реализовать запоминание. Запоминать их будем в списке (передается в функцию как папаметр).
Вот вывод (без таблички)
270288240945436569515614693625975275496152008446548287007392875106625428705522193898612483924502370165362606085021546104802209750050679917549894219699518475423665484263751733356162464079737887344364574161119497604571044985756287880514600994219426752366915856603136862602484428109296905863799821216320
0.4200884663301988
Меньше полсекуды для такого коэффициента
C(68,34) (напомню — он не влезает в long long) считается за 0.017 сек и равен 28453041475240576740