NTT (Number Theoretic Transform) एल्गोरिथम एक finite field में एक polynomial को coefficient form से point form में बदलता है।
यदि किसी polynomial की degree है, तो हम इसे unity के -th roots पर evaluate करते हैं जहाँ होता है।
polynomial को unity के -th roots के सेट, के प्रत्येक बिंदु पर evaluate करने के बजाय, हम image preservation theorem for multivalued functions का उपयोग करते हैं। इसका उपयोग डोमेन पर में को से बदलकर बनाए गए multivalued function को evaluate करने के लिए किया जाता है। इसके बाद हम square root के evaluations को से तक, फिर तक और इसी तरह iteratively expand करते हैं, जब तक कि evaluation unity के -th roots तक expand नहीं हो जाता।
इस विधि का रनटाइम है।
unity के 4-th roots पर को evaluate करना
सबसे पहले, हम की occurrences को अधिकतम (maximize) करने के लिए फ़ंक्शन को factor करते हैं, क्योंकि और को root of unity पर evaluate करना आसान है (यह केवल में परिणाम देता है, जो इस बात पर निर्भर करता है कि root of unity की घात (power) सम (even) है या विषम (odd))।
यह निम्नलिखित फ़ंक्शन बनाता है:
इसके बाद, हम को transform करते हैं ताकि हो जाए, जिससे हमें मिलता है:
यहाँ square root expansion आरेख (diagram) दिया गया है:

अब हम परिणाम की तुलना unity के 4-th roots पर को एक-एक करके evaluate करने से करते हैं:
हमारे पास और और हैं। substitution द्वारा, हमें प्राप्त होता है:
Exercise: unity के 4-th roots पर को evaluate करने के लिए उपरोक्त विधि का उपयोग करें। Hint: ऊपर दिए गए उदाहरण का उपयोग करें और सेट करें।
Tree की ऊँचाई है और हम प्रत्येक पंक्ति पर ऑपरेशन्स करते हैं, इसलिए रनटाइम है।
unity के 8-th roots पर को evaluate करना
सबसे पहले, हम terms की संख्या को अधिकतम करने के लिए polynomial को पुनर्व्यवस्थित (rearrange) करते हैं (चूंकि k = 8)। इससे हमें मिलता है:
अब हम अपना multivalued function प्राप्त करने के लिए substitute करते हैं:
चूँकि evaluation tree को एक ही चित्र में बनाना काफी बड़ा होगा, इसलिए हम tree का बायां हिस्सा (left side) बनाएंगे जहाँ हम को evaluate करते हैं और पहले उसका आरेख (diagram) दिखाएंगे:

ऊपर दिए गए चित्र से, हम देख सकते हैं कि:
अब हम tree के दाएं हिस्से (right side) को expand करते हैं जहाँ है:

उस परिणाम से, हमें प्राप्त होता है:
Evaluations को मिलाने और omega terms को वितरित (distribute) करने पर, हमें मिलता है:
इसके बाद, हम coefficients को आरोही क्रम (ascending order) में रखते हैं:
अब evaluations को , , … , के क्रम में जाने के लिए पुनर्व्यवस्थित (rearrange) करते हैं:
यदि हम इसकी तुलना unity के 8-th roots के लिए Vandermonde matrix से करते हैं, तो हम देख सकते हैं कि हमने की powers की सही गणना की है।
Vandermonde matrix की गणना
ऊपर दी गई Vandermonde matrix को निम्न प्रकार से प्राप्त किया गया था। प्रत्येक पंक्ति पर के लिए की powers है:
इसके बाद, हम 8 के गुणकों (multiples) को factor out करते हैं:
8 के factors को हटाने पर हमें मिलता है:
, , , को replace करने के बाद हमारे पास मूल (original) Vandermonde matrix है:
Exercise: unity के 8-th roots पर को evaluate करें। फिर से, ध्यान दें कि आप सेट कर सकते हैं।
Exercise: में unity के 4-th roots पर को evaluate करें जहाँ है। एक शुरुआती बिंदु (starting point) के रूप में primitive 4-th root of unity खोजने के लिए Python का उपयोग करें।
सारांश
Square root expansion का उपयोग करके unity के -th roots पर एक polynomial को evaluate करने से वही evaluations मिलते हैं जो unity के roots पर polynomial को एक-एक करके evaluate करने पर मिलते हैं। यह Image Preservation Theorem for Multivalued Functions के कारण सत्य होता है क्योंकि हम केवल डोमेन पर multivalued function को evaluate कर रहे हैं।
यह विधि computation cost बचाती है क्योंकि प्रत्येक चरण (step) में, आधे square roots को evaluate किया जाता है और उस coefficient या coefficients के योग (sum) से गुणा किया जाता है जिसके साथ उन्हें जोड़ा (paired) गया है। बचे हुए evaluations के लिए, परिणामों को फिर से evaluate करने के बजाय केवल नीचे कॉपी कर लिया जाता है।