स्किप लिस्ट कैसे काम करती है?


14

होमवर्क असाइनमेंट के लिए, मुझे यह समझने की आवश्यकता है कि एक स्किप सूची कैसे काम करती है।

मैं 2 साल से अधिक समय से प्रोग्रामिंग कर रहा हूं (मुझे पता है कि वास्तविकता में यह लंबे समय तक नहीं है), और मैंने कभी भी एक स्किप सूची के बारे में नहीं सुना है।

मैंने उन सभी गाइडों को देखा है जो मुझे मिल सकते हैं, और मैं अभी भी केवल मुश्किल से समझता हूं कि वे कैसे काम करते हैं। मैंने एक उदाहरण कार्यान्वयन के लिए कोड समीक्षा की भी खोज की, और केवल एक समीक्षा मिली; और यह एक पूर्ण कार्यान्वयन भी नहीं है। मैंने पाठ्यक्रम द्वारा आपूर्ति किए गए नमूना कार्यान्वयन पर ध्यान दिया, और यह बिल्कुल अत्याचारी है। उचित तरीकों की कमी, और एकल-अक्षर चर नामों के बीच, मुझे कोई सुराग नहीं है कि यह कैसे काम करता है।

स्किप लिस्ट कैसे काम करती है? क्या अधिक उन्नत डेटा संरचनाओं को समझने के लिए एक स्किप सूची का ज्ञान आवश्यक है?



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

@Snowman धन्यवाद। मैंने केवल यह जोड़ा कि "अपने शिक्षक से पूछें" जैसी टिप्पणियों को रोकने के लिए। मैं अगली बार उस बात को ध्यान में रखूंगा। और आपने एक संपादन जोड़ा जो प्रश्न बदलता है। अंत में, मैं लोगों को यह समझाने के लिए नहीं कह रहा हूं कि वे कैसे काम करते हैं क्योंकि मैं यह मान रहा हूं कि यह ऑफटॉपिक है (हालांकि मैं एक अच्छी व्याख्या के खिलाफ नहीं होगा)। मैं सिर्फ यह जानना चाहता हूं कि वे सीखना कितना महत्वपूर्ण हैं।
कारजेनिकट

1
बताया गया हो कि वे काम वास्तव में है @Carcigenicate अधिक अगर तुम उन्हें असली दुनिया में देखेंगे पूछ से विषय पर। हम केवल अनुमान लगा सकते हैं कि आप क्या कर रहे हैं और विभिन्न क्षेत्र। यह पूछने पर कि क्या हम उन्हें वास्तविक दुनिया में देखते हैं, "हां, मैं उन्हें देखता हूं और उनका उपयोग करता हूं" या "नहीं, कभी नहीं सुना" - जो अन्य लोगों के पढ़ने के लिए अच्छे या उपयोगी उत्तर के लिए नहीं बनाते हैं।

जवाबों:


29

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

स्किप की सूची आज बहुत अधिक सामान्य है जिसमें उपलब्ध मेमोरी और कंसिस्टेंसी एक मुद्दा है (आपको एवीएल ट्री के साथ सब कुछ की तुलना में एक स्किप सूची में एक लेखक के रूप में कार्य करते समय बहुत अधिक लॉक करने की आवश्यकता नहीं है)।

सच कहूँ तो, यह अब मेरा पसंदीदा डेटा स्ट्रक्चर है कि इसकी कुछ चीज़ों के बारे में मैं आसानी से बता सकता हूँ कि यह कैसे काम करता है और यह कहाँ उपयोग करने के लिए फायदेमंद या नुकसानदेह होगा।

आपको स्क्रैच से एक लिखने की आवश्यकता नहीं है (जब तक कि आप इसे साक्षात्कार प्रश्न के रूप में नहीं लेते हैं - लेकिन तब आपको एवीएल पेड़ को लागू करने की संभावना होगी)।

आप कर रहे हैं की जरूरत के लिए जा रहा समझने के लिए कि आप एक का चयन करना चाहते ConcurrentSkipListMapबल्कि एक से जावा में HashMapया TreeMapया अन्य नक्शा कार्यान्वयन के किसी भी।


यह समझने के लिए कि यह कैसे काम करता है, आपको यह समझने की आवश्यकता है कि बाइनरी ट्री कैसे काम करता है। रुको, मुझे इसमें संशोधन करने दीजिए। आपको यह समझने की आवश्यकता है कि संतुलित बाइनरी ट्री कैसे काम करता है। एक द्विआधारी पेड़ को संतुलित किए बिना, आपको इसकी खोज के साथ कोई वास्तविक लाभ नहीं मिलता है।

आओ हम कहते हैं कि हमें यह पेड़ मिला है:

एक बाइनरी ट्री

और हम इसमें एक '8' डालें। अब हमें मिल गया है:

एक असंतुलित बाइनरी ट्री

और वह संतुलित नहीं है। तो, हम चलते हैं और कुछ कार्यान्वयन के माध्यम से इसे संतुलित करने का जादू करते हैं ...

संतुलित वृक्ष

और आपको फिर से एक संतुलित पेड़ मिला है। लेकिन वह बहुत जादू था मैंने अपना हाथ लहराया।

एक सूची छोड़ें देता है।

आदर्श स्किप सूची

यह एक आदर्श के रूप में होता है। कुछ हैं, लेकिन यह संतुलित बाइनरी ट्री प्रकृति को दर्शाता है कि स्किपिस्ट आदर्श सन्निकट है।

अब, हम वहां 6 डालना चाहते हैं। यह एक लिंक्ड सूची की तरह इसे सम्मिलित कर रहा है। हालांकि, हम शीर्ष पर शुरू करते हैं और नीचे जाते हैं। 5. शीर्ष अंक 6> 5 है? हाँ। ठीक है, अब शीर्ष अंक अंत तक, इसलिए हम स्टैक नीचे जाते हैं (हम 5 पर हैं)। अगला है 7. क्या 6> 7? नहीं। इसलिए हम एक स्तर नीचे जाते हैं और हम आधार स्तर पर होते हैं इसलिए हम 6 को 5 के दाईं ओर सम्मिलित करते हैं।

हम एक सिक्का फ्लिप करते हैं - हम जो सिर बनाते हैं, हम टिक जाते हैं। पूंछ। ज्यादा कुछ करने की जरूरत नहीं है।

सूची सम्मिलित करने के बाद छोड़ें

अब वह 8 डालें। 8> 5? हां। > 7? हां। और अब हम तीर और स्टैक का अनुसरण करने के बाद फिर से निचले स्तर पर हैं और हम 8> 11 का परीक्षण करते हैं? नहीं। इसलिए हम 7 के दाईं ओर 8 डालें।

हम एक सिक्का फ्लिप करते हैं - हम जो सिर बनाते हैं, हम टिक जाते हैं। पूंछ। ज्यादा कुछ करने की जरूरत नहीं है।

एक और डालने के बाद सूची छोड़ें

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

अब एक इन्सर्ट करते हैं। 10. मैं सभी तुलनाओं से बचूँगा।

हम एक सिक्का फ्लिप करते हैं - हम जो सिर बनाते हैं, हम टिक जाते हैं। प्रमुखों! और इसे फिर से फ्लिप करें, फिर से हेड! इसे फिर से फ्लिप करें, ठीक है, एक पूंछ है। आधार से जुड़ी सूची से दो स्तर ऊपर।

एक और इंसर्ट के बाद सूची छोड़ें

यहाँ लाभ यह है कि अब अगर हम 12 को सम्मिलित करने जा रहे हैं, तो हम उन सभी अन्य तुलनाओं को किए बिना 5 से 10 तक छोड़ सकते हैं । हम स्किप सूची के साथ उन पर छोड़ सकते हैं। और हमें संतुलित पेड़ के बारे में चिंता करने की ज़रूरत नहीं है - स्टैकिंग की संभावना प्रकृति हमारे लिए है।

यह इतना उपयोगी क्यों है? क्योंकि 10 डालने पर मैं पूरे ढांचे के बजाय 5 और 7 और 8 बिंदुओं पर लिखकर ताला लगा सकता हूं। और जब मैं ऐसा कर रहा हूं, तब भी पाठक असंगत अवस्था में न होते हुए भी स्किप सूची से गुजर सकते हैं। समवर्ती उपयोग के लिए, इसके तेजी से लॉक नहीं होना चाहिए। नीचे की परत पर पुनरावृत्ति के लिए, एक पेड़ की तुलना में इसकी तेजी (पेड़ नेविगेशन के लिए बीएफएस और डीएफएस एल्गोरिदम की खुशियाँ - आपको उनके बारे में चिंता करने की ज़रूरत नहीं है)।

क्या आप इसका सामना करेंगे? आप शायद इसे स्थानों में उपयोग में देखेंगे। और फिर आपको पता चल जाएगा कि लेखक ने संरचना के लिए या उसके बजाय उस कार्यान्वयन को क्यों चुना ।TreeMapHashMap

इसका बहुत कुछ मेरे ब्लॉग पोस्ट: द स्किप लिस्ट से उधार लिया गया है


धन्यवाद। यह सामान्य कार्यान्वयन भी नहीं है जिसे मैं नहीं समझता; मुझे BST से उनकी समानता है। मैंने यह सोचने की कोशिश की कि मैं इसे कैसे लागू करूंगा, और सभी बिंदुओं / संदर्भों के प्रबंधन के विचार ने मुझे लगातार भ्रमित किया। हो सकता है कि मैं खुद को बहुत निराश करूं। धन्यवाद। मैं कोशिश करूँगा कि कल को आपके उत्तर को एक प्रारंभिक बिंदु के रूप में उपयोग करके उठाऊँ।
कारजेनिकेट

2
@Carcigenicate आपको मूल पेपर भी मिल सकता है जो उन्हें उपयोगी बनाता है - छोड़ें सूची: संतुलित पेड़ों के लिए एक संभावित विकल्प । यह अधिकांश अकादमिक पत्रों की तुलना में एक समझने योग्य पेपर है जो लोगों के सिर पर जा सकता है। तालिका 2 इसलिए आप उन्हें उपयोग में देखेंगे। सम्मिलन या विलोपन के लिए उस समय कारक को अन्य समाधानों की जटिलता जोड़ा जाता है ।

2
एक लिंक की गई सूची "बस एक पतित बहुत असंतुलित पेड़ है"। एक स्किप सूची एक सूची के शीर्ष पर आंशिक रूप से कुछ प्रकार के पेड़ की संरचना को वापस जोड़ने की तरह है। व्यक्तिगत रूप से, मैं लगातार डेटा संरचनाओं का एक बड़ा प्रशंसक हूं, और पेड़ों को उस विशेष संदर्भ में तर्क करना आसान लगता है। मुझे नहीं लगता कि यह एक संयोग है कि क्लोजर, स्काला, एट अल। लगता है कि किसी तरह के बैगवेल शैली के हैश को उनके मूल डेटा संरचना के रूप में आज़माया जा रहा है। (फिल बागवेल को स्केल २.० के लिए स्काला के संग्रह ढांचे के नए स्वरूप में शामिल किया गया था।) स्किप सूची अभी भी अच्छी हैं, हालांकि।
जोर्ग डब्ल्यू मित्तग

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