क्या संभाव्य खोज डेटा संरचनाएँ उपयोगी हैं?


9

एक SkipList वही प्रदान करता है हे(लॉगn)लाभ के लिए एक संतुलित पेड़ के रूप में खोज के लिए सीमा जो कि पुनर्संतुलन आवश्यक नहीं है। चूंकि SkipList का निर्माण यादृच्छिक सिक्का फ्लिप्स का उपयोग करके किया जाता है, इसलिए ये सीमाएं तभी तक चलती हैं जब तक कि SkipList की संरचना पर्याप्त रूप से "संतुलित" हो। विशेष रूप से, संभावना के साथ1/nसी कुछ निरंतर के लिए सी>0एक तत्व डालने के बाद संतुलित संरचना खो सकती है।

मान लीजिए कि मैं वेब एप्लिकेशन में स्टोरेज बैकएंड के रूप में एक स्किप सूची का उपयोग करना चाहता हूं जो संभावित रूप से हमेशा के लिए चलता है। इसलिए कुछ बहुपद आपरेशनों के बाद, SkipList की संतुलित संरचना खो जाने की संभावना है।

क्या मेरा तर्क सही है? क्या ऐसी संभाव्य खोज / संग्रहण डेटा संरचनाओं में व्यावहारिक अनुप्रयोग हैं और यदि हां, तो उपरोक्त समस्या से कैसे बचा जा सकता है?

संपादित करें: मुझे पता है कि SkipList के निर्धारक संस्करण हैं, जो कि (क्लासिक) यादृच्छिक SkipList की तुलना में लागू करने के लिए अधिक जटिल हैं।


1
आपके पास क्या विशिष्ट आवेदन है?
प्रतीक देवघर

जवाबों:


6

मुझे नहीं लगता कि 'संतुलन' खोने की बहुपद संभावना है। जब आप एक स्किप सूची में एक तत्व सम्मिलित करते हैं, तो आप सिक्कों के एक टॉवर का निर्माण एक सिक्का उछालकर करते हैं जब तक कि यह सिर ऊपर नहीं आता है।

जैसे ही आप शीर्ष पर पहुंचते हैं, आपके पास कम और कम तत्वों के साथ परतें होती हैं। चूंकि एक टावर की ऊंचाई है संभावना के साथ 2-, ऊंचाई पर एक तत्व है से कम की संभावना (संघ बाध्य) के साथ n/2। इसलिए स्तर पर एक तत्व होनेसीलॉगn से भी कम है 1/nसी। ऊँचाई के टावरω(लॉगn)सबपोलीनोमियल संभावना है। चलो अधिकतम स्तर हो, तो हमारे पास है

[]=Σ1पीआर()लॉग(n)+Σलॉग(n)n/2=लॉग(n)+2।

इसके अलावा, स्तर पर वहां n/2 बहुत अधिक संभावना वाले तत्व, क्योंकि यह योग है n स्वतंत्र यादृच्छिक चर और आप चेरनोव के बाउंड का उपयोग कर सकते हैं।

चूंकि आप यह भी दिखा सकते हैं कि आप केवल प्रति स्तर की एक निरंतर संख्या (बहुत अधिक संभावना के साथ!) करते हैं, खोज लागत लघुगणक है।

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

जहाँ तक मुझे पता है, स्किप लिस्ट बहुत व्यावहारिक रुचि के हैं, क्योंकि स्पष्ट लाभ के साथ लॉक-मुक्त खोज संरचनाओं के रूप में उन्हें लागू करना अपेक्षाकृत आसान है। दूसरी ओर बी-पेड़ समवर्ती पहुंच के तहत प्रदर्शन करने के लिए मुश्किल हैं।


बाइनरी सर्च ट्री की अपेक्षित गहराई भी लॉगरिदमिक है; यहाँ स्थिति बेहतर क्यों है? (इसके अलावा, आप यादृच्छिक क्रमपरिवर्तन मान, सही?)
राफेल

2
खोज पेड़ों में, गहराई डेटा पर निर्भर करती है। यदि आप इसे यादृच्छिक संख्या में फीड करते हैं, तो इसमें लॉगरिदमिक गहराई बहुत अधिक संभावना है। हालांकि, व्यवहार में, डेटा यादृच्छिक नहीं है। छोड़ें सूचियां डेटा को यादृच्छिकता के स्रोत के रूप में उपयोग नहीं करती हैं, इसलिए यह समस्या मौजूद नहीं है।
एड्रिएन

1

छोड़ें सूचियों में अन्य गुण होते हैं जो उन्हें उन स्थितियों में आकर्षक बना सकते हैं जहां सिर्फ डालने / देखने / हटाने के अलावा अन्य कार्यों का उपयोग किया जाता है।

उदाहरण के लिए, सूचियों को छोड़ दें हे(1)अपेक्षित समय स्थानीय अपडेट जब संशोधन स्थान ज्ञात हो। इसमें निश्चित रूप से संभव हैहे(1) कुछ संतुलित बाइनरी सर्च ट्री के साथ सबसे खराब समय, लेकिन उन संरचनाओं को लागू करने के लिए बहुत जटिल होना पड़ता है।

इसके अतिरिक्त, समवर्ती तुलना-आधारित खोज संरचनाओं को कार्यान्वित करने के लिए स्किप लिस्ट एक लोकप्रिय तरीका रहा है। ऐतिहासिक रूप से, संतुलित खोज पेड़ों ने उच्च समवर्ती विवाद के तहत प्रदर्शन नहीं किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.