एफएफटी को हाथ से कैसे करें, यह दिखाएं


27

मान लें कि आपके पास दो बहुपद हैं: 3+x और 2x2+2 ।

मैं यह समझने की कोशिश कर रहा हूं कि एफएफटी हमें इन दोनों बहुपदों को कैसे गुणा करने में मदद करता है। हालाँकि, मुझे कोई भी उदाहरण नहीं मिला। क्या कोई मुझे दिखा सकता है कि एफएफटी एल्गोरिदम इन दोनों बहुपदों को कैसे गुणा करेगा। (नोट: इन बहुपद के बारे में कुछ खास नहीं है, लेकिन मैं इसे सरल बनाना चाहता था ताकि इसे आसानी से पालन किया जा सके।)

मैंने pseudocode में एल्गोरिदम को देखा है, लेकिन उनमें से सभी में समस्याएं हैं (निर्दिष्ट नहीं करें कि इनपुट क्या होना चाहिए, अपरिभाषित चर)। और आश्चर्यजनक रूप से, मैं नहीं पा सकता कि कोई भी वास्तव में एफएफटी का उपयोग करके बहुपद के बहुगुणित उदाहरण के माध्यम से (हाथ से) चला गया है।


2
विकिपीडिया इस अच्छी छवि को पूर्णांक-गुणन के लिए FFT के माध्यम से रखता है , लेकिन मुझे लगता है कि एक और भी स्पष्ट चरण-दर-चरण मददगार हो सकता है।
— रियलज़ स्लाव

जवाबों:


27

मान लीजिए कि हम एकता की चौथी जड़ों का उपयोग करते हैं, जो कि x के लिए 1,i,−1,−i के प्रतिस्थापन से मेल खाती है । हम एफएफटी एल्गोरिथ्म में डिक्मिनेशन-इन-फ्रीक्वेंसी के बजाय डिसीमेशन-इन-टाइम का भी उपयोग करते हैं। (हम मूल रूप से एक बिट-उलटा ऑपरेशन भी लागू करते हैं।)x

आदेश पहले बहुपद के बदलने की गणना करने के लिए, हम गुणांक लिख कर शुरू:

3,1,0,0.
फूरियर भी गुणांकों के बदलने 3,0 है 3,3 , और अजीब गुणांकों के 1,0 है 1,1 । (यह रूपांतरण सिर्फ a,b↦a+b,a−b ।) इसलिए पहली बहुपद का परिवर्तन
4,3+i,2,3−i.
इस का उपयोग कर प्राप्त किया जाता हैX0,2=E0±O0 ,X1,3=E1∓iO1 । (ट्वीडल फैक्टर गणना से)।

दूसरे बहुपद के लिए भी ऐसा ही करते हैं। गुणांकों हैं

2,0,2,0.
भी गुणांक 2,2 को बदलने 4,0 , और अजीब गुणांक 0,0 को बदलने 0,0 । इसलिए दूसरे बहुपद का रूपांतरण
4,0,4,0.

हम दो फूरियर रूपांतरण बिंदुओं को गुणा करके उत्पाद बहुपद के फूरियर रूपांतरण प्राप्त करते हैं:

16,0,8,0.
यह उलटा फूरियर रूपांतरण की गणना करने के लिए रहता है। यहां तक ​​कि गुणांक 16,8 व्युत्क्रम-परिवर्तन 12,4 , और विषम गुणांक 0,0 उलटा-रूपांतरण 0,0 । (उलटा रूपांतर x,y↦(x+y)/2,(x−y)/2 ।) इसलिए उत्पाद बहुपद है के बदलने
6,2,6,2.
इस का उपयोग कर प्राप्त किया जाता हैX0,2=(E0±O0)/2 ,X1,3=(E1∓iO1)/2 । हमें वांछित उत्तर
(3+x)(2+2x2)=6+2x+6x2+2x3.


आप 6,2 6, 2 पर कैसे पहुंचे?
— लक्स

: मैं सूत्रों दिया , एक्स 1 , 3 = ( ई 1 ∓ मैं हे 1 ) / 2 , जहां ई 0 , ई 1 ( हे 1 , हे 2 ) है सम (विषम) गुणांक के व्युत्क्रम रूपांतरण, सूत्र x , y ↦ ( x + y ) के माध्यम से प्राप्त किए जाते हैंX0,2=(E0±O2)/2X1,3=(E1∓iO1)/2E0,E1O1,O2 । कृपया उत्तर को फिर से देखें - सभी गणनाएं हैं। x,y↦(x+y)/2,(x−y)/2
— युवल फिल्मस

आप दो बार भी गुणांक का उपयोग क्यों करते हैं? 3,3 -> 3,3,3,3। -> 3 + 1, 3-i, 3 + -1,3 - i?
— आवेश तोर्लिफ

और X 1 , 3 के लिए ये सूत्र उच्च डिग्री तक कैसे विस्तारित होते हैं? क्या प्लस / माइनस संकेत बस पलटते रहते हैं? उदाहरण के लिए यह X 0 , 2 , 4 के लिए क्या होगा ? X0,2X1,3X0,2,4
— बॉबी ली

@ बॉबीली मैं आपको एफएफटी पर कुछ साहित्य पढ़ने के लिए प्रोत्साहित करता हूं।
— युवल फिल्मस

7

बहुपद, जहां deg(A) = qऔर deg(B) = p। द deg(C) = q + p।

इस मामले में, deg(C) = 1 + 2 = 3।

A=3+xB=2x2+2C=A∗B=?

हम गुणांक के क्रूर-बल गुणन द्वारा C को O(n2) समय में आसानी से पा सकते हैं । FFT (और व्युत्क्रम FFT) को लागू करके, हम इसे O(nlog⁡(n)) समय में प्राप्त कर सकते हैं । स्पष्ट रूप से:

  1. ए और बी के गुणांक प्रतिनिधित्व को इसके मूल्य प्रतिनिधित्व में परिवर्तित करें। इस प्रक्रिया को मूल्यांकन कहा जाता है । इसके लिए Divide-and-Conquer (D & C) को निष्पादित करने में O(nlog⁡(n)) समय लगेगा।
  2. बहु-घटक-वार बहुपद को उनके मूल्य प्रतिनिधित्व में दर्शाते हैं। यह C = A * B का मान निरूपण लौटाता है। यह O(n) समय लेता है ।
  3. C को अपने गुणांक निरूपण में C प्राप्त करने के लिए व्युत्क्रम FFT का उपयोग करके C उलटा करें। इस प्रक्रिया को प्रक्षेप कहा जाता है और इसमें O(nlog⁡(n)) समय भी लगता है ।

साथ-साथ चलते हुए, हम प्रत्येक बहुपद को एक सदिश के रूप में दर्शाते हैं जिसका मूल्य इसके गुणांक हैं। हम पैड 0 के साथ वेक्टर, दो की सबसे छोटी बिजली पर निर्भर है n=2k,n≥deg(C) । इस प्रकार n=4 । दो की शक्ति का चयन हमें अपने डिवाइड-एंड-कॉनकॉर एल्गोरिदम को पुनरावर्ती रूप से लागू करने का एक तरीका प्रदान करता है।

A=3+x+0x2+0x3⇒a→=[3,1,0,0]B=2+0x+2x+0x3⇒b→=[2,0,2,0]

चलो A′,B′ ए और बी का मूल्य प्रतिनिधित्व हो, क्रमशः। ध्यान दें कि एफएफटी (फास्ट फूरियर ट्रांसफॉर्म ) एक रैखिक परिवर्तन ( लीनियर मैप ) है और इसे मैट्रिक्स, M रूप में दर्शाया जा सकता है । इस प्रकार

A′=Ma→B′=Mb→

हम परिभाषित M=Mn(ω) जहां ω जटिल जड़ों है nth एकता की जटिल जड़ों। सूचना n = 4, इस उदाहरण में। इसके अलावा सूचना है कि में प्रवेश jth पंक्ति और kth स्तंभ है ωnjk । यहां डीएफटी मैट्रिक्स के बारे में अधिक देखें

M4(w)=[111...11ω1ω2...ωn−11ω2ω4...............ωjk...1ωn−1ω2(n−1)...ω(n−1)(n−1)]=[11111ωω2ω31ω2ω4ω61ω3ω6ω9]

यह देखते हुए ω4=4th एकता की जड़ों, हम आदेश दिया है सेट समानता:

{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,−1,−i,1,i,...}

इसे काउंटर-क्लॉकवाइज दिशा में इकाई सर्कल की जड़ों के पुनरावृति के रूप में देखा जा सकता है ।

इसके अलावा, नोटिस mod nप्रकृति, यानी ω6=ω6modn=ω2=−1और−i=ω3=ω3+n

पूरा चरण 1 (करने के लिए मूल्यांकन ) हम पाते हैं A′,B′ प्रदर्शन से

A′=M∗a→=[11111ωω2ω31ω2ω4ω61ω3ω6ω9][3100]=[3+13+1ω3+ω23+ω3]=[43+i23−i]B′=M∗b→=[11111ωω2ω31ω2ω4ω61ω3ω6ω9][2020]=[2+22+2ω22+2ω42+2ω6]=[4040]

यह कदम डी एंड सी एल्गोरिदम (इस उत्तर के दायरे से परे) का उपयोग करके प्राप्त किया जा सकता है।

गुणा A′∗B′ घटक-वार (चरण 2)

A′∗B′=[43+i23−i][4040]=[16080]=C′

अंत में, अंतिम चरण गुणांक में C 'का प्रतिनिधित्व करना है। नोटिस

C′=Mc→⇒M−1C′=M−1Mc→⇒c→=M−1C′

Mn−1=1nMn(ω−1)ωj=−ωn/2+j

Mn−1=14[11111ω−1ω−2ω−31ω−2ω−4ω−61ω−3ω−6ω−9]=14[11111−i−1i1−11−11i−1−i]

ω−j

{ω0,ω−1,ω−2,ω−3,ω−4,ω−5,...}={1,−i,−1,i,1,−i,...}

nthω−j=ωn−j

c→=M−1C′=1nMn(w−1)=14[11111−i−1i1−11−11i−1−i][16080]=[(16+8)/4(16−8)/4(16+8)/4(16−8)/4]=[6262]

C=A∗B=6+2x+6x2+2x3

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.