बैरेट रिडक्शन: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 78: Line 78:
}
}
</syntaxhighlight>
</syntaxhighlight>
चूंकि जब से <math>m/2^k \le 1/n</math>, का मान <code>q</code> है। उस फलन में अंत में बहुत छोटा हो सकता है और इस प्रकार <code>a</code> केवल अन्दर होने की गारंटी <math>[0, 2n)</math> है।  इसके अतिरिक्त <math>[0, n)</math> जैसा कि सामान्यतः आवश्यक है। इसे सशर्त घटाव प्रक्रिया ठीक करेगी:
चूंकि जब से <math>m/2^k \le 1/n</math>, उस फलन में <code>q</code>का मान अंत में बहुत छोटा हो सकता है और इस प्रकार <code>a</code> केवल अन्दर होने की गारंटी <math>[0, 2n)</math> है।  इसके अतिरिक्त <math>[0, n)</math> जैसा कि सामान्यतः आवश्यक है। इसे सशर्त घटाव प्रक्रिया ठीक करेगी:


<syntaxhighlight lang="go">
<syntaxhighlight lang="go">
Line 94: Line 94:
== एकल-शब्द बैरेट गुणन ==
== एकल-शब्द बैरेट गुणन ==


कल्पना करना <math>b</math> पूर्व से ज्ञात है.
माना कि <math>b</math> पूर्व से ज्ञात है।
यह हमें पूर्व-गणना करने की अनुमति देता है <math>\left\lfloor \frac{b R}{n} \right\rfloor</math> तक पहुँचने से पहले <math>a</math>.
 
बैरेट गुणन गणना <math>a b</math>, के उच्च भाग का अनुमान लगाता है <math>a b</math>
यह <math>a</math> तक पहुँचने से पहले हमें पूर्व-गणना <math>\left\lfloor \frac{b R}{n} \right\rfloor</math> करने की अनुमति प्रदान करता है। बैरेट गुणन गणना <math>a b</math>, <math>a b</math> के उच्च भाग का अनुमान लगाता है।
साथ
  <math> \left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n </math>,
  <math> \left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n </math>,
और सन्निकटन को घटा देता है।
दिये गये फलन के साथ और सन्निकटन को घटा देता है। तब से
तब से
  <math>\left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n</math> का गुणज <math>n</math>है,
  <math>\left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n</math> का गुणज है <math>n</math>,
परिणामी मूल्य
परिणामी मूल्य
  <math>a b - \left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n</math>
  <math>a b - \left\lfloor \frac{a \left\lfloor \frac{b R}{n} \right\rfloor}{R} \right\rfloor \, n</math>
का प्रतिनिधि है <math>a b \, \bmod \, n</math>.
का प्रतिनिधि <math>a b \, \bmod \, n</math> है।


== बैरेट और मोंटगोमरी गुणन के बीच पत्राचार ==
== बैरेट और मोंटगोमरी गुणन के बीच पत्राचार ==

Revision as of 08:59, 8 August 2023

मॉड्यूलर अंकगणित में बैरेट रिडक्शन 1986 में पी.डी. द्वारा प्रारम्भ किया गया एक रिडक्शन कलन विधि है। बैरेट[1] कंप्यूटिंग का सरल उपाय

इस प्रकार यह तेज़ विभाजन एल्गोरिथ्म का उपयोग करना होगा। बैरेट रिडक्शन एल्गोरिदम है। जिसे इस ऑपरेशन को अनुकूलित करने के लिए डिज़ाइन किया गया है, इसमे स्थिर है और भाग को गुणन से प्रतिस्थापित करना है।

ऐतिहासिक रूप से वैल्यू के लिए , बैरेट रिडक्शन को संचालित करके सम्पूर्ण प्रोडक्ट ab की गणना की गई। हाल ही में यह दिखाया गया कि यदि हम किसी ऑपरेंड पर पूर्वगणना कर सकते हैं। तो पूर्ण उत्पाद अनावश्यक होता है।[2][3]


सामान्य विचार

हम फलन कहते हैं पूर्णांक सन्निकटन। यदि .

इस प्रकार मापांक के लिए और एक पूर्णांक सन्निकटन ,

हम परिभाषित करते हैं- जैसा

.

के सामान्य विकल्प फ्लोर, छत और गोलाई फलन हैं।

सामान्यतः बैरेट रिडक्शन दो पूर्णांक सन्निकटन निर्दिष्ट करके प्रारम्भ होता है और यथोचित निकट सन्निकटन की गणना करता है। जैसा

.

स्थिति पी.डी. द्वारा प्रस्तुत किया गया था। बैरेट[1] फ़्लोर फलन स्थिति के लिए . सामान्य स्थिति के लिए संख्या सिद्धांत पुस्तकालय में पाया गया था।[2] पूर्णांक सन्निकटन दृश्य और मोंटगोमरी गुणन और बैरेट गुणन के बीच पत्राचार की खोज हनो बेकर, विंसेंट ह्वांग, मैथियास जे. कन्नविशर, बो-यिन यांग और शांग-यी यांग द्वारा की गई थी।[3]


एकल-शब्द बैरेट रिडक्शन

जब मान मशीनी शब्दों में फिट होते हैं। तो बैरेट ने प्रारम्भ में उपरोक्त एल्गोरिदम के पूर्णांक संस्करण पर विचार किया।

हम फ़्लोर-फलन केस के विचार का वर्णन करते हैं।

गणना करते समय अहस्ताक्षरित पूर्णांकों के लिए स्पष्ट एनालॉग के लिए विभाजन का उपयोग करना होगा :

func reduce(a uint) uint {
    q:= a / n  // Division implicitly returns the floor of the result.
    return a - q * n
}

चूंकि विभाजन का मूल्य अधिक हो सकता है और क्रिप्टोग्राफ़िक सेटिंग्स में कुछ सीपीयू पर निरंतर-समय निर्देश नहीं हो सकता है। जो ऑपरेशन को समय पर आक्रमण के अधीन करता है। इस प्रकार बैरेट रिडक्शन मूल्य के साथ अनुमानित है क्योंकि विभाजन द्वारा यह केवल राइट-शिफ्ट है और इसलिए यह अधिक मूल्यवान नहीं है।

इस क्रम की गणना में सर्वोत्तम मूल्य के लिए दिया गया है। जिस पर विचार करें:

पूर्णांक होने के लिए, हमें किसी प्रकार पूर्णांक बनाना होगा। निकटतम पूर्णांक तक पूर्णांकित करने से सर्वोत्तम सन्निकटन प्राप्त होगा। किन्तु इसका परिणाम से बड़ा होना हो सकता है। जो अंडरफ्लो का कारण बन सकता है। इस प्रकार अहस्ताक्षरित अंकगणित के लिए उपयोग किया जाता है।

इस प्रकार हम निम्नलिखित के साथ उपरोक्त फलन का अनुमान लगा सकते हैं:

func reduce(a uint) uint {
    q := (a * m) >> k // ">> k" denotes bitshift by k.
    return a - q * n
}

चूंकि जब से , उस फलन में qका मान अंत में बहुत छोटा हो सकता है और इस प्रकार a केवल अन्दर होने की गारंटी है। इसके अतिरिक्त जैसा कि सामान्यतः आवश्यक है। इसे सशर्त घटाव प्रक्रिया ठीक करेगी:

func reduce(a uint) uint {
    q := (a * m) >> k
    a -= q * n
    if a >= n {
        a -= n
    }
    return a
}


एकल-शब्द बैरेट गुणन

माना कि पूर्व से ज्ञात है।

यह तक पहुँचने से पहले हमें पूर्व-गणना करने की अनुमति प्रदान करता है। बैरेट गुणन गणना , के उच्च भाग का अनुमान लगाता है।

,

दिये गये फलन के साथ और सन्निकटन को घटा देता है। तब से

 का गुणज है,

परिणामी मूल्य


का प्रतिनिधि है।

बैरेट और मोंटगोमरी गुणन के बीच पत्राचार

याद रखें कि अहस्ताक्षरित मोंटगोमरी गुणन एक प्रतिनिधि की गणना करता है जैसा

.

वास्तव में, यह मान बराबर है .

हम दावे को इस प्रकार साबित करते हैं।