The primary goal of this course is to become familiar with some of the basic mathematical ideas used in programming.

Reading:

Levin, 1.1, 1.2

Counting: Levin 1.1, on page 57

- Additive principle
- Multiplicative principle
- Set-theoretic approach
- Pies on page 64

Counting subsets of {1, 2, ..., N}, Levin 1.2 on page 70

- Counting
**all**subsets (including ∅) - Counting all nonempty subsets
- Counting all subsets of size 1
- Counting all subsets of size 3; = # of subsets of size 2
- Binomial coefficients
- Bit Strings, B(n,k) = # of bit strings of length n with k 1's (weight k)
- Recurrence relation: B(5,3) = B(4,3) + B(4,2)
- Lattice Paths

**Wednesday**

Probably the **best** way to understand counting all
k-element subsets of {1,2,...,n} is first to count the k-element sequences
(with no repeats),

using the multiplication principle, and then divide by k! because one **set**
of size k corresponds to k! **sequences**.

Levin does this in Section 1.3.

Recurrence relationships:

factorial: fact(1) = 1, fact(n+1) = (n+1)*fact(n)

fib(0) = fib(1) = 1, fib(n+1) = fib(n) + fib(n-1)

Now for C(n,k), or (n choose k). Let us *define* it to be n! /
(n-k)!k!, or n*(n-1)*...*(n-k+1) / k!.

Claim: C(n,0) = C(n,n) = 1, C(n+1,k) = C(n,k) + C(n,k-1)

Claim: number of k-weight bitstrings of length n is equal to the number of k-sized subsets of {1,...,n}.

Proof: Natural one-to-one correspondence of bitstring s to {i<=n |
s(i) = 1}, that is, <0,1,1,0,0,0,1,0> matches to {2,3,7}

(wait, are bitstrings indexed starting at 0 or starting at 1?)

Recurrence relation for bitstrings: B(n,0) = B(n,n) = 1, B(n+1,k) = B(n,k) + B(n,k-1)

Therefore B(n,k) = C(n,k)

This is an alternative proof!

Pascal's triangle, using the recurrence rule

Binomial theorem: expansion of (x+y)^{n}

Counting lattice paths: same as bitstrings, where 1 = horizontal and 0 = vertical

Pascal's Triangle

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21
7 1

1 8
28 56 70 56 28 8 1

Pascal's triangle *modulo 2*:

See also here.

Counting the single value at the top as row 0 (so the row (1 3 3 1) is
row 3), we can prove by induction that all entries in row 2^{n} of
Pascal's Triangle are odd, and therefore in the mod-2 version are all 1.
From this we can then prove the repeating pattern evident above.