Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fast Fourier Transform Algorithm

Fast Fourier Transform Algorithm

A Introduction to FFT (Fast Fourier Transform) Algorithm with its application in competitive programming. This talk was given in the 2012 SNUPS (Seoul National University Problem Solving Group) Algorithm seminar.

Jongwook Choi

August 04, 2012
Tweet

More Decks by Jongwook Choi

Other Decks in Programming

Transcript

  1. Fast Fourier Transform
    Jongwook Choi
    2012 SNUPS Seminar
    Seoul National University
    August 4, 2012
    Jongwook Choi Fast Fourier Transform

    View Slide

  2. Fourier Transform ?
    Jongwook Choi Fast Fourier Transform

    View Slide

  3. !?!?!?!?!???
    Jongwook Choi Fast Fourier Transform

    View Slide

  4. !?!?!?!?!???
    F[x(t)] =

    −∞
    x(t)e−jωtdt = 2
    1
    0
    (1 − t) cos(ωt)dt
    = 2
    1
    0
    cos(ωt)dt −
    1
    0
    t cos(ωt)dt
    =
    2
    ω
    sin(ω) −
    1
    0
    t d sin(ωt)
    =
    2
    ω
    sin(ω) − t sin(ωt)
    1
    0

    1
    0
    sin(ωt)dt
    =
    2
    ω2
    cos(ωt)
    0
    1
    =
    2
    ω2
    (1 − cos(ω))
    =
    2
    ω
    2
    sin2
    ω
    2
    =
    sin2 (πf)
    (πf)2
    = · · ·
    Jongwook Choi Fast Fourier Transform

    View Slide

  5. Jean Baptiste Joseph Fourier (1768 – 1830)
    Jongwook Choi Fast Fourier Transform

    View Slide

  6. 다항식 곱
    두 다항식 A(z), B(z) 의 곱 C(z) = A(z)B(z)을 구하고 싶다.
    A(z) = a0 + a1z + a2z2 + · · · + an−1zn−1 =
    n−1
    j=0
    ajzj
    B(z) = b0 + b1z + b2z2 + · · · + bn−1zn−1 =
    n−1
    j=0
    bjzj
    Jongwook Choi Fast Fourier Transform

    View Slide

  7. 다항식 곱
    두 다항식 A(z), B(z) 의 곱 C(z) = A(z)B(z)을 구하고 싶다.
    A(z) = a0 + a1z + a2z2 + · · · + an−1zn−1 =
    n−1
    j=0
    ajzj
    B(z) = b0 + b1z + b2z2 + · · · + bn−1zn−1 =
    n−1
    j=0
    bjzj
    =⇒ C(z) = A(z)B(z) = c0 + c1z + · · · + c2n−2z2n−2,
    where ci = a0bi + a1bi−1 + · · · + aib0
    Jongwook Choi Fast Fourier Transform

    View Slide

  8. 평범한 방법
    O(n2)
    C(z) = A(z)B(z) = c0 + c1z + · · · + c2n−2x2n−2,
    where ci = a0bi + a1bi−1 + · · · + aib0
    Jongwook Choi Fast Fourier Transform

    View Slide

  9. 평범한 방법
    O(n2)
    C(z) = A(z)B(z) = c0 + c1z + · · · + c2n−2x2n−2,
    where ci = a0bi + a1bi−1 + · · · + aib0
    좀 더 빠르게 하고 싶습니다.
    FFT! (Fast Fourier Transform)
    Jongwook Choi Fast Fourier Transform

    View Slide

  10. 신묘한 방법
    Idea. m − 1차 다항식은 m개의 점에서의 함수값이 결정되면
    유일하게 결정된다 (Lagrange’s Interpolation).
    Jongwook Choi Fast Fourier Transform

    View Slide

  11. 신묘한 방법
    Idea. m − 1차 다항식은 m개의 점에서의 함수값이 결정되면
    유일하게 결정된다 (Lagrange’s Interpolation).
    C(z) 의 degree 는 (at most) 2n − 2 이므로,
    서로 다른 2n − 1 개의 점에 대해 C 의 함수값만 알면 되겠다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  12. 신묘한 방법
    Idea. m − 1차 다항식은 m개의 점에서의 함수값이 결정되면
    유일하게 결정된다 (Lagrange’s Interpolation).
    C(z) 의 degree 는 (at most) 2n − 2 이므로,
    서로 다른 2n − 1 개의 점에 대해 C 의 함수값만 알면 되겠다.
    서로 다른 2n − 1 개의 점 z0, z1, · · · , z2n−2
    에 대해,
    A(z0), A(z1), · · · , A(z2n−2) 와
    B(z0), B(z1), · · · , B(z2n−2) 를 안다면,
    C(z0), C(z1), · · · , C(z2n−2) 를 빠르게 계산할 수 있지 않을까?
    Jongwook Choi Fast Fourier Transform

    View Slide

  13. Multiplication by FFT
    서로 다른 2n − 1 개의 점 z0, z1, · · · , z2n−2
    에 대해,
    A(z0), A(z1), · · · , A(z2n−2) 와
    B(z0), B(z1), · · · , B(z2n−2) 를 안다면,
    C(z0), C(z1), · · · , C(z2n−2) 를 빠르게 계산할 수 있지 않을까?
    Jongwook Choi Fast Fourier Transform

    View Slide

  14. Multiplication by FFT
    서로 다른 2n − 1 개의 점 z0, z1, · · · , z2n−2
    에 대해,
    A(z0), A(z1), · · · , A(z2n−2) 와
    B(z0), B(z1), · · · , B(z2n−2) 를 안다면,
    C(z0), C(z1), · · · , C(z2n−2) 를 빠르게 계산할 수 있지 않을까?
    C(zk) = A(zk) · B(zk) k = 0, 1, · · · , 2n − 2
    Jongwook Choi Fast Fourier Transform

    View Slide

  15. Discrete Fourier Transform
    다항식 A(x) = a0 + a1x + · · · + an−1xn−1 을 생각하자.
    ω ∈ C 을 primitive root of unity (ωn = 1 라는 말) 라고 할 때,
    n개의 점 ω0, ω1, ω2, · · · , ωn−1 에서의 함수값
    A(ωi) =
    n−1
    j=0
    aj(ωi)j
    들을 모으면 n 개의 수가 얻어진다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  16. Discrete Fourier Transform
    다항식 A(x) = a0 + a1x + · · · + an−1xn−1 을 생각하자.
    ω ∈ C 을 primitive root of unity (ωn = 1 라는 말) 라고 할 때,
    n개의 점 ω0, ω1, ω2, · · · , ωn−1 에서의 함수값
    A(ωi) =
    n−1
    j=0
    aj(ωi)j
    들을 모으면 n 개의 수가 얻어진다. 이 때 transform Cn → Cn
    (a0, a1, · · · , an−1) → (A(a0), A(a1), · · · , A(an−1))
    를 DFT (이산 푸리에 변환) 이라고 한다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  17. ω : primitive n-th root of unity
    ωn = 1
    Jongwook Choi Fast Fourier Transform

    View Slide

  18. ω : primitive n-th root of unity
    ωn = 1
    ω = e2πi
    n
    = cos(2π/n) + i sin(2π/n)
    Jongwook Choi Fast Fourier Transform

    View Slide

  19. ω : primitive n-th root of unity
    ωn = 1
    ω = e2πi
    n
    = cos(2π/n) + i sin(2π/n)
    Jongwook Choi Fast Fourier Transform

    View Slide

  20. Multiplication by DFT
    (a0, a1, · · · , an−1) →


    n−1
    j=0
    aj(ω0)j, · · · ,
    n−1
    j=0
    aj(ωn−1)j


    (a0, · · · , an−1
    을 계수로하는 다항식에 ω0, · · · , ωn−1을 넣음)
    Jongwook Choi Fast Fourier Transform

    View Slide

  21. Multiplication by DFT
    (a0, a1, · · · , an−1) →


    n−1
    j=0
    aj(ω0)j, · · · ,
    n−1
    j=0
    aj(ωn−1)j


    (a0, · · · , an−1
    을 계수로하는 다항식에 ω0, · · · , ωn−1을 넣음)
    그러면, C(z) = A(z)B(z)일 때,
    A(ωj) · B(ωj) = C(ωj)
    인가?
    Jongwook Choi Fast Fourier Transform

    View Slide

  22. Multiplication by DFT
    (a0, a1, · · · , an−1) →


    n−1
    j=0
    aj(ω0)j, · · · ,
    n−1
    j=0
    aj(ωn−1)j


    (a0, · · · , an−1
    을 계수로하는 다항식에 ω0, · · · , ωn−1을 넣음)
    그러면, C(z) = A(z)B(z)일 때,
    A(ωj) · B(ωj) = C(ωj)
    인가?
    · · · · · · · · · 너무 당연하다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  23. 그래서 우리의 관심은
    DFT 구하는 것, 즉 ω0, · · · , ωn−1 에서의 함수값
    A(ω0), · · · , A(ωn−1) 을 모두 알아낼 수 있으면 OK.
    얼마나 빨리?
    Jongwook Choi Fast Fourier Transform

    View Slide

  24. 그래서 우리의 관심은
    DFT 구하는 것, 즉 ω0, · · · , ωn−1 에서의 함수값
    A(ω0), · · · , A(ωn−1) 을 모두 알아낼 수 있으면 OK.
    얼마나 빨리? O(n log n)
    naive 하게 계산하면 O(n2) 인데 그러면 하나마나.
    Jongwook Choi Fast Fourier Transform

    View Slide

  25. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = a0 + a1x + a2x2 + · · · + an−1xn−1
    Jongwook Choi Fast Fourier Transform

    View Slide

  26. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = a0 + a1x + a2x2 + · · · + an−1xn−1
    = (a0 + a2x2 + a4x4 + · · · ) + (a1x + a3x3 + a5x5 + · · · )
    = (a0 + a2x2 + a4x4 + · · · ) + x(a1 + a3x2 + a5x4 + · · · )
    Jongwook Choi Fast Fourier Transform

    View Slide

  27. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = a0 + a1x + a2x2 + · · · + an−1xn−1
    = (a0 + a2x2 + a4x4 + · · · ) + (a1x + a3x3 + a5x5 + · · · )
    = (a0 + a2x2 + a4x4 + · · · ) + x(a1 + a3x2 + a5x4 + · · · )
    = Aeven(x2) + xAodd(x2)
    n이 짝수면..
    Aeven(x) = a0 + a2x + a4x2 + · · · + an−2xn/2−1
    Aodd(x) = a1 + a3x + a5x2 + · · · + an−1xn/2−1
    Jongwook Choi Fast Fourier Transform

    View Slide

  28. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = Aeven(x2) + xAodd(x2)
    Jongwook Choi Fast Fourier Transform

    View Slide

  29. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = Aeven(x2) + xAodd(x2)
    1 n/2개의 점 (ω0, ω2, · · · , ωn−2) 에서 두 다항식 Aeven, Aodd
    에서의 함수값을 각각 구한다 (즉, DFT 한다).
    원래와 동일한 모양의 문제: ω를 ω2로 두고 재귀ㄱㄱㄱ1
    Aeven
    (ω0), Aeven
    (ω2), · · · , Aeven
    (ωn−2)
    Aodd
    (ω0), Aodd
    (ω2), · · · , Aodd
    (ωn−2)
    1n/2 차 다항식에 대하여 (ω2)n/2 = 1 이므로 ω2가 primitive root of unity.
    Jongwook Choi Fast Fourier Transform

    View Slide

  30. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = Aeven(x2) + xAodd(x2)
    1 n/2개의 점 (ω0, ω2, · · · , ωn−2) 에서 두 다항식 Aeven, Aodd
    에서의 함수값을 각각 구한다 (즉, DFT 한다).
    2 그러면 O(n) time 에 n개의 함수값 A(ωj)를 모조리 구할 수
    있다.1
    A(ωj) = Aeven(ω2j) + ωj · Aodd(ω2j)
    A(ωj+n/2) = Aeven(ω2j+n) + ωjωn/2 · Aodd(ω2j+n)
    = Aeven(ω2j) − ωj · Aodd(ω2j)
    for 0 ≤ j < n/2.
    1Note that ωn = 1, ωn/2 = −1.
    Jongwook Choi Fast Fourier Transform

    View Slide

  31. Divide-And-Conquer
    다항식 A(x)가 있을 때, A(ω0), · · · , A(ωn−1)을 구하고 싶다.
    A(x) = Aeven(x2) + xAodd(x2)
    1 n/2개의 점 (ω0, ω2, · · · , ωn−2) 에서 두 다항식 Aeven, Aodd
    에서의 함수값을 각각 구한다 (즉, DFT 한다).
    2 그러면 O(n) time 에 n개의 함수값 A(ωj)를 모조리 구할 수
    있다.
    T(n) = 2T(n/2) + O(n) =⇒ T(n) = O(n log n)
    Jongwook Choi Fast Fourier Transform

    View Slide

  32. 역변환
    거꾸로, DFT의 결과를 알고 있을 때 원래 다항식을 구하는
    방법은? 즉, 최대 2n차 다항식 C에 대해
    C(ω0), C(ω1), · · · , C(ω2n−1)
    를 알고 있을 때 (ω2n = 1) C의 계수 c0, c1, · · · , c2n−1
    를 구하려면
    어떻게 하는가?
    Jongwook Choi Fast Fourier Transform

    View Slide

  33. DFT 역변환
    n − 1차 다항식 A(x) 에 대해 wn = 1이고, yk = A(wk) 를 모두
    알고 있다고 하자. (k = 0, 1, 2, · · · , n − 1)
    yk = A(wk) =
    n−1
    j=0
    aj(wk)j
    Jongwook Choi Fast Fourier Transform

    View Slide

  34. DFT 역변환
    n − 1차 다항식 A(x) 에 대해 wn = 1이고, yk = A(wk) 를 모두
    알고 있다고 하자. (k = 0, 1, 2, · · · , n − 1)
    yk = A(wk) =
    n−1
    j=0
    aj(wk)j







    y0
    y1
    y2
    .
    .
    .
    yn−1







    =







    1 1 1 · · · 1
    1 ω ω2 · · · ωn−1
    1 ω2 ω4 · · · ω2(n−1)
    .
    .
    .
    .
    .
    .
    .
    .
    .
    ...
    .
    .
    .
    1 ωn−1 ω2(n−1) · · · ω(n−1)(n−1)














    a0
    a1
    a2
    .
    .
    .
    an−1







    Jongwook Choi Fast Fourier Transform

    View Slide

  35. DFT 역변환
    역행렬을 구해서 풀면..







    y0
    y1
    y2
    .
    .
    .
    yn−1







    =







    1 1 1 · · · 1
    1 ω ω2 · · · ωn−1
    1 ω2 ω4 · · · ω2(n−1)
    .
    .
    .
    .
    .
    .
    .
    .
    .
    ...
    .
    .
    .
    1 ωn−1 ω2(n−1) · · · ω(n−1)(n−1)














    a0
    a1
    a2
    .
    .
    .
    an−1














    a0
    a1
    a2
    .
    .
    .
    an−1







    =
    1
    n







    1 1 1 · · · 1
    1 ω−1 ω−2 · · · ω−(n−1)
    1 ω−2 ω−4 · · · ω−2(n−1)
    .
    .
    .
    .
    .
    .
    .
    .
    .
    ...
    .
    .
    .
    1 ω−(n−1) ω−2(n−1) · · · ω−(n−1)(n−1)














    y0
    y1
    y2
    .
    .
    .
    yn−1







    View Slide

  36. DFT 역변환
    역행렬을 구해서 풀면..







    y0
    y1
    y2
    .
    .
    .
    yn−1







    =







    1 1 1 · · · 1
    1 ω ω2 · · · ωn−1
    1 ω2 ω4 · · · ω2(n−1)
    .
    .
    .
    .
    .
    .
    .
    .
    .
    ...
    .
    .
    .
    1 ωn−1 ω2(n−1) · · · ω(n−1)(n−1)














    a0
    a1
    a2
    .
    .
    .
    an−1














    a0
    a1
    a2
    .
    .
    .
    an−1







    =
    1
    n







    1 1 1 · · · 1
    1 ω−1 ω−2 · · · ω−(n−1)
    1 ω−2 ω−4 · · · ω−2(n−1)
    .
    .
    .
    .
    .
    .
    .
    .
    .
    ...
    .
    .
    .
    1 ω−(n−1) ω−2(n−1) · · · ω−(n−1)(n−1)














    y0
    y1
    y2
    .
    .
    .
    yn−1







    Jongwook Choi Fast Fourier Transform

    View Slide

  37. DFT 역변환
    즉, (y0, y1, · · · , yn−1) 를 DFT 하는데
    Jongwook Choi Fast Fourier Transform

    View Slide

  38. DFT 역변환
    즉, (y0, y1, · · · , yn−1) 를 DFT 하는데
    ω를 ω−1 로 replace 하고
    최종 결과를 n 으로 나누면
    Jongwook Choi Fast Fourier Transform

    View Slide

  39. DFT 역변환
    즉, (y0, y1, · · · , yn−1) 를 DFT 하는데
    ω를 ω−1 로 replace 하고
    최종 결과를 n 으로 나누면
    (a0, a1, a2, · · · , an−1) 이 얻어진다.
    즉 FFT 함수가 있으면 역변환 하는것도 바로 된다. O(n log n)
    Jongwook Choi Fast Fourier Transform

    View Slide

  40. FFT로 O(n log n) 곱셈하는 알고리즘 정리
    A(z) = a0 +a1z+· · ·+an−1zn−1, B(z) = b0 +b1z+· · ·+bn−1zn−1
    (image from Introduction to Algorithms; Corment et al.)
    Jongwook Choi Fast Fourier Transform

    View Slide

  41. FFT로 O(n log n) 곱셈하는 알고리즘 정리
    (Cooley–Tukey FFT algorithm)
    A(z) = a0 +a1z+· · ·+an−1zn−1, B(z) = b0 +b1z+· · ·+bn−1zn−1
    1 A, B를 2n − 1차 다항식으로 생각해서,
    (a0, a1, · · · , a2n−1)의 DFT (p0, p1, · · · , p2n−1)을 구하고
    (b0, b1, · · · , b2n−1)의 DFT (q0, q1, · · · , q2n−1)을 구한다.
    FFT 두번 하므로 O(n log n) 걸린다.
    2 구한 두 DFT 벡터의 pointwise 곱 (p0q0, · · · , p2n−1q2n−1)을
    구한다. O(n)
    3 이 녀석을 다시 DFT 하면, (2n · c0, 2n · c1, · · · , 2n · c2n−1) 이
    얻어진다. O(n log n)
    4 c0, c1, · · · , c2n−1
    이 C(z) = A(z)B(z)의 계수이다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  42. Remark
    DFT 를 구할 때, FFT 계산 시 n을 2의 power라고 가정하고
    있음.
    실수 연산을 해야하기 때문에 실수 오차가 발생할 수 있다.
    (input 다항식의 계수가 정수라고 가정하면) 최종적으로
    얻어진 cj
    계수들이 정수가 아닐 수도 있는데, 가장 가까운
    integer로 반올림하면 된다. (오차 0.5 미만이면 OK)
    실수 연산 없이, finite field Zp (n | p − 1) 에서 ω의 역할을
    하는 primitive root of unity 를 쓰면 정수 연산만으로도 되는데
    (Number Theoretic Transform), 뭔가 엄청 복잡하고 실제로도
    나눗셈 연산때문에 더 느림. (CRLS Problem 30-6 참고)
    FFT는 팀노트에 넣어가면 좋다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  43. 예제 문제.
    두 n-length array A = (a0, · · · , an−1), B = (b0, · · · , bn−1) 가
    있다. 이 때 A와 B의 convolution C = A ∗ B = (c0, · · · , cn−1)
    cj =
    j
    k=0
    akbj−k
    를 구하시오. 단, n은 무지무지 큼.
    Jongwook Choi Fast Fourier Transform

    View Slide

  44. 예제 문제.
    두 n-length array A = (a0, · · · , an−1), B = (b0, · · · , bn−1) 가
    있다. 이 때 A와 B의 convolution C = A ∗ B = (c0, · · · , cn−1)
    cj =
    j
    k=0
    akbj−k
    를 구하시오. 단, n은 무지무지 큼.
    앞에서 배운 Fast Polynomial Multiplication 과 거의 똑같이 하면
    된다(!). Exercise.
    Jongwook Choi Fast Fourier Transform

    View Slide

  45. 예제 문제 (SRM 518 Div1 Hard)
    두 n-length array A = (a0, · · · , an−1), B = (b0, · · · , bn−1) 가
    있다. 이 때 A와 B의 xor-convolution C = A ⊕ B = (c0, · · · , cn−1)
    ck =
    i xor j=k
    aibj
    를 구하시오. 단, n은 무지무지 큼.
    Jongwook Choi Fast Fourier Transform

    View Slide

  46. 예제 문제 (SRM 518 Div1 Hard)
    O(n log n) 에 도전. FFT의 아이디어를 이용해서 풉니다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  47. 예제 문제 (SRM 518 Div1 Hard)
    O(n log n) 에 도전. FFT의 아이디어를 이용해서 풉니다.
    어떤 DFT F : Zn → Zn 를 찾자.
    F(A), F(B) 를 구한다.
    F(A), F(B) 를 pointwise 로 곱해서 F(A ⊕ B) 를 구한다.
    F(A ⊕ B) 에 F의 역변환을 끼얹어서 A ⊕ B 를 구한다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  48. 예제 문제 (SRM 518 Div1 Hard)
    O(n log n) 에 도전. FFT의 아이디어를 이용해서 풉니다.
    어떤 DFT F : Zn → Zn 를 찾자.
    F(A), F(B) 를 구한다.
    F(A), F(B) 를 pointwise 로 곱해서 F(A ⊕ B) 를 구한다.
    F(A ⊕ B) 에 F의 역변환을 끼얹어서 A ⊕ B 를 구한다.
    그런 F 를 어떻게 찾지?
    Jongwook Choi Fast Fourier Transform

    View Slide

  49. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  50. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    Jongwook Choi Fast Fourier Transform

    View Slide

  51. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    Jongwook Choi Fast Fourier Transform

    View Slide

  52. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    F(a, b) · F(c, d) = (a − b, a + b) · (c − d, c + d)
    Jongwook Choi Fast Fourier Transform

    View Slide

  53. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    F(a, b) · F(c, d) = (a − b, a + b) · (c − d, c + d)
    = ((a − b)(c − d), (a + b)(c + d))
    Jongwook Choi Fast Fourier Transform

    View Slide

  54. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    F(a, b) · F(c, d) = (a − b, a + b) · (c − d, c + d)
    = ((a − b)(c − d), (a + b)(c + d))
    = (ac − ad − bc + bd, ac + ad + bc + bd)
    Jongwook Choi Fast Fourier Transform

    View Slide

  55. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    F(a, b) · F(c, d) = (a − b, a + b) · (c − d, c + d)
    = ((a − b)(c − d), (a + b)(c + d))
    = (ac − ad − bc + bd, ac + ad + bc + bd)
    = ((ac + bd) − (ad + bc), (ac + bd) + (ad + bc))
    Jongwook Choi Fast Fourier Transform

    View Slide

  56. 통밥의 정석
    n = 2일 때를 가정해 보자.
    A = (a, b), B = (c, d) 라고 하면 A ⊕ B = (ac + bd, ad + bc) 이다.
    F(a, b) · F(c, d) = F(ac + bd, ad + bc) 가 되어야 한다.
    F(a, b) = (a − b, a + b) 라고 가정해보자(???).
    F(a, b) · F(c, d) = (a − b, a + b) · (c − d, c + d)
    = ((a − b)(c − d), (a + b)(c + d))
    = (ac − ad − bc + bd, ac + ad + bc + bd)
    = ((ac + bd) − (ad + bc), (ac + bd) + (ad + bc))
    = F(ac + bd, ad + bc)
    Olleh!
    Jongwook Choi Fast Fourier Transform

    View Slide

  57. 통밥의 정석
    n = 4일 때에는? 좀 복잡한 듯.
    Jongwook Choi Fast Fourier Transform

    View Slide

  58. 통밥의 정석
    n = 4일 때에는? 좀 복잡한 듯.
    n = 2일 때 F(a, b) = (a − b, a + b) 였으니까,
    Jongwook Choi Fast Fourier Transform

    View Slide

  59. 통밥의 정석
    n = 4일 때에는? 좀 복잡한 듯.
    n = 2일 때 F(a, b) = (a − b, a + b) 였으니까, 느낌상
    F(X Y ) = (F(X) − F(Y ) F(X) + F(Y ))
    일 것 같다. (???) 세상은 원래 이렇게 아름다운 거에요
    Jongwook Choi Fast Fourier Transform

    View Slide

  60. 통밥의 정석
    n = 4일 때에는? 좀 복잡한 듯.
    n = 2일 때 F(a, b) = (a − b, a + b) 였으니까, 느낌상
    F(X Y ) = (F(X) − F(Y ) F(X) + F(Y ))
    일 것 같다. (???) 세상은 원래 이렇게 아름다운 거에요
    사실 저 추측만 하면, 증명은 간단한 수학적 귀납법으로 어렵지
    않다 (자세한 것은 editorial 참고).
    Jongwook Choi Fast Fourier Transform

    View Slide

  61. 역변환
    F(X Y ) 가 주어질 때, X Y 를 찾을 수 있는가? 즉, X, Y 를
    찾을 수 있는가?
    F(X Y ) = (F(X) − F(Y ) F(X) + F(Y )) 를 알고
    있으므로, F(X) 와 F(Y ) 를 알 수 있다.
    길이가 반으로 줄었으므로 재귀적으로 풀어서 X, Y 를 얻는다.
    X, Y 를 concatenate 시키면 끝.
    Jongwook Choi Fast Fourier Transform

    View Slide

  62. FFT: 기타 응용
    Fast Integer/Polynomial Multiplication
    Pattern Matching (Text Algorithms)
    Signal Processing
    Image Processing
    · · ·
    Jongwook Choi Fast Fourier Transform

    View Slide

  63. The End
    Thank You Very Much
    Any Questions?
    Jongwook Choi Fast Fourier Transform

    View Slide