फ्यूज़न ट्री: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:




[[कंप्यूटर विज्ञान|संगणक विज्ञान]] में, '''फ्यूजन ट्री''' एक प्रकार की ट्री डेटा संरचना है जो एक विस्तृत यूनिवर्स पर w-बिट पूर्णांकों पर एक सहयोगी संख्या को लागू करती है, जहां प्रत्येक इनपुट पूर्णांक का आकार 2w से न्यूनतम होता है और अवांछित होता है. n की-मान तथा-मान जोड़ी के संग्रह पर आपरेशन करने पर, यह {{math|''O''(''n'')}}  अंतरिक्ष का उपयोग करती है और खोजों को {{math|''O''(log<sub>''w''</sub> ''n'')}} समय में पूरा करती है, जो पारंपरिक आपस्तित्व वाले [[स्व-संतुलन द्विआधारी खोज वृक्ष]]  से असंतुलित होता है, और {{mvar|w}} के बड़े मानों के लिए  [[वैन एम्डे बोस कदम|वैन एम्डे बोस]]  ट्री से भी बेहतर होता है. यह तीव्रता इसलिए प्राप्त करता है क्योंकि इसमें [[मशीन शब्द]] पर कुछ स्थायी समय आपरेशन का उपयोग किया जा सकता है. फ्यूजन ट्री की खोज में {{math|''O''(log<sub>''w''</sub> ''n'')}} समय के कारण, यह 1990 में [[माइकल फ्रेडमैन]] और [[डैन विलार्ड]] द्वारा आविष्कृत की गई थी।<ref>{{citation
[[कंप्यूटर विज्ञान|संगणक विज्ञान]] में, '''फ्यूजन ट्री''' एक प्रकार की ट्री डेटा संरचना है जो एक विस्तृत यूनिवर्स पर w-बिट पूर्णांकों पर एक सहयोगी संख्या को लागू करती है, जहां प्रत्येक इनपुट पूर्णांक का आकार 2w से न्यूनतम होता है और अवांछित होता है. n की-मान तथा-मान जोड़ी के संग्रह पर आपरेशन करने पर, यह {{math|''O''(''n'')}}  अंतरिक्ष का उपयोग करती है और खोजों को {{math|''O''(log<sub>''w''</sub> ''n'')}} समय में पूरा करती है, जो पारंपरिक आपस्तित्व वाले [[स्व-संतुलन द्विआधारी खोज वृक्ष|स्व-संतुलन द्विआधारी खोज ट्री]]  से असंतुलित होता है, और {{mvar|w}} के बड़े मानों के लिए  [[वैन एम्डे बोस कदम|वैन एम्डे बोस]]  ट्री से भी बेहतर होता है. यह तीव्रता इसलिए प्राप्त करता है क्योंकि इसमें [[मशीन शब्द]] पर कुछ स्थायी समय आपरेशन का उपयोग किया जा सकता है. फ्यूजन ट्री की खोज में {{math|''O''(log<sub>''w''</sub> ''n'')}} समय के कारण, यह 1990 में [[माइकल फ्रेडमैन]] और [[डैन विलार्ड]] द्वारा आविष्कृत की गई थी।<ref>{{citation
  | last1 = Fredman | first1 = M. L. | author1-link = Michael Fredman
  | last1 = Fredman | first1 = M. L. | author1-link = Michael Fredman
  | last2 = Willard | first2 = D. E. | author2-link = Dan Willard
  | last2 = Willard | first2 = D. E. | author2-link = Dan Willard
Line 26: Line 26:
  | volume = 215
  | volume = 215
  | year = 1999| doi-access = free
  | year = 1999| doi-access = free
  }}.</ref> 1999 में यह दर्शाया गया कि गणना के एक प्रारूप के तहत फ़्यूज़न पेड़ों को कैसे कार्यान्वित किया जाए जिसमें एल्गोरिदम के सभी अंतर्निहित संचालन AC<sup>0</sup> से संबंधित हों, [[सर्किट जटिलता]] का एक प्रारूप जो जोड़ और बिटवाइज़ बूलियन संचालन की अनुमति देता है परंतु मूल फ़्यूज़न ट्री एल्गोरिदम में उपयोग किए जाने वाले गुणन संचालन की अनुमति नहीं देता है। हैश तालिकाओं का उपयोग करके फ़्यूज़न पेड़ों का एक गतिशील संस्करण 1996 में प्रस्तावित किया गया था<ref>{{citation
  }}.</ref> 1999 में यह दर्शाया गया कि गणना के एक प्रारूप के तहत फ़्यूज़न ट्री को कैसे कार्यान्वित किया जाए जिसमें एल्गोरिदम के सभी अंतर्निहित संचालन AC<sup>0</sup> से संबंधित हों, [[सर्किट जटिलता]] का एक प्रारूप जो जोड़ और बिटवाइज़ बूलियन संचालन की अनुमति देता है परंतु मूल फ़्यूज़न ट्री एल्गोरिदम में उपयोग किए जाने वाले गुणन संचालन की अनुमति नहीं देता है। हैश तालिकाओं का उपयोग करके फ़्यूज़न ट्री का एक गतिशील संस्करण 1996 में प्रस्तावित किया गया था<ref>{{citation
  | last = Raman | first = Rajeev
  | last = Raman | first = Rajeev
  | contribution = Priority queues: small, monotone and trans-dichotomous
  | contribution = Priority queues: small, monotone and trans-dichotomous
Line 36: Line 36:
  | title = Fourth Annual European Symposium on Algorithms (ESA '96), Barcelona, Spain, September 25–27, 1996
  | title = Fourth Annual European Symposium on Algorithms (ESA '96), Barcelona, Spain, September 25–27, 1996
  | volume = 1136
  | volume = 1136
  | year = 1996}}.</ref> जो मूल संरचना के {{math|''O''(log<sub>''w''</sub> ''n'')}} रनटाइम के अपेक्षानुसार मेल खाता था। [[ घातीय वृक्ष | घातीय वृक्ष]] का उपयोग करने वाला एक और गतिशील संस्करण 2007 में प्रस्तावित किया गया था<ref>{{citation
  | year = 1996}}.</ref> जो मूल संरचना के {{math|''O''(log<sub>''w''</sub> ''n'')}} रनटाइम के अपेक्षानुसार समानता रखता था। [[ घातीय वृक्ष | घातीय ट्री]] का उपयोग करने वाला एक और गतिशील संस्करण 2007 में प्रस्तावित किया गया था<ref>{{citation
  | last1 = Andersson | first1 = Arne
  | last1 = Andersson | first1 = Arne
  | last2 = Thorup | first2 = Mikkel | author2-link = Mikkel Thorup
  | last2 = Thorup | first2 = Mikkel | author2-link = Mikkel Thorup
Line 47: Line 47:
  | volume = 54
  | volume = 54
  | year = 2007| arxiv = cs/0210006| s2cid = 8175703
  | year = 2007| arxiv = cs/0210006| s2cid = 8175703
  }}.</ref> जो प्रत्येक आपरेशन के लिए {{math|''O''(log<sub>''w''</sub> ''n'' + log log ''n'')}} के खराब तरह का रनटाइम प्रदान करता है।  अंतिम रूप में, दर्शाया गया कि गतिशील फ्यूजन ट्री संज्ञानात्मक ढंग से प्रत्येक आपरेशन को {{math|''O''(log<sub>''w''</sub> ''n'')}} समय में कर सकता है।<ref>{{cite journal |last1=Patrascu |first1=Mihai |last2=Thorup |first2=Mikkel |title=इष्टतम रैंक, चयन और पूर्ववर्ती खोज के साथ गतिशील पूर्णांक सेट|journal=55th IEEE Annual Symposium on Foundations of Computer Science, FOCS 2014 |date=2014 |page=166-175 |doi=10.1109/FOCS.2014.26 |url=https://doi.org/10.1109/FOCS.2014.26}}</ref>
  }}.</ref> जो प्रत्येक आपरेशन के लिए {{math|''O''(log<sub>''w''</sub> ''n'' + log log ''n'')}} के खराब तरह का रनटाइम प्रदान करता है।  अंतिम रूप में, दर्शाया गया कि गतिशील फ्यूजन ट्री संज्ञानात्मक ढंग से प्रत्येक आपरेशन को {{math|''O''(log<sub>''w''</sub> ''n'')}}न्यूनतम  समय में कर सकता है।<ref>{{cite journal |last1=Patrascu |first1=Mihai |last2=Thorup |first2=Mikkel |title=इष्टतम रैंक, चयन और पूर्ववर्ती खोज के साथ गतिशील पूर्णांक सेट|journal=55th IEEE Annual Symposium on Foundations of Computer Science, FOCS 2014 |date=2014 |page=166-175 |doi=10.1109/FOCS.2014.26 |url=https://doi.org/10.1109/FOCS.2014.26}}</ref>


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


== यह कैसे कार्य करता है ==
== यह कैसे कार्य करता है ==
फ्यूजन ट्री मूल रूप से {{math|''w''<sup>1/5</sup>}} शाखा कारक वाली [[बी-वृक्ष|b-वृक्ष]] होती है, जिससे इसकी ऊचाई {{math|''O''(log<sub>''w''</sub> ''n'')}} होती है। अद्यतन और पूछताछ के लिए वांछित रनटाइम प्राप्त करने के लिए, फ्यूजन ट्री को एक बार में {{math|''w''<sup>1/5</sup>}} कुंजीयों को खोजने की क्षमता होनी चाहिए। इसका कारण है कि कुंजीयों को "रेखाचित्रों" करके ऐसा संपीड़ित किया जाता है कि सभी एक मशीन शब्द में समायोजित हो सकें, जिससे पुनर्मिलन संघों को समानांतर में करने में सक्षमता होती है। इसलिए, रेखाचित्रोंिंग, समानांतर तुलना और सबसे महत्वपूर्ण बिट सूचक स्थानक के आधार पर की जाने वाली गणनाओं का एक श्रृंखला, उचित समाधान तक पहुंचने में सहायता करती है।
फ्यूजन ट्री मूल रूप से {{math|''w''<sup>1/5</sup>}} शाखा कारक वाली [[बी-वृक्ष|b-ट्री]] होती है, जिससे इसकी ऊचाई {{math|''O''(log<sub>''w''</sub> ''n'')}} होती है। अद्यतन और पूछताछ के लिए वांछित रनटाइम प्राप्त करने के लिए, फ्यूजन ट्री को एक बार में {{math|''w''<sup>1/5</sup>}} कुंजीयों को खोजने की क्षमता होनी चाहिए। इसका कारण है कि कुंजीयों को "रेखाचित्रों" करके ऐसे संपीड़ित किया जाता है कि एक मशीन सभी शब्द में समायोजित हो सकें, जिससे पुनर्मिलन संघों को समानांतर में करने में सक्षमता होती है। इसलिए, रेखाचित्रोंिंग, समानांतर तुलना और सबसे महत्वपूर्ण बिट सूचक स्थानक के आधार पर की जाने वाली गणनाओं का एक श्रृंखला, उचित समाधान तक पहुंचने में सहायता करती है।


===रेखाचित्र===
===रेखाचित्र===
रेखाचित्र वह विधि है जिसके द्वारा प्रत्येक {{mvar|w}}-बिट कुंजी एक नोड पर युक्त {{mvar|k}} कुंजियाँ केवल {{math|''k'' &minus; 1}} बिट्स में संपीड़ित होती हैं।. प्रत्येक कुंजी {{mvar|x}} को {{mvar|w}} ऊंचाई के पूर्ण बाइनरी ट्री में एक पथ के रूप में सोचा जा सकता है जो {{mvar|x}} जड़ से प्रारंभ होकर पत्ती पर समाप्त होता है। यह पथ सामान्यतः इस प्रकार प्रसंस्करण किया जा सकता है कि, सभी बिट स्कैन किए जाने तक, iवें बिट 0 है तो वाम बच्चे की खोज की जाएगी, और iवें बिट 1 है तो दायीं बच्चे की खोज की जाएगी। दो पथों को पृथक करने के लिए, उनके शाखा बिंदु को देखना पर्याप्त है।क्योंकि अधिकतम k कुंजियाँ होती हैं, इसलिए k-1 से अधिक शाखा बिंदु नहीं होंगे, जिसका अर्थ है कि किसी कुंजी की पहचान करने के लिए k-1 बिट्स से अधिक की आवश्यकता नहीं है। और इसलिए, किसी भी रेखाचित्रों में k-1 बिट्स से अधिक नहीं होगा।
रेखाचित्र वह विधि होती है जिसके द्वारा प्रत्येक {{mvar|w}}-बिट कुंजी एक नोड पर युक्त {{mvar|k}} कुंजियाँ केवल {{math|''k'' &minus; 1}} बिट्स में संपीड़ित होती हैं।. प्रत्येक कुंजी {{mvar|x}} को {{mvar|w}} ऊंचाई के पूर्ण बाइनरी ट्री में एक पथ के रूप में सोचा जा सकता है जो {{mvar|x}} जड़ से प्रारंभ होकर पत्ती पर समाप्त होता है। यह पथ सामान्यतः इस प्रकार प्रसंस्करण किया जा सकता है कि, सभी बिट स्कैन किए जाने तक, iवें बिट 0 है तो वाम बच्चे की खोज की जाएगी, और iवें बिट 1 है तो दायीं बच्चे की खोज की जाएगी। दो पथों को पृथक करने के लिए, उनके शाखा बिंदु को देखना पर्याप्त है।क्योंकि अधिकतम k कुंजियाँ होती हैं, इसलिए k-1 से अधिक शाखा बिंदु नहीं होंगे, जिसका अर्थ है कि किसी कुंजी की पहचान करने के लिए k-1 बिट्स से अधिक की आवश्यकता नहीं है। और इसलिए, किसी भी रेखाचित्रों में k-1 बिट्स से अधिक नहीं होगा।


[[File:FusionTreeSketch.gif|center|रेखाचित्रों फलन का विज़ुअलाइज़ेशन।]]रेखाचित्रों फलन का एक महत्वपूर्ण गुण यह है कि यह कुंजियों के क्रम को संरक्षित करता है। वह है, {{math|sketch(''x'') < sketch(''y'')}} किन्हीं दो कुंजियों के लिए {{math|''x'' < ''y''}}. तो, चाबियों की पूरी श्रृंखला के लिए, रेखाचित्रों(x<sub>0</sub>)<sketch(x<sub>1</sub>)<...<sketch(x<sub>k-1</sub>) क्योंकि यदि बाइनरी ट्री जैसे पथ का अनुसरण किया जाता है तो नोड्स को इस तरह से ऑर्डर किया जाएगा कि x<sub>0</sub><x<sub>1</sub><...<x<sub>k-1</sub>.
[[File:FusionTreeSketch.gif|center|रेखाचित्रों फलन का विज़ुअलाइज़ेशन।]]रेखाचित्रों फलन का एक महत्वपूर्ण गुण यह है कि यह कुंजियों के क्रम को संरक्षित करता है। वह है, {{math|sketch(''x'') < sketch(''y'')}} किन्हीं दो कुंजियों के लिए {{math|''x'' < ''y''}}. तो, चाबियों की पूरी श्रृंखला के लिए, रेखाचित्रों(x<sub>0</sub>)<sketch(x<sub>1</sub>)<...<sketch(x<sub>k-1</sub>) क्योंकि यदि बाइनरी ट्री जैसे पथ का अनुसरण किया जाता है तो नोड्स को इस तरह से ऑर्डर किया जाएगा कि x<sub>0</sub><x<sub>1</sub><...<x<sub>k-1</sub>.
Line 66: Line 66:
<math>x_{b_r}x_{b_{r-1}}\cdots x_{b_1}</math>.
<math>x_{b_r}x_{b_{r-1}}\cdots x_{b_1}</math>.


केवल [[सी प्रोग्रामिंग भाषा]] के जैसे मानक शब्द आपरेशन का उपयोग करके, एक कुंजी का पूर्ण रेखाचित्रों सीधे समय में निर्धारित करना कठिन होता है। इसके अतिरिक्त, रेखाचित्रों बिट्स को बिटवाइज़ AND और गुणाकार का उपयोग करके, अधिकतम r<sup>4</sup> आकार के रेंज में पैक किया जा सकता है, जिसे अनुमानित रेखाचित्रों कहा जाता है, जिसमें सभी महत्वपूर्ण बिट होते हैं परंतु इसके साथ कुछ अतिरिक्त बेकार बिट भी होते हैं जो एक पूर्वानुमानित पैटर्न में विस्तृत होते हैं। बिटवाइज़ AND आपरेशन गैर-रेखाचित्रों बिट्स को कुंजी से हटाने के लिए मास्क के रूप में कार्य करता है, जबकि गुणाकार रेखाचित्रों बिट्स को एक छोटी सीमा में स्थानांतरित करता है। "पूर्ण" रेखाचित्रों की तरह, अनुमानित रेखाचित्रों भी कुंजीयों का क्रमबद्धता संरक्षित करता है और इसका अर्थ है कि sketch(x0) < sketch(x1) < ... < sketch(xk-1) होता है।
केवल [[सी प्रोग्रामिंग भाषा]] के जैसे मानक शब्द आपरेशन का उपयोग करके, एक कुंजी का पूर्ण रेखाचित्रों सीधे समय में निर्धारित करना कठिन होता है। इसके अतिरिक्त, रेखाचित्रों बिट्स को बिटवाइज़ AND और गुणाकार का उपयोग करके, अधिकतम r<sup>4</sup> आकार के रेंज में पैक किया जा सकता है, जिसे अनुमानित रेखाचित्रों कहा जाता है, जिसमें सभी महत्वपूर्ण बिट होते हैं परंतु इसके साथ कुछ अतिरिक्त खराब बिट भी होते हैं जो एक पूर्वानुमानित पैटर्न में विस्तृत होते हैं। बिटवाइज़ AND आपरेशन गैर-रेखाचित्रों बिट्स को कुंजी से हटाने के लिए मास्क के रूप में कार्य करता है, जबकि गुणाकार रेखाचित्रों बिट्स को एक छोटी सीमा में स्थानांतरित करता है। "पूर्ण" रेखाचित्रों की तरह, अनुमानित रेखाचित्रों भी कुंजीयों का क्रमबद्धता संरक्षित करता है और इसका अर्थ है कि sketch(x0) < sketch(x1) < ... < sketch(xk-1) होता है।


सही गुणन स्थिरांक निर्धारित करने के लिए कुछ पूर्वप्रक्रिया की आवश्यकता होती है। जहा स्थान b<sub>''i''</sub> में प्रत्येक रेखाचित्रों बिट में b<sub>''i''</sub> + m<sub>''i''</sub> m = से गुणा करके <math>\textstyle\sum_{i=1}^r</math> 2<sup>m<sub>''i.''</sub>  स्थानांतरित  हो जायेंगे वहा अनुमानित रेखाचित्रों को कार्यान्वित करने के लिए, निम्नलिखित तीन गुण होने चाहिए:
सही गुणन स्थिरांक निर्धारित करने के लिए कुछ पूर्वप्रक्रिया की आवश्यकता होती है। जहा स्थान b<sub>''i''</sub> में प्रत्येक रेखाचित्रों बिट में b<sub>''i''</sub> + m<sub>''i''</sub> m = से गुणा करके <math>\textstyle\sum_{i=1}^r</math> 2<sup>m<sub>''i.''</sub>  स्थानांतरित  हो जायेंगे वहा अनुमानित रेखाचित्रों को कार्यान्वित करने के लिए, निम्नलिखित तीन गुण होने चाहिए:


# b<sub>''i''</sub> + m<sub>''j''</sub> सभी जोड़ियों (i, j) के लिए पृथक-पृथक होते हैं। इससे यह सुनिश्चित हो जाएगा कि रेखाचित्रों बिट्स गुणन द्वारा दूषित नहीं हैं।
# b<sub>''i''</sub> + m<sub>''j''</sub> सभी जोड़ियों (i, j) के लिए पृथक-पृथक होते हैं। इससे यह सुनिश्चित हो जाएगा कि रेखाचित्रों बिट्स गुणन द्वारा दूषित नहीं होता हैं।
# b<sub>''i''</sub> + m<sub>''i''</sub> i का सख्ती से बढ़ता हुआ फलन है। अर्थात्, रेखाचित्रों बिट्स का क्रम x'.m में भी संरक्षित रहता है।
# b<sub>''i''</sub> + m<sub>''i''</sub> i का सख्ती से बढ़ता हुआ फलन है। अर्थात्, रेखाचित्रों बिट्स का क्रम x'.m में भी संरक्षित रहता है।
# (b<sub>''r''</sub> + m<sub>''r''</sub>) - (b<sub>1</sub> + m<sub>1</sub>) ≤ r<sup>4</sup>. अर्थात्, रेखाचित्रों बिट्स को अधिकतम r<sup>4</sup> आकार की श्रेणी में पैक किया जाता है, जहां r ≤ O(w<sup>1/5</sup>).होता हैं।
# (b<sub>''r''</sub> + m<sub>''r''</sub>) - (b<sub>1</sub> + m<sub>1</sub>) ≤ r<sup>4</sup>. अर्थात्, रेखाचित्रों बिट्स को अधिकतम r<sup>4</sup> आकार की श्रेणी में पैक किया जाता है, जहां r ≤ O(w<sup>1/5</sup>).होता हैं।
Line 77: Line 77:


इस प्रकार अनुमानित रेखाचित्र की गणना इस प्रकार की जाती है:
इस प्रकार अनुमानित रेखाचित्र की गणना इस प्रकार की जाती है:
# रेखाचित्रों बिट्स को छोड़कर बाकी सभी को x और<math>\sum_{i=0}^{r-1} 2^{b_i}</math> के मध्य बिटवाइज़ से मास्क करें .
# रेखाचित्रों बिट्स को छोड़कर बाकी सभी को x और<math>\sum_{i=0}^{r-1} 2^{b_i}</math> के मध्य बिटवाइज़ से मास्क करना चाहिए .
# ऊपर की गणना के अनुसार कुंजी को पूर्व निर्धारित स्थिरांक m से गुणा करें। इस ऑपरेशन के लिए वास्तव में दो मशीनी शब्दों की आवश्यकता होती है, परंतु यह अभी भी निरंतर समय में किया जा सकता है।
# ऊपर की गणना के अनुसार कुंजी को पूर्व निर्धारित स्थिरांक m से गुणा करें। इस ऑपरेशन के लिए वास्तव में दो मशीनी शब्दों की आवश्यकता होती है, परंतु यह अभी भी निरंतर समय में किया जा सकता है।
# स्थानांतरित रेखाचित्रों बिट्स को छोड़कर सभी को मास्क करें। ये अब अधिकतम r<sup>4</sup><w<sup>4/5</sup> बिट्स.के सन्निहित ब्लॉक में समाहित होते हैं
# स्थानांतरित रेखाचित्रों बिट्स को छोड़कर सभी को मास्क करें। ये अब अधिकतम r<sup>4</sup><w<sup>4/5</sup> बिट्स.के सन्निहित ब्लॉक में समाहित होते हैं।


===समानांतर तुलना===
===समानांतर तुलना===
Line 90: Line 90:
एक संक्षिप्त नोटेशनल एक तरफ: एक बिट स्ट्रिंग एस और गैर-नकारात्मक पूर्णांक m के लिए, चलो s<sup>m</sup> स्ट्रिंग s के स्वयं के साथ m बार संयोजन को दर्शाता है। यदि t एक बिट स्ट्रिंग st भी है, तो t से s के संयोजन को दर्शाता है।
एक संक्षिप्त नोटेशनल एक तरफ: एक बिट स्ट्रिंग एस और गैर-नकारात्मक पूर्णांक m के लिए, चलो s<sup>m</sup> स्ट्रिंग s के स्वयं के साथ m बार संयोजन को दर्शाता है। यदि t एक बिट स्ट्रिंग st भी है, तो t से s के संयोजन को दर्शाता है।


नोड रेखाचित्रों द्वारा कुंजीयों की खोज योग्य बिट य के लिए संभव बनाता है।मान लीजिए z = (0y)<sup>k</sup> लें, जिसे स्थानिक समय में गणित (y को निर्धारित मान ( (0<sup>''b''</sup>1)<sup>''k''</sup>) से गुणा करें) करके बनाया जा सकता है, क्योंकी यह नोड रेखाचित्रों की तरह लंबा हो और नोड रेखाचित्रों में प्रत्येक शब्द क्वेरी इंटीजर y के साथ एक कार्य में तुलना की जा सके, जो शब्द-स्तर समानांतरिज़म का प्रदर्शन करता है। यदि y 5 बिट लंबा होता है, तो यह 000001....000001 से गुणा करके sketch(y)<sup>k</sup> मिलेगा। sketch(x<sub>i</sub>) और 0y के मध्य अंतर के परिणामस्वरूप प्रत्येक ब्लॉक के प्रमुख बिट को 1 होना चाहिए, केवल जब sketch(y) ≤ sketch(x<sub>i</sub>) होता है। इस प्रकार, हम निम्नतम सूचकांक i की गणना कर सकते हैं जिसके लिए<code>sketch</code>(x<sub>''i''</sub>) ≥ y  रहता है, इस प्रकार:
नोड रेखाचित्रों द्वारा कुंजीयों की खोज योग्य बिट य के लिए संभव बनाता है।मान लीजिए z = (0y)<sup>k</sup> लें, जिसे स्थानिक समय में गणित (y को निर्धारित मान ( (0<sup>''b''</sup>1)<sup>''k''</sup>) से गुणा करें) करके बनाया जा सकता है, क्योंकी यह नोड रेखाचित्रों की तरह लंबा हो और नोड रेखाचित्रों में प्रत्येक शब्द क्वेरी इंटीजर y के साथ एक कार्य में तुलना की जा सके, जो शब्द-स्तर समानांतरिज़म का प्रदर्शन करता है। यदि y 5 बिट लंबा होता है, तो यह 000001....000001 से गुणा करके sketch(y)<sup>k</sup> मिलेगा। sketch(x<sub>i</sub>) और 0y के मध्य अंतर के परिणामस्वरूप प्रत्येक ब्लॉक के प्रमुख बिट को 1 होना चाहिए, जब केवल sketch(y) ≤ sketch(x<sub>i</sub>) होता है। इस प्रकार, हम निम्नतम सूचकांक i की गणना कर सकते हैं जिसके लिए<code>sketch</code>(x<sub>''i''</sub>) ≥ y  रहता है, इस प्रकार हैं:


# नोड रेखाचित्रों से z कम करें।
# नोड रेखाचित्रों से z न्यनतम करें।
# अंतर और स्थिरांक  (10<sup>''b''</sup>)<sup>''k''</sup> के मध्य बिटवाइज़ AND लें। इससे प्रत्येक ब्लॉक के प्रमुख बिट को छोड़कर सभी बिट्स हट जाएगें।
# अंतर और स्थिरांक  (10<sup>''b''</sup>)<sup>''k''</sup> के मध्य बिटवाइज़ AND लें। इससे प्रत्येक ब्लॉक के प्रमुख बिट को छोड़कर सभी बिट्स हट जाएगें।
# क्वेरी रेखाचित्रों से छोटे रेखाचित्रों वाले तत्वों से क्वेरी रेखाचित्रों से बड़े तत्वों में संक्रमण के सटीक सूचकांक की पहचान करने के लिए, परिणाम का [[सबसे महत्वपूर्ण बिट]] ढूंढें।
# क्वेरी रेखाचित्रों से छोटे रेखाचित्रों वाले तत्वों से क्वेरी रेखाचित्रों से बड़े तत्वों में संक्रमण के सटीक सूचकांक की पहचान करने के लिए, परिणाम का [[सबसे महत्वपूर्ण बिट]] ढूंढें।
Line 104: Line 104:
दो w-बिट पूर्णांक a और b के मध्य लंबाई सबसे लंबे सामान्य उपसर्ग की गणना निरंतर समय में a और b के मध्य बिटवाइज XOR के सबसे महत्वपूर्ण बिट को ढूंढकर की जा सकती है। इसके उपरांत इसका उपयोग सबसे लंबे सामान्य उपसर्ग को छोड़कर सभी को छिपाने के लिए किया जा सकता है।
दो w-बिट पूर्णांक a और b के मध्य लंबाई सबसे लंबे सामान्य उपसर्ग की गणना निरंतर समय में a और b के मध्य बिटवाइज XOR के सबसे महत्वपूर्ण बिट को ढूंढकर की जा सकती है। इसके उपरांत इसका उपयोग सबसे लंबे सामान्य उपसर्ग को छोड़कर सभी को छिपाने के लिए किया जा सकता है।


ध्यान दें कि p केवल q को कुंजीयों के सेट से पृथक करने की स्थान की सटीकता निर्धारित करता है। यदि q का अगला बिट 0 है, तो q का उत्तरकर्ता p1 उपवृक्ष में समाहित है, और यदि q का अगला बिट 1 है, तो q का पूर्वपद p0 उपवृक्ष में समाहित होता है। इससे q के सटीक स्थान की निर्धारण के लिए निम्नलिखित एल्गोरिदम सुझाए गए हैं:
ध्यान दें कि p केवल q को कुंजीयों के सेट से पृथक करने की स्थान की सटीकता निर्धारित करता है। यदि q का अगला बिट 0 है, तो q का उत्तरकर्ता p1 उपट्री में समाहित है, और यदि q का अगला बिट 1 है, तो q का पूर्वपद p0 उपट्री में समाहित होता है। इससे q के सटीक स्थान की निर्धारण के लिए निम्नलिखित एल्गोरिदम सुझाए गए हैं:


# ऐसमानांतर तुलना का उपयोग करके <code>sketch</code>(x<sub>''i''-1</sub>) ≤ <code>sketch</code>(q) ≤ <code>sketch</code>(x<sub>''i''</sub>).के रूप में सूचकांक i की गणना करते हैं।
# ऐसमानांतर तुलना का उपयोग करके <code>sketch</code>(x<sub>''i''-1</sub>) ≤ <code>sketch</code>(q) ≤ <code>sketch</code>(x<sub>''i''</sub>).के रूप में सूचकांक i की गणना करते हैं।
Line 116: Line 116:
.
.


फ्यूजन ट्रीज का [[हैश तालिका]]ओं  के एक अनुप्रयोग को विल्लार्ड द्वारा दिया गया था, जो एक डेटा संरचना का वर्णन करते हैं जो हैश चेनिंग के साथ एक बाह्य स्तर हैश तालिका को जोड़ती है। हैश चेनिंग में, एक स्थिर भार संकेतक के साथ एक हैश तालिका में, एक चेन का औसत आकार स्थिर होता है, परंतु इसके अलावा उच्च संभावना के साथ सभी चेनों का आकार {{math|''O''(log ''n'' / log log ''n'')}}, होता है, यहाँ n हैश किए गए आइटमों की संख्या है। यह चेन का आकार इतना छोटा होता है कि एक फ्यूजन ट्री इसके अंदर खोज और अद्यतन को स्थायी समय में संभाल सकती है। इस प्रकार, डेटा संरचना में सभी कार्यों का समय संभावनानुसार स्थिर होता है। और अधिक सटीकता से कहें तो, इस डेटा संरचना के साथ, प्रत्येक इंवर्स [[अर्ध-बहुपद समय]]  संभावना {{math|1=''p''(''n'') = exp((log ''n'')<sup>''O''(1)</sup>)}} के लिए, एक स्थिर{{mvar|C}} ऐसा होता है जिससे यह संभावना होती है कि किसी भी कार्य का समय {{mvar|C}} से अधिक होने की संभावना n पर कम से कम {{math|''p''(''n'')}} होती है।<ref>{{citation
फ्यूजन ट्रीज का [[हैश तालिका]]ओं  के एक अनुप्रयोग को विल्लार्ड द्वारा दिया गया था, जो एक डेटा संरचना का वर्णन करते हैं जो हैश चेनिंग के साथ एक बाह्य स्तर हैश तालिका को जोड़ती है। हैश चेनिंग में, एक स्थिर भार संकेतक के साथ एक हैश तालिका में, एक चेन का औसत आकार स्थिर होता है, परंतु इसके अलावा उच्च संभावना के साथ सभी चेनों का आकार {{math|''O''(log ''n'' / log log ''n'')}}, होता है, यहाँ n हैश किए गए आइटमों की संख्या है। यह चेन का आकार इतना छोटा होता है कि एक फ्यूजन ट्री इसके अंदर खोज और अद्यतन को स्थायी समय में संभाल सकती है। इस प्रकार, डेटा संरचना में सभी कार्यों का समय संभावनानुसार स्थिर होता है। और अधिक सटीकता से कहें तो, इस डेटा संरचना के साथ, प्रत्येक इंवर्स [[अर्ध-बहुपद समय]]  संभावना {{math|1=''p''(''n'') = exp((log ''n'')<sup>''O''(1)</sup>)}} के लिए, एक स्थिर{{mvar|C}} ऐसा होता है जिससे यह संभावना होती है कि किसी भी कार्य का समय {{mvar|C}} से अधिक होने की संभावना n पर न्यूनतम से न्यूनतम {{math|''p''(''n'')}} होती है।<ref>{{citation
  | last = Willard | first = Dan E. | authorlink = Dan Willard
  | last = Willard | first = Dan E. | authorlink = Dan Willard
  | doi = 10.1137/S0097539797322425
  | doi = 10.1137/S0097539797322425

Revision as of 01:13, 10 July 2023


संगणक विज्ञान में, फ्यूजन ट्री एक प्रकार की ट्री डेटा संरचना है जो एक विस्तृत यूनिवर्स पर w-बिट पूर्णांकों पर एक सहयोगी संख्या को लागू करती है, जहां प्रत्येक इनपुट पूर्णांक का आकार 2w से न्यूनतम होता है और अवांछित होता है. n की-मान तथा-मान जोड़ी के संग्रह पर आपरेशन करने पर, यह O(n) अंतरिक्ष का उपयोग करती है और खोजों को O(logw n) समय में पूरा करती है, जो पारंपरिक आपस्तित्व वाले स्व-संतुलन द्विआधारी खोज ट्री से असंतुलित होता है, और w के बड़े मानों के लिए वैन एम्डे बोस ट्री से भी बेहतर होता है. यह तीव्रता इसलिए प्राप्त करता है क्योंकि इसमें मशीन शब्द पर कुछ स्थायी समय आपरेशन का उपयोग किया जा सकता है. फ्यूजन ट्री की खोज में O(logw n) समय के कारण, यह 1990 में माइकल फ्रेडमैन और डैन विलार्ड द्वारा आविष्कृत की गई थी।[1]

फ्रेडमैन और विलार्ड के मूल 1990 पेपर के उपरांत से कई प्रगति हुई है।[2] 1999 में यह दर्शाया गया कि गणना के एक प्रारूप के तहत फ़्यूज़न ट्री को कैसे कार्यान्वित किया जाए जिसमें एल्गोरिदम के सभी अंतर्निहित संचालन AC0 से संबंधित हों, सर्किट जटिलता का एक प्रारूप जो जोड़ और बिटवाइज़ बूलियन संचालन की अनुमति देता है परंतु मूल फ़्यूज़न ट्री एल्गोरिदम में उपयोग किए जाने वाले गुणन संचालन की अनुमति नहीं देता है। हैश तालिकाओं का उपयोग करके फ़्यूज़न ट्री का एक गतिशील संस्करण 1996 में प्रस्तावित किया गया था[3] जो मूल संरचना के O(logw n) रनटाइम के अपेक्षानुसार समानता रखता था। घातीय ट्री का उपयोग करने वाला एक और गतिशील संस्करण 2007 में प्रस्तावित किया गया था[4] जो प्रत्येक आपरेशन के लिए O(logw n + log log n) के खराब तरह का रनटाइम प्रदान करता है। अंतिम रूप में, दर्शाया गया कि गतिशील फ्यूजन ट्री संज्ञानात्मक ढंग से प्रत्येक आपरेशन को O(logw n)न्यूनतम समय में कर सकता है।[5]

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

यह कैसे कार्य करता है

फ्यूजन ट्री मूल रूप से w1/5 शाखा कारक वाली b-ट्री होती है, जिससे इसकी ऊचाई O(logw n) होती है। अद्यतन और पूछताछ के लिए वांछित रनटाइम प्राप्त करने के लिए, फ्यूजन ट्री को एक बार में w1/5 कुंजीयों को खोजने की क्षमता होनी चाहिए। इसका कारण है कि कुंजीयों को "रेखाचित्रों" करके ऐसे संपीड़ित किया जाता है कि एक मशीन सभी शब्द में समायोजित हो सकें, जिससे पुनर्मिलन संघों को समानांतर में करने में सक्षमता होती है। इसलिए, रेखाचित्रोंिंग, समानांतर तुलना और सबसे महत्वपूर्ण बिट सूचक स्थानक के आधार पर की जाने वाली गणनाओं का एक श्रृंखला, उचित समाधान तक पहुंचने में सहायता करती है।

रेखाचित्र

रेखाचित्र वह विधि होती है जिसके द्वारा प्रत्येक w-बिट कुंजी एक नोड पर युक्त k कुंजियाँ केवल k − 1 बिट्स में संपीड़ित होती हैं।. प्रत्येक कुंजी x को w ऊंचाई के पूर्ण बाइनरी ट्री में एक पथ के रूप में सोचा जा सकता है जो x जड़ से प्रारंभ होकर पत्ती पर समाप्त होता है। यह पथ सामान्यतः इस प्रकार प्रसंस्करण किया जा सकता है कि, सभी बिट स्कैन किए जाने तक, iवें बिट 0 है तो वाम बच्चे की खोज की जाएगी, और iवें बिट 1 है तो दायीं बच्चे की खोज की जाएगी। दो पथों को पृथक करने के लिए, उनके शाखा बिंदु को देखना पर्याप्त है।क्योंकि अधिकतम k कुंजियाँ होती हैं, इसलिए k-1 से अधिक शाखा बिंदु नहीं होंगे, जिसका अर्थ है कि किसी कुंजी की पहचान करने के लिए k-1 बिट्स से अधिक की आवश्यकता नहीं है। और इसलिए, किसी भी रेखाचित्रों में k-1 बिट्स से अधिक नहीं होगा।

रेखाचित्रों फलन का विज़ुअलाइज़ेशन।

रेखाचित्रों फलन का एक महत्वपूर्ण गुण यह है कि यह कुंजियों के क्रम को संरक्षित करता है। वह है, sketch(x) < sketch(y) किन्हीं दो कुंजियों के लिए x < y. तो, चाबियों की पूरी श्रृंखला के लिए, रेखाचित्रों(x0)<sketch(x1)<...<sketch(xk-1) क्योंकि यदि बाइनरी ट्री जैसे पथ का अनुसरण किया जाता है तो नोड्स को इस तरह से ऑर्डर किया जाएगा कि x0<x1<...<xk-1.

रेखाचित्रों फलन की एक महत्वपूर्ण गुणधर्म है कि यह कुंजीयों का क्रमबद्धता को संरक्षित रखता है। अर्थात, किसी भी दो कुंजीयों x < y के लिए sketch(x) < sketch(y) होगा। इसलिए, पूरे कुंजी दायरे के लिए, sketch(x0) < sketch(x1) < ... < sketch(xk-1) होगा, क्योंकि यदि बाइनरी ट्री के समान पथ का पालन किया जाता है, तो नोड ऐसी व्यवस्था में क्रमबद्ध x0 < x1 < ... < xk-1 होंगे।

रेखाचित्रों का अनुमान लगाना

यदि रेखाचित्रों बिटों की स्थानों को b1 < b2 < ··· < br माना जाता है, तो कुंजी xw-1···x1x0 का रेखाचित्रों r-बिट पूर्णांक होता है।

.

केवल सी प्रोग्रामिंग भाषा के जैसे मानक शब्द आपरेशन का उपयोग करके, एक कुंजी का पूर्ण रेखाचित्रों सीधे समय में निर्धारित करना कठिन होता है। इसके अतिरिक्त, रेखाचित्रों बिट्स को बिटवाइज़ AND और गुणाकार का उपयोग करके, अधिकतम r4 आकार के रेंज में पैक किया जा सकता है, जिसे अनुमानित रेखाचित्रों कहा जाता है, जिसमें सभी महत्वपूर्ण बिट होते हैं परंतु इसके साथ कुछ अतिरिक्त खराब बिट भी होते हैं जो एक पूर्वानुमानित पैटर्न में विस्तृत होते हैं। बिटवाइज़ AND आपरेशन गैर-रेखाचित्रों बिट्स को कुंजी से हटाने के लिए मास्क के रूप में कार्य करता है, जबकि गुणाकार रेखाचित्रों बिट्स को एक छोटी सीमा में स्थानांतरित करता है। "पूर्ण" रेखाचित्रों की तरह, अनुमानित रेखाचित्रों भी कुंजीयों का क्रमबद्धता संरक्षित करता है और इसका अर्थ है कि sketch(x0) < sketch(x1) < ... < sketch(xk-1) होता है।

सही गुणन स्थिरांक निर्धारित करने के लिए कुछ पूर्वप्रक्रिया की आवश्यकता होती है। जहा स्थान bi में प्रत्येक रेखाचित्रों बिट में bi + mi m = से गुणा करके 2mi. स्थानांतरित हो जायेंगे वहा अनुमानित रेखाचित्रों को कार्यान्वित करने के लिए, निम्नलिखित तीन गुण होने चाहिए:

  1. bi + mj सभी जोड़ियों (i, j) के लिए पृथक-पृथक होते हैं। इससे यह सुनिश्चित हो जाएगा कि रेखाचित्रों बिट्स गुणन द्वारा दूषित नहीं होता हैं।
  2. bi + mi i का सख्ती से बढ़ता हुआ फलन है। अर्थात्, रेखाचित्रों बिट्स का क्रम x'.m में भी संरक्षित रहता है।
  3. (br + mr) - (b1 + m1) ≤ r4. अर्थात्, रेखाचित्रों बिट्स को अधिकतम r4 आकार की श्रेणी में पैक किया जाता है, जहां r ≤ O(w1/5).होता हैं।

एक आगमनात्मक तर्क दिखाता है कि कैसे mi निर्माण किया जा सकता है. m1 = w − b1. मान लीजिए कि 1 < t ≤ r और वह m1, m2... mt-1 पहले ही चुना जा चुका है. पुनः सबसे छोटा पूर्णांक mt चुनें इस प्रकार कि दोनों गुण (1) और (2) संतुष्ट हैं। संपत्ति (1) के लिए mt ≠ bi − bj + ml सभी 1 ≤ i, j ≤ r और 1 ≤ l ≤ t-1 के लिए आवश्यक है । इस प्रकार, tr2 ≤ r3 से न्यूनतम हैं मूल्य जो mt बचना चाहिए. क्योंकी mt न्यूनतम (bt + mt) ≤ (bt-1 + mt-1) + r3. होना चाहिए, इसका तात्पर्य विशेषता (3) से है।

इस प्रकार अनुमानित रेखाचित्र की गणना इस प्रकार की जाती है:

  1. रेखाचित्रों बिट्स को छोड़कर बाकी सभी को x और