Files
DTU-Noter/Diskret Mat/Binomial formula/main.typ

178 lines
5.6 KiB
Typst

#import "@preview/cetz:0.4.2"
Section 6.4
#title[Binomial coefficients, formula and identities]
= Binomial coefficient
From last week:
$C(n, k) = $ the number of k-combinations from an n-set. Or the number of ways to select k elements from an n-set. Or the number of k-subsets of an n-set. Formula: $n!/(k!-(n-k)!)=mat(n;k)$ for $0<=k<=n$
== Pascal's triangle
#align(center, grid(columns: 2, column-gutter: 1em, cetz.canvas({
import cetz.draw: *
let n = 6
// calculate the triangle
let pascal = ()
for row in range(n + 1) {
let row-data = ()
for col in range(row + 1) {
let value = if col == 0 or col == row {
1
} else {
let prev = pascal.at(row - 1)
prev.at(col - 1) + prev.at(col)
}
row-data.push(value)
}
pascal.push(row-data)
}
// draw lines
for (row-idx, row) in pascal.enumerate() {
if row-idx < n {
let row-len = row.len()
let y = n - row-idx
for (col-idx, val) in row.enumerate() {
let x = col-idx - row-len / 2 + 0.5
let next-row-len = row-len + 1
let left-child-x = col-idx - next-row-len / 2 + 0.5
let right-child-x = (col-idx + 1) - next-row-len / 2 + 0.5
let child-y = y - 1
line((x, y / 1.5), (left-child-x, child-y / 1.5), stroke: gray)
line((x, y / 1.5), (right-child-x, child-y / 1.5), stroke: gray)
}
}
}
// draw values
for (row-idx, row) in pascal.enumerate() {
let row-len = row.len()
let y = (n - row-idx) / 1.5
for (col-idx, val) in row.enumerate() {
let x = col-idx - row-len / 2 + 0.5
circle((x, y), radius: 0.25, fill: white, stroke: none, name: "c-" + str(row-idx) + "-" + str(col-idx))
content((x, y), $binom(#str(row-idx), #str(col-idx))$)
}
}
// draw n
for i in range(n + 1) {
content((rel: (-2, 0), to: ("c-" + str(i) + "-0", "-|", "c-" + str(n - 1) + "-0")), [n=#i])
}
}), cetz.canvas({
import cetz.draw: *
let n = 6
// calculate the triangle
let pascal = ()
for row in range(n + 1) {
let row-data = ()
for col in range(row + 1) {
let value = if col == 0 or col == row {
1
} else {
let prev = pascal.at(row - 1)
prev.at(col - 1) + prev.at(col)
}
row-data.push(value)
}
pascal.push(row-data)
}
// draw lines
for (row-idx, row) in pascal.enumerate() {
if row-idx < n {
let row-len = row.len()
let y = n - row-idx
for (col-idx, val) in row.enumerate() {
let x = col-idx - row-len / 2 + 0.5
let next-row-len = row-len + 1
let left-child-x = col-idx - next-row-len / 2 + 0.5
let right-child-x = (col-idx + 1) - next-row-len / 2 + 0.5
let child-y = y - 1
line((x, y / 1.5), (left-child-x, child-y / 1.5), stroke: gray)
line((x, y / 1.5), (right-child-x, child-y / 1.5), stroke: gray)
}
}
}
// draw values
for (row-idx, row) in pascal.enumerate() {
let row-len = row.len()
let y = (n - row-idx) / 1.5
for (col-idx, val) in row.enumerate() {
let x = col-idx - row-len / 2 + 0.5
circle((x, y), radius: 0.25, fill: white, stroke: none, name: "c-" + str(row-idx) + "-" + str(col-idx))
content((x, y), str(val))
}
}
})))
#figure(image("Pascals triangle-2.png"),caption: [Another form of Pascals triangle. It is mirrored])
Binomial identity:
$ mat(n;k) = mat(n;n-k) $
You can do analytic proof (mathematic proof using the formulas) or the combinatorial proof (count it in one way to get first result, then in a different way to get the other result).
*Combinatorial proof for $mat(n;k)=mat(n;n-k)$:* You could say that for n people, you ask k people to walk out the door, or you could ask `n-k` people to stay in the room.
In Pascal's triangle, adding the rows:
$ mat(n;0)+mat(n;1)+mat(n;2)+dots+(n;n)=sum^n_(k=0)mat(n;k)=2^k $
= Binomial identity
For $mat(n;k)$ you can also write $mat(n-1;k)+mat(n-1;k-1)$. It is called Pascal's identity.
#image("pascals identity.png")
= Binomial formula
$ (x+y)¹=x¹+y¹\
(x+y)²=x²+2x y+y²\
(x+y)³=x³ + 3x²y + 3x y³ + y³\
(x+y)=x+4x³y+6x²y²+4x y³+y
$
Note for each $x^(a)y^(b)$, you have $(x+y)^(a+b)$
You also have that the coefficients (for $(x+y)$ you have 1,4,6,4,1) they follow Pascal's triangle
== The formula
$ (x+y)^n&=mat(n;0)x^n+mat(n;1)x^(n-1) y + mat(n;2)x^(n-2)y²+dots+mat(n;n-1)x y^(n-1)+mat(n;n)y^n\
&=sum^n_(k=0) mat(n;k)x^(n-k)y^k $
$ (x+y)^n=sum^n_(k=0)mat(n;k)x^k y^(n-k)$
== Proof by induction with respect to `n`
*Basis step:* Put $n=1$ and prove that the formular is true:
$ (x+y)¹&=mat(1;0)dot x dot y¹ + mat(1;1)dot x¹ dot y\
&=y+x $
*Induction step:* Assume true for `n-1`, then prove that it's then true for `n`:
$ (x+y)^(n-1)=sum^(n-1)_(k=0)mat(n-1;k)x^k y^(n-1-k) $
$
(x+y)^n&=(x+y)dot (x+y)^(n-1) \
&= (x+y)dot sum^(n-1)_(k=0)mat(n-1;k)x^k y^(n-1-k)\
&=sum^(n-1)_(k=0)mat(n-1;k)x^(k+1)y^(n-1-k)+sum^(n-1)_(k=0)mat(n-1;k)x^k y^(n-k)\
&= x^n+ sum^(n-2)_(k=0)mat(n-1;k)x^(k+1)y^(n-1-k) + sum^(n-1)_(k=1)mat(n-1;k)x^k y^(n-k)+y^n\
&"Replace k+1 with k"\
&= x^n+ sum^(n-1)_(k=1)mat(n-1;k-1)x^(k)y^(n-k) + sum^(n-1)_(k=1)mat(n-1;k)x^k y^(n-k)+y^n\
& "Note from pascals identity:" mat(n-1;k-1) + mat(n-1;k) = mat(n;k)\
$
*Combinatorial Proof:*
Consider expanding $(x+y)^n = (x+y)(x+y)dots.c(x+y)$ (n factors).
To get a term $x^(n-k)y^k$, we must:
- Choose $k$ of the $n$ factors to contribute a $y$ (the rest contribute $x$)
- There are $binom(n,k)$ ways to do this
Therefore, the coefficient of $x^(n-k)y^k$ is $binom(n,k)$.
= Van der Mande
$mat(m+n;r)=sum^r_(k=0)mat(m;r-k) mat(n;k)$