Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

$$A$$ has degree $$n-1$$ and $$n$$ coefficients.

$$C(x) = A(x) \cdot B(x)$$

$$C$$ has size $$2n-1$$ and degree $$2n-2$$.

$$B$$ has degree $$m-1$$ and $$m$$ coefficients.

Polynomial Multiplication

$$(d+1)$$ points uniquely define a degree $$d$$ polynomial

Useful to remember!

$$\left[\begin{array}{c}P\left(x_0\right) \\ P\left(x_1\right) \\ \vdots \\ P\left(x_d\right)\end{array}\right]=\underbrace{\left[\begin{array}{ccccc}1 & x_0 & x_0^2 & \cdots & x_0^d \\ 1 & x_1 & x_1^2 & \cdots & x_1^d \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_d & x_d^2 & \cdots & x_d^d\end{array}\right]}_M\left[\begin{array}{c}p_0 \\ p_1 \\ \vdots \\ p_d\end{array}\right]$$

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

\begin{aligned}& c_0=a_0b_0 \\& c_1=a_1 b_0+a_0 b_1 \\& c_2 =a_2 b_0+a_1 b_1+a_0 b_2 \\ & \vdots \\ & c_{n+m-2}=a_{n-1}b_{m-1}\end{aligned}

$$C = A\cdot B$$

Brute-force is $$O(nm)$$.

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

\begin{aligned}& c_0=a_0b_0 \\& c_1=a_1 b_0+a_0 b_1 \\& c_2 =a_2 b_0+a_1 b_1+a_0 b_2 \\ & \vdots \\ & c_{n+m-2}=a_{n-1}b_{m-1}\end{aligned}

$$C = A\cdot B$$

Brute-force is $$O(nm)$$.

$$+ 0x_{n+1} + \cdots + 0x_{n+m-1}$$.

$$+ 0x_{m+1} + \cdots + 0x_{n+m-1}$$.

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

$$C = A\cdot B$$

$$+ 0x_{n+1} + \cdots + 0x_{n+m-1}$$.

$$+ 0x_{m+1} + \cdots + 0x_{n+m-1}$$.

$$(0,A(0))$$

$$(1,A(1))$$

$$(2,A(2))$$

$$\vdots$$

$$(n+m-1,A(n+m-1))$$

$$(0,B(0))$$

$$(1,B(1))$$

$$(2,B(2))$$

$$\vdots$$

$$(n+m-1,B(n+m-1))$$

$$(0,C(0))$$

$$(1,C(1))$$

$$(2,C(2))$$

$$\vdots$$

$$(m+n-1,A(m+n-1))$$

$$\vdots$$

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

$$C = A\cdot B$$

$$+ 0x_{n+1} + \cdots + 0x_{n+m-1}$$.

$${\color{IndianRed}A := \{a_0,\ldots,a_{n-1}\}},{\color{DodgerBlue}B := \{b_0, \ldots, b_{m-1}\}}$$

$$+ 0x_{m+1} + \cdots + 0x_{n+m-1}$$.

$${\color{IndianRed}(0,A(0)),\ldots,(n+m-1,A(n+m-1))},\\{\color{DodgerBlue}(0,B(0)),\ldots,(n+m-1,B(n+m-1))}$$

$${\color{SeaGreen}(0,C(0)),\ldots,(n+m-1,C(m+n-1))}$$

$${\color{SeaGreen}c_0,\ldots,c_{m+n-1}}$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A(1) & =a_0+a_1+a_2+a_3+a_4+a_5+a_6+a_7 \\A(-1) & =a_0-a_1+a_2-a_3+a_4-a_5+a_6-a_7\end{aligned}

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A(1) & =a_0+a_1+a_2+a_3+a_4+a_5+a_6+a_7 \\A(-1) & =a_0-a_1+a_2-a_3+a_4-a_5+a_6-a_7\end{aligned}

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A(1) & = {\color{IndianRed}a_0} + {\color{DodgerBlue}a_1} + {\color{IndianRed}a_2} + {\color{DodgerBlue}a_3} + {\color{IndianRed}a_4} + {\color{DodgerBlue}a_5} + {\color{IndianRed}a_6} + {\color{DodgerBlue}a_7} \\ A(-1) & = {\color{IndianRed}a_0} - {\color{DodgerBlue}a_1} + {\color{IndianRed}a_2} - {\color{DodgerBlue}a_3} + {\color{IndianRed}a_4} - {\color{DodgerBlue}a_5} + {\color{IndianRed}a_6} - {\color{DodgerBlue}a_7} \end{aligned}

\begin{aligned}A(1) & = {\color{IndianRed}Z} + {\color{DodgerBlue}W} \\ A(-1) & = {\color{IndianRed}Z} - {\color{DodgerBlue}W}\end{aligned}

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A_{\text {even }}(x) & =a_0+a_2 x+a_4 x^2+a^6 x^3 \\A_{\text {odd }}(x) & =a_1+a_3 x+a_5 x^2+a_7 x^3\end{aligned}

Write $$A$$ in terms of $$A_{\text{even}}$$ and $$A_{\text{odd}}$$?

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A_{\text {even }}(x) & =a_0+a_2 x+a_4 x^2+a^6 x^3 \\A_{\text {odd }}(x) & =a_1+a_3 x+a_5 x^2+a_7 x^3\end{aligned}

\begin{aligned}A_{\text {even }}(x^2) & =a_0+a_2 x^2+a_4 x^4+a^6 x^6 \\A_{\text {odd }}(x^2) & =a_1+a_3 x^2 +a_5 x^4 +a_7 x^6\end{aligned}

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

$$A(x)=a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6+a_7 x^7.$$

\begin{aligned}A_{\text {even }}(x) & =a_0+a_2 x+a_4 x^2+a^6 x^3 \\A_{\text {odd }}(x) & =a_1+a_3 x+a_5 x^2+a_7 x^3\end{aligned}

\begin{aligned}A_{\text {even }}(x^2) & =a_0+a_2 x^2+a_4 x^4+a^6 x^6 \\A_{\text {odd }}(x^2) & =a_1+a_3 x^2 +a_5 x^4 +a_7 x^6\end{aligned}

$$A(x) = A_{\text{even}}(x^2) + xA_{\text{odd}}(x^2)$$

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

Fast Evaluation

GOAL: Given a polynomial $$A$$ of degree $$<N$$,
evaluate $$A$$ at $$N$$ points of our choosing in total time $$O(N \log N)$$.

Assume $$N$$ is a power of 2 .

Fast Evaluation

Fast Evaluation

WANT: A collection of $$N = 2^k$$ points

$$\{p_0,\ldots,p_{N-1}\}$$

such that

$$|\{p_0^2,\ldots,p_{N-1}^2\}| = 2^{k-1}$$.

Fast Evaluation

Fast Evaluation

WANT: A collection of $$N = 2$$ points

$$\{p_0,\ldots,p_{N-1}\}$$

such that

$$|\{p_0^2,\ldots,p_{N-1}^2\}| = 1$$.

Fast Evaluation

Fast Evaluation

WANT: A collection of $$N = 2$$ points

$$\{p_0,\ldots,p_{N-1}\}$$

such that

$$|\{p_0^2,\ldots,p_{N-1}^2\}| = 1$$.

$$\{+1,-1\}$$

A complex number $$\omega$$ is an $$n^{\text {th }}$$ root of unity if it satisfies $$\omega^n=1$$.

There are exactly $$n$$ complex $$n^{\text {th }}$$ roots of unity, which can be written as

$$e^{\frac{2 \pi i k}{n}}, \quad k=0,1, \ldots, n-1.$$

Observe the useful fact that

$$e^{\frac{2 \pi i k}{n}}=\left(e^{\frac{2 \pi i}{n}}\right)^k,$$

i.e., the roots of unity can all be defined as powers of the $$k=1^{\text {st }}$$ one.

We call the first one a primitive $$n^{\text {th }}$$ root of unity.

More specifically, $$\omega$$ is a primitive $$n^{\text {th }}$$ root of unity if:

\begin{aligned}& \omega^n=1 \\& \omega^j \neq 1 \quad \text { for } 0<j<n\end{aligned}

Discrete Fourier Transform

For $$A$$, a polynomial of degree $$N-1$$ expressed in coeffiecent form:
$$A(x)=a_0+a_1 x+a_2 x_2+\cdots+a_{N-1} x^{N-1},$$

define the DFT (Discrete Fourier Transform) of the coefficient vector $$\left(a_0, \ldots, a_{N-1}\right)$$ to be another vector of $$N$$ numbers as follows:

$$F_N\left(a_0, a_1, \ldots, a_{N-1}\right)=\left(A\left(\omega^0\right), A\left(\omega^1\right), \ldots, A\left(\omega^{N-1}\right)\right),$$

where $$\omega$$ is a $$N^{th}$$ root of unity.

Fast Fourier Transform

$$F_N(A)_j = A\left(\omega^j\right)$$

$$=\sum_{i=0}^{N-1} a_i \omega^{i j}$$

$$=\sum_{i=0}^{\frac{N}{2}-1} a_{2 i} \omega^{2 i j}+\sum_{i=0}^{\frac{N}{2}-1} a_{2 i+1} \omega^{(2 i+1) j}$$

$$=\sum_{i=0}^{N-1} a_i \omega^{i j}+\sum_{i=1}^{N-1} a_i \omega^{i j}$$

i even

i odd

$$= \sum_{i=0}^{\frac{N}{2}-1} a_{2 i}\left(\omega^2\right)^{i j}+\omega^j \sum_{i=0}^{\frac{N}{2}-1} a_{2 i+1}\left(\omega^2\right)^{i j}$$

$$= \sum_{i=0}^{\frac{N}{2}-1} a_{2 i}\left(\omega_{N / 2}\right)^{i(j \bmod N / 2)}+\omega_N^j \sum_{i=0}^{\frac{N}{2}-1} a_{2 i+1}\left(\omega_{N / 2}\right)^{i(j \bmod N / 2)}$$

Fast Fourier Transform

$$F_N(A)_j=F_{N / 2}\left({\color{IndianRed}A_{\text {even }}}\right)_{j \bmod N / 2}+\omega_N^j F_{N / 2}\left({\color{DodgerBlue}A_{\text {odd }}}\right)_{j \bmod N / 2}$$

The Inverse of the DFT

$$\left(\begin{array}{cccc}\omega^{0 \cdot 0} & \omega^{0 \cdot 1} & \cdots & \omega^{0 \cdot(N-1)} \\ \omega^{1 \cdot 0} & \omega^{1 \cdot 1} & \cdots & \omega^{1 \cdot(N-1)} \\ \vdots & \vdots & \ddots & \vdots \\ \omega^{(N-1) \cdot 0} & \omega^{(N-1) \cdot 1} & \cdots & \omega^{(N-1) \cdot(N-1)}\end{array}\right)\left(\begin{array}{c}a_0 \\ a_1 \\ \vdots \\ a_{N-1}\end{array}\right)$$

$$= \left(A\left(\omega^0\right), A\left(\omega^1\right), \ldots, A\left(\omega^{N-1}\right)\right)^T$$

Let's call this matrix DFT $$(\omega, N)$$.

What we need is $$\operatorname{DFT}(\omega, N)^{-1}$$.

The Inverse of the DFT

The $$(k, j)$$ entry of $$\mathbf{D F T}\left(\omega^{-1}, N\right) \mathbf{D F T}(\omega, N)= \begin{cases}N & \text { if } k=j \\ 0 & \text { if } k \neq j\end{cases}$$

$$\boldsymbol{\operatorname { D F T }}(\omega, N)^{-1}=\frac{1}{N} \boldsymbol{\operatorname { D F T }}\left(\omega^{-1}, N\right)$$

Exercise:

$$\mathbf{D F T}\left(\omega^{-1}, N\right) \mathbf{D F T}(\omega, N)= N \cdot I_n$$

Polynomial Multiplication

$$A(x)=a_0 x^0+a_1 x^1+\cdots+a_{n-1} x^{n-1}$$

$$B(x)=b_0 x^0+b_1 x^1+\cdots+b_{m-1} x^{m-1}$$

$$C = A\cdot B$$

$$+ 0x_{n+1} + \cdots + 0x_{n+m-1}$$.

$${\color{IndianRed}A := \{a_0,\ldots,a_{n-1}\}},{\color{DodgerBlue}B := \{b_0, \ldots, b_{m-1}\}}$$

$$+ 0x_{m+1} + \cdots + 0x_{n+m-1}$$.

$${\color{IndianRed}(0,A(0)),\ldots,(n+m-1,A(n+m-1))},\\{\color{DodgerBlue}(0,B(0)),\ldots,(n+m-1,B(n+m-1))}$$

$${\color{SeaGreen}(0,C(0)),\ldots,(n+m-1,C(m+n-1))}$$

$${\color{SeaGreen}c_0,\ldots,c_{m+n-1}}$$

FFT

Inv
FFT

Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Lukas is a Civil Engineer who loves designing road networks to connect $$\boldsymbol{n}$$ cities numbered from 1 to $$\boldsymbol{n}$$.

He can build any number of bidirectional roads as long as the resultant network satisfies these constraints:
1. It must be possible to reach any city from any other city by traveling along the network of roads.
2. No two roads can directly connect the same two cities.
3. A road cannot directly connect a city to itself.

In other words, the roads and cities must form a simple connected labeled graph.

You must answer $$q$$ queries, where each query consists of some $$\boldsymbol{n}$$ denoting the number of cities Lukas wants to design a bidirectional network of roads for. For each query, find the number of ways he can build roads connecting $$n$$ cities.

How many connected graphs are there on $$n$$ vertices?

Let $$f(n)$$ be the answer for $$n$$.

To compute $$f(n)$$, we
subtract the number of disconnected graphs from the total number.

The total number of size- $$n$$ graphs is $$g(n):=2^{\binom{n}{2}}$$.

How to count the disconnected graphs?

Let's consider the size $$m$$ of the connected component
containing the vertex labeled with 1 .

Since the graph is disconnected, $$m$$ cannot be $$n$$.

Then the number of disconnected graphs where the connected component containing vertex 1 has size $$m$$ is exactly:

$$f(m) \cdot g(n-m)$$

$$f(n)={\color{SeaGreen}g(n)}-\sum_{m=1}^{n-1}\binom{n-1}{m-1} \cdot f(m) \cdot g(n-m)$$

If we unfold the binomial coefficients, we will have

Let $$F(n):=\frac{f(n)}{(n-1)!}$$ and $$G(n):=\frac{g(n)}{n!}$$.

If we set $$F(0)$$ to 0, then we have:

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

$$\frac{f(n)}{{\color{IndianRed}(n-1)!}}= {\color{IndianRed}n} \cdot \frac{g(n)}{{\color{IndianRed}n!}}-\sum_{m=1}^{n-1} \frac{f(m)}{{\color{IndianRed}(m-1)!}} \cdot \frac{g(n-m)}{{\color{IndianRed}(n-m)!}}$$

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

$$G(n)$$ are easy to compute so we can pre-process them.

Let solve $$(\ell, r)$$ be a procedure that computes $$F(n)$$ for all $$n \in[l, r)$$.

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

1

9

5

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

1

9

5

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

1

9

5

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

$$H(n) \leftarrow H(n)+\sum_{m=\ell}^{k-1} F(m) \cdot G(n-m)$$

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

$$H(n) \leftarrow H(n)+\underbrace{\sum_{m=\ell}^{k-1} F(m) \cdot G(n-m)}_{\text{convolution}}$$

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

$$C(n)=\sum_{m=\ell}^{k-1} F(m) \cdot G(n-m)$$

Use FFT to compute this in $$O(q \log q)$$ time, where $$q$$ is the number of summands.

$$F(n)=n \cdot G(n)-\sum_{m=0}^{n-1} F(m) \cdot G(n-m)$$

In general, move from solve$$(\ell,r)$$ to

solve$$(\ell,k)$$ & solve$$(k,r)$$,

where $$k := \frac{\ell+r}{2}$$.

Invariant: When invoking solve $$(\ell, r)$$, we have computed for each $$n \in[\ell, r)$$, the partial convolution $$\sum_{m=0}^{\ell-1} F(m) \cdot G(n-m)$$, and store them in $$H(n)$$.

Base Case

If $$\ell+1=r$$, we set $$F(\ell)$$ to $$\ell \cdot G(\ell)-H(\ell)$$.

Part 2. Fast Fourier Transforms

Part 1a. Polynomial Multiplication, DFT, and FFT

Part 1b. Variations of FFT

Part 1c. Examples and Applications

Part 1d. DP Speedup: Counting Road Networks

Part 1e. DP Speedup: Tiles

Tiles

(source)

Tiles

(source)

The road is constructed as follows:
- the first row consists of 1 tile;
- then $$a_1$$ rows follow; each of these rows contains 1 tile greater than the previous row;
- then $$b_1$$ rows follow; each of these rows contains 1 tile less than the previous row;
- then $$a_2$$ rows follow; each of these rows contains 1 tile greater than the previous row;
- then $$b_2$$ rows follow; each of these rows contains 1 tile less than the previous row;
$$\vdots$$
- then $$a_n$$ rows follow; each of these rows contains 1 tile greater than the previous row;
- then $$b_n$$ rows follow; each of these rows contains 1 tile less than the previous row.

Tiles

(source)

Calculate the number of different paths from the first row to the last row.