다항식 및 고속 푸리에 변환 (FFT)

참고 : 개인 기호를 사용합니다 다음은 $ $ \ SQRT {-1} $ $ I를 나타냅니다

다항식

 의 변수 $ X를 $에서 다항식 형태 대수 필드 $ F $, 함수 $의 A (X) 이상 $ 정의 표현 :

$$ A (X) = \ sum_ J = {0} ^ {N-1} A_ {J} ^ {X} J $$

 우리는 경우, $ A_ {0}, A_ {1}, \ cdots, A_ {N-1} 다항식 위의 $ 계수, 모든 계수가 도메인 $ F. $에 속한다는 일반적인 시나리오는 $ C $의 복잡한 모음입니다 전화 다항식 $ A (x)는 가장 높은 수준의 $ 제로 계수 $도 (a) K = $으로 나타내고, A는, 전화 번호는 (X)가 $ $ K $이고 $ $ $이다. 다항식의 정도보다 확실히 큰 모든 정수는 경계의 수에 따라서 경계 다항식의 수 $ N- $ 다항식, 수는 $ 0 $ ~ $ N-1 $ 사이의 모든 정수가 될 수있는, $ 0 $와 등이다 N-1 $을 $. 다항식의 곱셈 들어,

$ A (x)가 $과 $ B (x)는 $ 두 주파수 경계는 $ N- $ 다항식 그들의 제품 $ C (x)는 $ $ 2N-1 $ 다항식의 원의 수는 모든 속하는된다되어있다 $ X $의 도메인 $ C (X) = A (x)의 B (x)는 $을 갖는다. 하나는 $ C (x는) $ 방법은 제품을 나타냅니다 :

$$ C (X) = \ sum_ J = {0} ^ {N-2} 2 C_ {J} ^ {X} J $$

그 중,

$$ C_ {} J = \ sum_ K = {0} ^ {J} A_ {K} B_ {} JK $$

참고 ,, $도 (C) =도 (A) +도 (B) 다음, $, $ A $가 $ N_A $ 다항식 원의 개수 인 경우에는 $ B $가 $ n_b $ 다항식 원의 개수임을 의미 $ C $는 $ N_A n_b + 1 $ 다항식 등의 원의 수이다. $ K $ 동그라미의 개수가 원으로 $ K + 1 $ 다항식의 다항식 번호이기 때문에, 일반적으로 다항식 $ C $가 $ N_A + n_b $ 다항식 원의 개수의 제품이라고한다.

다른 방법의 다항식 표현

계수 나타냅니다

그것은 N- $ $ 다항식 $ A (X) = \ sum_ {J = 0} ^ {N-1} A_ {J} X ^ {J} $, 그 계수가 이루어지는 계수로 표현되는 다수의 결합된다 벡터 A = $ \ 좌회전 (A_ {0} {1} A_ \ cdots, A_ {N-1} \ 오른쪽) $.

일부 조작 계수 호너 규칙을 사용하여, 상기 평가 동작 $ $ X $ 주어진 시점 다항식 $의 A (X)로서 편리 나타내고, 우리는 $ \ $ 시간 복잡도 쎄타 (N)를 완료 평가 작업 :

$$ \ 좌회전 (X_ {0} \ 오른쪽) = A_ {0} + X_ {0} \ 좌회전 (A_ {1} + X_ {0} \ 좌회전 (A_ {2} + \ cdots + X_ {0} \ 좌회전 (A_ {N-2} + X_ {0} \ 좌회전 (A_ {N-1} \ 오른쪽) \ 오른쪽) \ cdots \ 오른쪽) \ 오른쪽) $$

마찬가지로, 계수를 가진 두 개의 벡터를 각각 왼쪽 $ \ (A_ {0} {1} A_ \ cdots, A_ {N-1} \ 오른쪽) $ 및 B = $ \ 좌회전 (B_ {0} B_ 시 {1} \ cdots, B_ {N-1} \ 오른쪽) $ $의 벡터 $ C를주고, 승산 할 \ 세타 \ 좌측 (N ^ {2} \ 오른쪽) $ 다음 = \ 좌회전 (C_ {0 } C_ {1} \ cdots는 C_ {N-1} \ 오른쪽) $, $ 달러 c는 US $라는 $ $ $ $ B C = A \ otimes $로 표시하고 컨볼 루션, B.

도트 값을 나타냅니다

$ N 개의 섹터 다항식 $ $ A (X)가 설정 점 값은 $ N- $ $으로 포인트 값으로 이루어지는 쌍으로 표현된다

$$
\ 좌측 \ {\ (X_ {0} Y_ {0} \ 오른쪽) 왼쪽 \ 좌측 (X_ {1} Y_ {1} \ 오른쪽) \ cdots \ 좌회전 (X_ {N-1} , Y_ {N-1} \ 오른쪽) \ 오른쪽 \}
$$

이러한 $ K = 0,1, \ cdots는, N-1은 $, $ S_k 서로 모두 다른 달러 것을

$$
Y_ {K} = A \는 (X_ {K} \ 오른쪽) 왼쪽
$$

평가의 역 연산이라는 보간 (소수점 값은 형태의 다항식의 계수로부터 결정된다).

 (보간 다항식 고유성) $ \ 이루어진 모든 N 포인트 값 쌍에 대한 좌측 \ {\ (X_ {0} Y_ {0} \ 오른쪽) 왼쪽 \ 좌측 (X_ {1} Y_ {1} \ 오른쪽) \ cdots \ 오른쪽. \ 떠났다. \ 좌측은 (X_는 {N-1} Y_는 {N-1} \)의 오른쪽은 \} $ 모두 $ X $ 후 유일한 번호는 다른 존재된다 \ 오른쪽 항 경계는 N-1 $, K = 0.1 \ cdots 다항식 $ N- $ $ A (x)가 $, 만족 $ y_k = A \ 좌회전 (X_ {K} \ 오른쪽)이다.

주요 따른 행렬의 역행렬의 존재를 증명한다. 원래 화학식 행렬 방정식에 상당 :

$$
\ 좌측 [시작 \ {어레이 CCCCC} {}
{1} {X_ {0} 및 {} X_ {0} ^ {2} {} \ cdots} {X_ {0} ^ {m}} \\
{1} {1} {X_} {X_ {1} ^ {2} {} \ cdots} {X_ {1} ^ {N-1}} \\
{\ vdots} {\ vdots} {\ vdots} {\ ddots} {\ vdots \\}
{1} {X_ {N-1}} {X_ {N-1} ^ {2} {} \ cdots} {X_는 {N-1} ^ {N-1}}
\ 단부 {어레이} \ 오른쪽] \ 좌측 [{C}를 {배열} 시작 \
{A_ {0}} \\
{A_ {1}} \\
{ \ vdots \\}
{A_ {N-1}}
\ {말단 배열} \ 오른쪽 = \ 시작 \ [좌측 어레이 {} {C}
{0} {Y_ \\}
{1} {Y_} \\
{ \ vdots \\}
{Y_ {N-1}}
\ {말단 배열} \ 오른쪽]
$$

좌측 행렬 V $ \ 좌회전 (X_ {0} {1} X_ \ cdots, X_ {N-1} \ 오른쪽) 인 Vandermonde 행렬이라고 $,이 행렬의 행렬식은 다음과 같이 표현된다

$$
\ prod_ {0 \ 당량 J <K \ 당량 N-1} \ 좌회전 (X_ {K} -x_ {J} \ 오른쪽)
$$

따라서, 고정 소수점의 값을 표현하기 위해, 우리는 고유 계수를 결정할 수 있습니다

$$
A = V \ 좌회전 (X_ {0} {1} X_ \ cdots, X_ {N-1} \ 오른쪽) ^ {- 1}, Y
$$

더 빠른 $ N $ 포인트에 기초하여 보간 알고리즘은 라그랑주 방정식에 기초

$$
A (X) = \ sum_ K = {0} ^ {N-1} Y_ {K} \ {FRAC \ {prod_ I \ NEQ K} \ 좌측 (X-J X_ {} \ 오른쪽)} {\ prod_ {J \ NEQ K} \ 좌회전 (X_ {K} -x_ {J} \ 오른쪽)}
$$

$ A $로 표시되는 지정된 값으로 확장 점

$$
\ 좌측 \ {\ (X_ {0} {0} Y_ \ 오른쪽) 왼쪽 \ 좌측 (X_ {1} {1} Y_ \ 오른쪽) \ cdots \ 좌회전 (X_ {2, N-1 } Y_ {2, N-1} \ 오른쪽) \ 오른쪽 \}
$$

$ B $ 및 포인트 값 대응 확장 식

$$
\ 좌측 \ {\ 좌회전 (X_ {0} {0} Y_ ^ {\ \} 프라임 오른쪽) \ 좌회전 (X_ {1} {1} Y_ ^ {\ 프라임} \ 오른쪽) \ cdots \ 좌회전 (X_ {2, N-1}, {2 Y_ N-1} ^ {\ 프라임} \ 오른쪽) \ 오른쪽 \}
$$

포인트 값 표현 $ C $으로

$$
\ 좌측 \ {\ 좌회전 (X_ {0} {0} Y_ Y_ {0} ^ {\ \} 프라임 오른쪽) \ 좌회전 (X_ {1} {1} Y_ Y_ {1} ^ {\ 프라임} \ 오른쪽) \ cdots는 \ (X_ {2-N 1}, {2 Y_ N-1} {2 Y_ 남아 N-1} ^ {\ 프라임} \ 오른쪽) \ 오른쪽 \}
$$

DFT 与 FFT

루트의 복수의 유닛은 상기 보간 연산은 (n \ LG N) $ \ 세타 평가 될 경우 $ 완료.

단위 복소수

K = 0.1 $ \ cdots위한 제 복잡한 루트 정확히 $ $ N 개의 - $ \ 오메가 ^ {N} = 1 $ 복잡한 $ \ 오메가 $, $ N $ 만족 $ $ N 배 단위 복소수 n은 1 $,이 뿌리 $ E ^ {2 \ 파이 IK / N} $이다. 이 표현을 설명하기 위해, 우리는 복잡한 지수 양식 정의를 사용합니다 :

및 $$ ^ {I} = \ COS (U) + I \ 죄 (U) $$

$ $ N 번째 루트 복합 장치는 균일 단위 반경의 중심으로하여 복소 평면의 원점을 원주에 걸쳐 분포. $ \ 오메가 _n = E ^ {2 \ PI I / N}의 값 $ 루트의 모든 다른 유닛들의 기본 n 번째 루트 $라는 $ $, $ N 배는 omega_n $ 부정적인 $ \ 전력이다.

그룹 승산 의미 단위 제외 루트 형성 첨가제 그룹과 동일한 구조를 갖는 기 때문에

$$ \ 오메가 _ {N} ^ {J} \ 오메가 _ {N} ^ {K} = \ 오메가 _ {N} ^ {J + K} = \ 오메가 _ {N} ^ {\ 좌측 (j + K \ 오른쪽) \ 개조 N} $$

类似 공원, $ \ omega _ {n} ^ {- 1} = \ omega _ {n} ^ {n-1} $

우리는 몇 가지 기본적인 특성 $ N $ 단위 루트 뷰를 제공한다 :

삭제 성질 : $ \ 오메가 _ {DN} ^ {} = DK \ 오메가 _ {N} ^ {K} $

1 $ - 모든 짝수 $ N> 0 $ 거기 $ \ 오메가 _ {N} ^ {N / 2} = \ 오메가 _ {2} = 들어

진 자연 : $ N> 0 $는 짝수, 다음 세트 사각 $ N $ N $ 번째 루트 복잡한 서브 유닛 인 복수 세트의 $ $ N / 2 단위 $ 루트 $는 N / 2 시간이면

자연 합산 : 임의의 정수 $ n \ GEQ 1 $ 및 $ N-수 나눌 $ $ K $ 정수 음수 일 수 거기 $ \ 합 _ ^ {N-1} \ 좌측 {0 = J} (\ 오메가 _ {N} ^ {K} \ 오른쪽) ^ {J} = 0 $

DFT

우리는 경계의 수를 계산 할 수 있습니다 $ N- $ 다항식 $ \ 오메가 _ {N} ^ {0}, \ 오메가 _ {N} ^ {1}, \ 오메가 _ {N} ^ {2}, \ cdots, \ _ {N} ^ {N-1}에서 오메가 $ 값

, $ A = \ 좌회전 (A_ {0} A_ {1} \ cdots, A_ {N-1} \ 오른쪽) $ 다음, $ K = 0.1 : $ A $ 계수 형태로 부여한다고 가정 \ cdots, N-1 $ 정의 결과 $ y_k $ :

$$ Y_ {K} = A \ 왼쪽 (\ 오메가 _ {N} ^ {K} \ 오른쪽) = \ 합 _ {J = 0} ^ {N-1} A_ {J} \ 오메가 _ {N} ^ {KJ} $$

벡터 $ Y는 = \ 좌회전 (Y_ { 0} Y_ {1} \ cdots가 Y_ {N-1} \ 오른쪽) $이 계수 벡터는이 = \ 좌회전 (A_ {$ 0} A_ {1} \ cdots, A_ {N-1} \ 오른쪽) $ 이산 푸리에 변환 (DFT에)는 , Y = DFT_ $ {N} \이라 좌측 (a \ 오른쪽) $

FFT

하여 루트의 특별한 성질의 복수의 유닛을 사용하는 경우에 고속 푸리에 변환하는 변환 방법을 그 \ 세타 \ 좌회전 (n \ $ 수있다 LG n \ 오른쪽) $ $ DFT_ 계산 시간 {N} \ 좌측 (a \ 오른쪽 ) $.

(이하, N 함량은 $ 2의 정수 전력 $ $ $를 가정한다)

$ $ 짝수 $ A (X)와, 계수 대상 홀수 첨자 $ 계수를 사용하여, FFT 분할 컨커 전략을 사용하여, 각각 $ \ FRAC {N} {2} $ $ A 다항식의 수 개의 새로운 경계를 정의 ^ {\ 왼쪽 [0 \ 오른쪽]} \ 좌측 (X \ 오른쪽)과 $ $ A ^ {\ 좌측 [1 \ 오른쪽]} \ 좌측 (X \ 오른쪽) $

$$ ^ {\ 왼쪽 [0 \ 오른쪽]} \ 좌측 (X \ 오른쪽) = A_ {0} + A_ {2} X + A_ {4} X ^ {2} + \ cdots A_ {N-2} X ^ {N / 2-1} $$

$$ ^ {\ 좌측 [1 \ 오른쪽]} \ 좌측 (X \ 오른쪽) = A_ {1} + A_ {3} X + A_ {5} X ^ {2} + \ cdots A_ {N-1} X ^ {N / 2-1} $$

참고, $ A ^는 {\ 왼쪽 [0 \ 권리]} \ 왼쪽은 (X \ 오른쪽) $ 주제 $ A $ 및 $ A ^ 모든 짝수 번째 계수가 포함 {\ 좌측 [1 \ 오른쪽]} \ 좌회전 ( X \ 오른쪽) $는 계수 $ A $의 모든 홀수 첨자가 포함되어 있습니다. 그래서,이

$$ \ 좌측 (X \ 오른쪽) = A ^ {\ 왼쪽 [0 \ 오른쪽]} \ 좌측 (X ^ {2} \ 오른쪽) + xA를 ^ {\ 좌측 [1 \ 오른쪽]} \ 좌측 (X ^ {2} \ 오른쪽) $$

따라서, $하게 추구 \ 좌측 (X \ 오른쪽) $ $ \ 오메가에서 _ {N} ^ {0} \ 오메가 _ {N} ^ {1} \ 오메가 _ {N} ^ {2} \ cdots \ 오메가 _ {N} ^ {N-1}에서 문제 $ 값으로 변환된다 :

$ \ FRAC {N}로서 원의 수를 찾는 {2} $ 다항식 $ A를 ^ {\ 왼쪽 [0 \ 오른쪽]} \ 좌측 (X \ 오른쪽) $ 및 $ A ^ {\ 좌측 [1 \ 오른쪽]} \ 지점에서 왼쪽 (X \ 오른쪽) $

$$ \ 좌측 (\ 오메가 _ {N} ^ {0} \ 오른쪽) ^ {2} \ (\ 오메가 _ {N} ^ {1} \ 오른쪽) 왼쪽 ^ {2} \ cdots \ 좌회전 ( \ 오메가 _ {N} ^ {N-1} \ 오른쪽) ^ {2} $$

값.

따라서 원래의 문제는 두 개의 서브 - 문제의 절반 원래 크기로 변환된다.

보간 장치 복잡한 루트

 $ $으로 눌러 DFT 매트릭스 방정식으로 작성하고 역행렬 형태를 관찰한다.

$$ 시작 \ {bmatrix는 Y_} {0} \\ Y_은 \\ {1} {2} Y_ \\ Y_ {3} \\ \ vdots \\ Y_ {N-1} \ {단부 bmatrix} = \ {시작할 bmatrix} 1 1 1 1 \ cdots 및 1 \\ 1 \ 오메가 _ {N} \ 오메가 _ {N} ^ {2} \ 오메가 _ ^ {N} {3} \ cdots & \ 오메가 _ {N} ^ {N-1} \\ 1 \ 오메가 _ {N} ^ {2} \ 오메가 _ ^ {N} {4} \ 오메가 _ {N} ^ {6} \ cdots 및 \ 오메가 _ {N} ^ {2 \ 좌측 (N-1 \ 오른쪽)} \\ 1 \ 오메가 _ ^ {N} {3} \ 오메가 _ {N} ^ {6} \ 오메가 _ {N} ^ {9} \ cdots 및 \ 오메가 _ {N}는 ^ {3 \ 좌측 (N-1 \ 오른쪽)} \\ \ vdots 및 \ vdots 및 \ vdots 및 \ vdots 및 \ ddots 및 \ vdots \ \ 1 \ 오메가 _ {N} ^ {N-1} \ 오메가 _ {N} ^ {2 \ 좌측 (N-1 \ 오른쪽)} \ 오메가 _ {N} ^ {3 \ 좌회전 (N- 1 \ 오른쪽)} \ cdots 및 \ 오메가 _ {N} ^ {\ 좌측 (N-1 \ 오른쪽) \ 좌측 (N-1 \ 오른쪽)} \ 단부 {bmatrix}} {bmatrix 시작 \ A_ {0} \\ A_ {1} \\ A_ {2} \\ A_ {3} \\ \ vdots \\ A_ {N-1} \ {bmatrix 단부를} $$

$ $ 우리는 DFT 행렬 제품 $의 Y = V_ {N}를 기록 할 수있는 $, $는 $ \에 V_n을 여기서 $ 반 몬드 데르 행렬의 힘에 의해 적절하게 충전 $, $ J 들면, K = 0.1 omega_n, \ cdots는, N-1, N은 V_ {} $에서 $ 소자 (A $) (K, J)를 $ \ 오메가 _ {N} ^ {} KJ $. 역 들면 $ A = DFT_ {N} ^ {- 1} \ 좌측 (우측 Y \) $ 우리 곱셈 $ $ $ Y $ V_n 역행렬 V_ $ {N} ^ {- 1}에 $ 처리.

$ J 들면, K = 0.1 \ cdots, N-1 V_는 {N}는 $는 $ V_n은 $ (K, J)를 $ $에서 $ 요소 \ 오메가 _ {N} ^ {- KJ} / N $는 명확하게 확립

이러한 고속 푸리에 내용이 끝났습니다 :

보이드 FFT (단지 < 더블 > A *, INT N-, INT INV) // 고속 푸리에 변환 
{
     위해 ( INT I = 0 ; I는 <N-; I ++) // 에만 <rev_i 교환 막을 두 개의 스위칭 만 CI 
        IF (I < 계 [I]) 
            스왑 (a [I], A [개정판 [I]) 
    에 대한 ( INT I = 1. ; I <N- = I *는 2 ) // 나타내는 결합 I 서열 길이 1/2 
    { 
        복합 < 더블 > = EXP의 WN (단지 < 더블 > ( 0 , PIE INV * / I)); // 루트 장치를 발견 (1) ^ w_n. 
        위한( 지능 J = 0 ; J <N-, J = I *이 + 2 ) // J 병합의 시퀀스 번호를 나타낸다 
        { 
            복합 < 더블 > W ( 1. , 0 ); // 루트 장치 발견 
            을위한 ( INT K = J 단계; K는 <J + I, K ++) // 계산의 좌측 절반의 우측 절반 산출하면서 K는, 포인터의 시퀀스의 좌측 절반을 나타낸다 
            { 
                복합 < 더블 ;> X = A [K] // 나비 변환 
                복합 < 더블 > Y를 W * A = [K + I], 
                A [K] = X + Y, 
                A [K + I] X- = Y;
                W * = WN의; // K를 찾기 ^ w_n 
            } 
        } 
    } 
    IF (INV == - 1. ) // INV -1 인버스 고속 푸리에 변환으로 변환을 나타내는 경우 
        에 대해 ( INT I = 0 ; I <N-; I ++ ) 
            A [I]는 / = N-; 
} 
무효 초기화 () // 판독 전처리 
{
     INT 레나 = 나 strlen (SA), LenB = ) 나 strlen (SB 단계;  = 최대 (레나 LenB)
      ( INT의 I = 0 ; I는 <리나; I ++) // 역방향 기억 
        이 [I] = (더블 ) (SA [I - 레나 1. ] - ' 0 ' )
     에 대한 ( INT I = 0 ; I <LenB; I ++ ) 
        BN [I] = ( 더블 ) (SB [LenB-I- . 1 ] - ' 0 ' )
     그동안은 (( . 1 << TOT) <LEN (* 2 )) // 2의 N 승의 결합 다항식의 수까지 상승한다 
    { 
        TOT ++ ; 
        S << = 1이다. ] 
    } 
    에 대한 ( INT I = 0 나는 <S, I ++) //비트 순열 각각의 변환 후 전처리 위치 다항식 계수 
        레브 [I]가 = (계 [I >> . 1 ] >> . 1 ((I &가 |) . 1 ) << (tot- . 1 )) 
    FFT (AN, S, 1이다. ); // 두 다항식의 평가에 
    FFT (BN, S, 1이다. )
     에 대한 ( INT I = 0 ; I는 <S는; I ++) // 소수점 값이 승산 
        을 [I] * = BN [I]; 
    FFT (AN, S, - 1이다. ); // 제품 보간 
     ( INT I = 0 ; I <S; I ++ ) 
    { 
        ANS [I] + = ( INT ) (AN [I] .real ( ) +0.5 ); // 정밀도 더블 형의 손실 방지 
        ANS를 [I + 1이다. ] + ANS = [I] / 10 , 
        ANS [I] (%) = (10) ; 
    } 
    while 회 ((ANS [S]!) && S) 
        S - ; 
    S ++ ;
     그동안 (S - 캔톤 ) 
        의 printf ( " %의 D " , ANS [S]) 
}
고속 푸리에 변환

추천

출처www.cnblogs.com/JDFZ-ZZ/p/12116182.html