वृत्ताकार परिवर्तन

साहचर्य गणित में, वृत्ताकार परिवर्तन टुपल में प्रविष्टियों को पुनर्व्यवस्थित करने का ऑपरेशन है, या तो अंतिम प्रविष्टि को पहले समिष्ट पर ले जाकर, जबकि अन्य सभी प्रविष्टियों को अगले समिष्ट पर स्थानांतरित करके, या प्रतिलोम ऑपरेशन करके प्राप्त करते है। वृत्ताकार परिवर्तन विशेष प्रकार का चक्रीय क्रमपरिवर्तन है, जो बदले में विशेष प्रकार का क्रमपरिवर्तन है। औपचारिक रूप से, गोलाकार परिवर्तन टुपल में n प्रविष्टियों का क्रमपरिवर्तन है जैसे कि या तो
 * $$\sigma(i)\equiv (i+1)$$ मॉड्यूलर अंकगणित n, सभी प्रविष्टियों के लिए i = 1, ..., n

या
 * $$\sigma(i)\equiv (i-1)$$ मॉड्यूलर अंकगणित n, सभी प्रविष्टियों के लिए i = 1, ..., n।

किसी दिए गए टुपल में बार-बार वृत्ताकार परिवर्तन प्रयुक्त करने के परिणाम को ट्यूपल का 'वृत्ताकार परिवर्तन' भी कहा जाता है।

उदाहरण के लिए, चार-टुपल (a, b, c, d) में बार-बार गोलाकार परिवर्तन लगाने से क्रमिक रूप से लाभ मिलता है और फिर क्रम दोहराता है; इसलिए इस चार-टुपल में चार अलग-अलग गोलाकार परिवर्तन हैं। चूँकि, सभी n-टुपल्स में n विशिष्ट वृत्ताकार परिवर्तन नहीं होते हैं। उदाहरण के लिए, 4-ट्यूपल (a, b, a, b) में केवल 2 अलग-अलग गोलाकार परिवर्तन हैं। n-ट्यूपल की अलग-अलग गोलाकार परिवर्तन $$\frac{n}{k}$$ की संख्या है, जहां $k$ का भाजक है $n$, सभी उप-पैटर्न पर दोहराव की अधिकतम संख्या को दर्शाता है।
 * (d, a, b, c),
 * (c, d, a, b),
 * (b, c, d, a),
 * (a, b, c, d) (मूल चार-ट्यूपल),

कंप्यूटर प्रोग्रामिंग में, बिटवाइज़ रोटेशन, जिसे वृत्ताकार परिवर्तन के रूप में भी जाना जाता है, बिटवाइज़ ऑपरेशन है जो इसके ऑपरेंड के सभी बिट्स को परिवर्तन करता है। इस प्रकार अंकगणितीय परिवर्तन के विपरीत, गोलाकार परिवर्तन किसी संख्या के साइन बिट को संरक्षित नहीं करता है या फ़्लोटिंग-पॉइंट नंबर के घातांक को उसके महत्व से अलग नहीं करता है। तार्किक परिवर्तन के विपरीत, रिक्त बिट स्थिति शून्य से नहीं भरी जाती है, किन्तु अनुक्रम से बाहर स्थानांतरित बिट्स से भरी जाती है।

वृत्ताकार परिवर्तन प्रयुक्त करना
बिट अनुक्रमों को व्यवस्थित करने के लिए क्रिप्टोग्राफी में अधिकांशतः वृत्ताकार परिवर्तन का उपयोग किया जाता है। सामान्यतः, सी (प्रोग्रामिंग भाषा) सहित कई प्रोग्रामिंग भाषाओं में वृत्ताकार शिफ्टिंग के लिए ऑपरेटर या मानक फ़ंक्शन नहीं हैं, तथापि लगभग सभी प्रोसेसर के पास इसके लिए बिटवाइज़ ऑपरेशन निर्देश हैं (उदाहरण के लिए इंटेल x86 में आरओएल और आरओआर हैं)। चूँकि, कुछ कंपाइलर आंतरिक कार्य के माध्यम से प्रोसेसर निर्देशों तक पहुंच प्रदान कर सकते हैं। इसके अतिरिक्त, मानक एएनएसआई सी कोड में कुछ निर्माणों को कंपाइलर द्वारा सीपीयू पर रोटेट असेंबली भाषा निर्देश के लिए अनुकूलित किया जा सकता है जिसमें ऐसा निर्देश होता है। अधिकांश सी कंपाइलर निम्नलिखित मुहावरे को पहचानते हैं, और इसे एकल 32-बिट रोटेट निर्देश में संकलित करते हैं।

यह सुरक्षित और संकलक-अनुकूल कार्यान्वयन जॉन रेगेहर द्वारा विकसित किया गया था, और इसे पीटर कॉर्डेस द्वारा और अधिक परिष्कृत किया गया था। एक सरल संस्करण अधिकांशतः देखा जाता है जब   1 से 31 बिट्स की सीमा तक सीमित है: यह संस्करण खतरनाक है क्योंकि यदि  0 या 32 है, तो यह 32-बिट परिवर्तन के लिए पूछता है, जो सी भाषा मानक में अपरिभाषित व्यवहार है। चूँकि, यह वैसे भी कार्य करता है, क्योंकि अधिकांश माइक्रोप्रोसेसर इसे प्रयुक्त करते हैं   या तो 32-बिट परिवर्तन (0 का उत्पादन) या 0-बिट परिवर्तन (मूल का उत्पादन) के रूप में  ), और इनमें से कोई भी इस एप्लिकेशन में सही परिणाम देता है।

उदाहरण
यदि बिट अनुक्रम 0001 0111 को बिट स्थिति के गोलाकार परिवर्तन के अधीन किया गया था... (नीचे चित्र देखें) यदि बिट अनुक्रम 1001 0110 को निम्नलिखित परिचालनों के अधीन किया गया था:

अनुप्रयोग
चक्रीय कोड प्रकार का ब्लॉक कोड होता है, जिसमें यह गुण होता है कि कोडवर्ड का गोलाकार परिवर्तन सदैव और कोडवर्ड उत्पन्न करता है। यह निम्नलिखित सामान्य परिभाषा को प्रेरित करता है: इस प्रकार वर्णमाला Σ पर स्ट्रिंग (कंप्यूटर विज्ञान) के लिए, परिवर्तन (o) को एस के परिपत्र परिवर्तन के फलन (गणित) को निरूपित करें, और स्ट्रिंग्स के फलन L के लिए, परिवर्तन (L) को L में स्ट्रिंग्स के सभी गोलाकार शिफ्टों के फलन को निरूपित करें। यदि L चक्रीय कोड है, तो परिवर्तन (L) ⊆ L; L के चक्रीय भाषा होने के लिए यह आवश्यक नियम है। इस प्रकार औपचारिक भाषा सिद्धांत में ऑपरेशन परिवर्तन (L) का अध्ययन किया गया है। उदाहरण के लिए, यदि L संदर्भ-फ्री भाषा है, तो परिवर्तन(L) फिर से संदर्भ-फ्री है। इसके अलावा, यदि L को लंबाई n की नियमित अभिव्यक्ति द्वारा वर्णित किया गया है, तो शिफ्ट (L) का वर्णन करने वाली लंबाई O(n3) की एक नियमित अभिव्यक्ति है।

यह भी देखें

 * बैरल शिफ्टर
 * परिचालित
 * लिंडन शब्द
 * नेकलेस (कॉम्बिनेटरिक्स) - टपल जैसी वस्तु किन्तु जिसके लिए गोलाकार परिवर्तन को समकक्ष माना जाता है।

==संदर्भ                                                                                                                                                                                                                                      ==