इस सीरीज़ की शुरुआत में, हमने यह तर्क दिया था कि अधिकतम degree वाले दो polynomials के multiplication को complexity time में किया जा सकता है, यदि दोनों polynomials point-value form में हों।
व्यवहार में (In practice), कठिनाई यह है कि polynomials आमतौर पर coefficient form में दिए जाते हैं, और हम चाहते हैं कि multiplication का परिणाम भी coefficient form में ही हो।
सौभाग्य से, इन समस्याओं को NTT और INTT के fast versions का उपयोग करके हल किया जा सकता है।
Coefficient form में दर्शाए गए दो polynomials को time में multiply करने की प्रक्रिया इस प्रकार है:
- NTT का उपयोग करके, polynomials को coefficient form से point-value form में convert किया जाता है।
- Point-value form वाले polynomials को pointwise multiply किया जाता है। इसे time complexity में किया जा सकता है, और परिणाम point-value form में प्राप्त होता है।
- INTT का उपयोग करके परिणामी polynomial को वापस coefficient form में transform किया जाता है।
-th roots of unity का उपयोग करके, जहाँ , की घात (power) है, step 1 और 3 को time में किया जा सकता है।
एकमात्र सीमा (limitation) यह है कि हमें परिणामी polynomial पर अधिकतम degree निर्धारित करनी होगी। इसलिए, जिन दो polynomials को हम multiply करना चाहते हैं, उनकी degrees का योग से अधिक नहीं हो सकता।
व्यवहार में, यह आम तौर पर कोई समस्या नहीं है, क्योंकि हम अक्सर ऐसे fields का उपयोग कर सकते हैं जिनमें पर्याप्त रूप से बड़े -th roots of unity होते हैं ताकि polynomials की degree अनुमत सीमा (allowed bound) के भीतर रहें।
से कम degree वाले polynomials कोई समस्या उत्पन्न नहीं करते हैं, क्योंकि उन्हें degree तक zero-valued coefficients के साथ pad किया जा सकता है।
Fast NTT और INTT का उपयोग किए बिना, polynomial multiplication की time complexity होगी।
इस अध्याय का उद्देश्य हमारे दावे को साबित करना है। हम दिखाएंगे कि coefficient form में दो polynomials को multiply करना, प्रत्येक polynomial पर NTT लागू करने, pointwise multiplication करने, और फिर इस operation से प्राप्त परिणामी polynomial पर INTT लागू करने के equivalent है।
Polynomial multiplication के संदर्भ में इस परिणाम को convolution theorem के रूप में जाना जाता है। अधिक सामान्य संदर्भ में, convolution theorem यह बताता है कि
“original domain में convolution, transformed domain में pointwise multiplication के equivalent है।”
इस theorem को ठीक से समझने के लिए, हमें यह परिभाषित करने से शुरुआत करनी होगी कि convolution क्या है।
Mathematics में कम रुचि रखने वाले पाठक continuity खोए बिना इस अध्याय को छोड़ सकते हैं। पाठ के बाकी हिस्से में, हम convolution theorem को साबित करते हैं, लेकिन यदि पाठक केवल इसके application में रुचि रखता है, तो यह स्वीकार करना पर्याप्त है कि इसका उपयोग के बजाय time complexity में polynomials को multiply करने के लिए किया जा सकता है।
Convolution
Coefficient form में दो polynomials को multiply करना convolution operation का एक उदाहरण है।
मान लीजिए कि degree 2 के दो polynomials हैं,
और
Coefficient form में multiplication से यह polynomial प्राप्त होता है:
इस expression को rearrange करने पर, हमें प्राप्त होता है:
इस प्रकार, और के multiplication से प्राप्त polynomial के coefficients हैं:
इन coefficients को सूत्र (formula) द्वारा संक्षिप्त (compactly) रूप में व्यक्त किया जा सकता है:
के लिए, जो polynomial की degree है। आइए इसे coefficients में से एक, के लिए जाँचें। इस coefficient के लिए, हमारे पास है:
चूँकि और दोनों शून्य हैं (क्योंकि polynomials और की degree 2 है), यह इसमें reduce हो जाता है:
जैसा कि अपेक्षित था।
जिस operation को
द्वारा परिभाषित किया गया है, उसे convolution कहा जाता है और आमतौर पर इसे इस प्रकार लिखा जाता है:
जहाँ convolution operator को दर्शाता है।
The Convolution Theorem
हमारा लक्ष्य यह साबित करना है कि और को point-value form में convert करना, corresponding points को multiply करना, और परिणाम को वापस coefficient form में convert करना, और के coefficients के convolution को perform करने के equivalent है।
इन polynomials पर विचार करें:
और
जिनकी degree और हैं।
और को multiply करने पर एक नया polynomial प्राप्त होता है, जिसकी degree क्रमशः और की degrees और का sum (योग) होती है।
मान लीजिए कि की degree है।
इस प्रकार, हम यह compute करना चाहते हैं:
यदि degree से कम है, तो हम higher-degree terms के coefficients को शून्य (zeros) के साथ pad कर सकते हैं।
आइए हम polynomials और के coefficients को इस प्रकार दर्शाएं:
ऊपर दिए गए कुछ higher-degree coefficients शून्य होंगे, क्योंकि और की degrees का योग अधिकतम होना चाहिए। यह कोई समस्या नहीं है। हमारी एकमात्र पाबंदी (restriction) यह है कि:
हमारा पहला कदम polynomials और को coefficient form से point-value form में convert करना है।
First step: polynomials को point-value form में convert करना।
इन polynomials को point-value form में convert करने के लिए, हम NTT का उपयोग करते हैं। को की घात (power) के रूप में चुनकर, हम fast transform लागू कर सकते हैं। हालाँकि, चूँकि अंतिम परिणाम Vandermonde matrix द्वारा multiplication के equivalent है, इसलिए हम matrix formulation प्रस्तुत करेंगे।
उदाहरण के लिए, polynomial के लिए, -th roots of unity पर इसके evaluations इस प्रकार दिए गए हैं:
इसी प्रकार, के लिए,
इन matrix operations को componentwise इस प्रकार लिखा जा सकता है:
और
उदाहरण के लिए, का evaluation इस प्रकार दिया जाता है:
Second step: point-value form में polynomials का pointwise multiplication करना।
अब हम product polynomial के evaluations प्राप्त करने के लिए और के evaluations को pointwise multiply करते हैं:
Index notation में, इसे इस प्रकार लिखा जा सकता है:
पिछले step में प्राप्त और के expressions का उपयोग करते हुए, हमें प्राप्त होता है:
संक्षेप में (To recap), हम जो दिखाना चाहते हैं वह यह है कि यदि हम point-value form (उपरोक्त form) में polynomial पर INTT perform करते हैं, तो परिणाम और का convolution perform करने के समान ही होता है।
Last step: point-value form में polynomial पर INTT लागू करना
-th roots of unity पर Inverse Number Theoretic Transform (INTT) को Vandermonde matrix का उपयोग करके perform किया जाता है, जिसे के factor से scale किया गया हो।
इस प्रकार, points के सेट पर INTT लागू करके, हम coefficient form में polynomial प्राप्त करते हैं:
इसे component-wise इस प्रकार लिखा जा सकता है:
इस तथ्य का उपयोग करते हुए कि इस प्रकार दिया गया है:
हमारे पास यह है कि:
यह expression बड़ा है, लेकिन इसे roots of unity की orthogonality property लागू करके सरल किया जा सकता है।
सबसे पहले, आइए की सभी powers को group करें:
उपरोक्त expression यह इंगित करता है कि हम इसे सरल बनाने के लिए roots of unity की orthogonality का उपयोग कर सकते हैं।
याद रखें कि roots of unity की orthogonality property इस प्रकार दी गई है:
में isolated sum of roots of unity के लिए उपरोक्त सूत्र का उपयोग करते हुए, हम ध्यान देते हैं कि:
के बराबर है यदि (या equivalent रूप से ), और अन्यथा शून्य है।
इसे Kronecker delta से गुणा किए गए के रूप में represent किया जा सकता है:
को के expression में replace करने पर, हमें प्राप्त होता है कि:
Constants और आपस में cancel हो जाते हैं:
अधिक महत्वपूर्ण बात यह है कि index पर sum करते समय, को छोड़कर सभी terms शून्य (vanish) हो जाते हैं। यह roots of unity की orthogonality के कारण है।
परिणामस्वरूप, पर summation collapse हो जाता है, और हम में summation को एकल (single) element से replace कर सकते हैं। हमें प्राप्त होता है:
यह बिल्कुल convolution formula ही है!
आइए याद करें कि हमने क्या किया:
- हमने polynomials और पर NTT लागू किया, उनके coefficient representations को point-value representations में convert किया, यानी वे vectors जिनमें -th roots of unity पर उनके evaluations शामिल हैं:
- हमने इन evaluation values को pointwise multiply किया, जिसका अर्थ है कि प्रत्येक root of unity के लिए हमने यह compute किया:
जिससे product polynomial का point-value representation प्राप्त हुआ।
- हमने values के इस vector पर INTT लागू किया:
ताकि का coefficient representation वापस प्राप्त (recover) किया जा सके।
हमने दिखाया कि ये तीन steps ठीक वही परिणाम देते हैं जो polynomials और को multiply करने पर मिलता है, अर्थात, और के coefficients का convolution करना।
हालाँकि, जबकि direct convolution की time complexity होती है, उपरोक्त प्रक्रिया को time में execute किया जा सकता है, जिससे वही अंतिम polynomial प्राप्त होता है।
Convolution theorem बिल्कुल यही बताता है। अधिक formal तरीके से, हम इसे इस प्रकार लिख सकते हैं:
मान लीजिए कि और उनके coefficient form में दो polynomials हैं। मान लीजिए कि convolution operation को दर्शाता है और multiplication को दर्शाता है।
मान लीजिए कि , पर NTT के application को दर्शाता है — अर्थात, जबकि coefficients का vector है, evaluations का vector है — और , पर INTT के application को दर्शाता है। तब,
Convolution theorem को व्यक्त (express) करने का दूसरा तरीका यह है:
यह एक linear transformation है, और इसे इस प्रकार समझा जा सकता है: coefficient domain में convolution, point-value domain में pointwise multiplication के equivalent है।
यह लेख हमारी ZK Book में Number Theoretic Transform पर आधारित सीरीज़ का हिस्सा है।