यहाँ जो जो के द्वारा लिंक पेपर से एल्गोरिथ्म पर विस्तृत जवाब है: http://arxiv.org/abs/0805.1598
पहले आइए हम एक एल्गोरिथ्म पर विचार करें जो डिवाइड और जीत का उपयोग करता है।Θ(nlogn)
1) फूट डालो और जीतो
हम दे रहे हैं
a1,a2,…,b1,b2,…bn
अब विभाजित करने और जीतने के लिए, कुछ , हम सरणी प्राप्त करने का प्रयास करते हैंm=Θ(n)
[a1,a2,…,am,b1,b2,…,bm],[am+1,…,an,bm+1,…bn]
और फिर से आना।
ध्यान दें कि भाग चक्रीय पारी हैb1,b2,…bm,am+1,…an
am+1,…an,b1,…bm
स्थानों द्वारा ।m
यह एक क्लासिक है और इसे तीन रिवर्सल और इन- समय द्वारा किया जा सकता है ।O(n)
इस प्रकार विभाजित और जीतना आपको समान पुनरावृत्ति के साथ एक एल्गोरिथ्म देता है ।Θ(nlogn)T(n)=2T(n/2)+Θ(n)
2) क्रमचय चक्र
अब, समस्या का एक और तरीका है विच्छेद चक्र के एक सेट के रूप में क्रमचय पर विचार करें।
क्रमपरिवर्तन द्वारा दिया जाता है ( से शुरू होता है )1
j↦2jmod2n+1
यदि हम किसी तरह से जानते थे कि चक्र क्या थे, निरंतर अतिरिक्त स्थान का उपयोग करके, हम एक तत्व को चुनकर क्रमचय का एहसास कर सकते हैं , तो निर्धारित करें कि वह तत्व कहां जाता है (उपरोक्त सूत्र का उपयोग करके), लक्ष्य स्थान में तत्व को अस्थायी स्थान में डालें, डाल दें उस लक्ष्य में तत्व और चक्र के साथ जारी है। एक बार जब हम एक चक्र के साथ हो जाते हैं तो हम अगले चक्र के एक तत्व पर चले जाते हैं और उस चक्र का पालन करते हैं।AA
यह हमें एक टाइम अल्गोरिदम देगा, लेकिन यह मानता है कि हम "किसी तरह जानते थे कि सटीक चक्र क्या थे" और इस बुक-कीपिंग को स्पेस भीतर करने की कोशिश कर रहे हैं इस समस्या को कठिन बनाता है।O(n)O(1)
यह वह जगह है जहाँ कागज संख्या सिद्धांत का उपयोग करता है।
यह दिखाया जा सकता है कि, जब , स्थिति में , तत्व भिन्न चक्रों में होते हैं और हर चक्र में एक तत्व होता है स्थिति ।2n+1=3k13,32,…,3k−13m,m≥0
यह इस तथ्य का उपयोग करता है कि का एक जनरेटर है ।2(Z/3k)∗
इस प्रकार जब , चक्र दृष्टिकोण का पालन करता है, तो हमें एक समय एल्गोरिथ्म मिलता है, प्रत्येक चक्र के लिए, हम जानते हैं कि वास्तव में कहां से शुरू करें: शक्तियां ( सहित ) स्थान में गणना की जा सकती है ।2n+1=3kO(n)31O(1)
3) अंतिम एल्गोरिथम
अब हम उपरोक्त दो को जोड़ते हैं: विभाजित और जीतना + क्रमचय चक्र।
हम एक विभाजन करते हैं और जीतते हैं, लेकिन उठाते हैं ताकि शक्ति और ।m2m+13m=Θ(n)
तो बजाय दोनों "आधा" पर recursing पर, हम केवल एक पर recurse और कर अतिरिक्त काम।Θ(n)
यह हमें पुनरावृत्ति (कुछ ) देता है और इस प्रकार हमें एक समय, अंतरिक्ष एल्गोरिथ्म!T(n)=T(cn)+Θ(n)0<c<1O(n)O(1)