दिलचस्प पोस्ट
इनलाइन ब्लॉक क्यों इस div को ऊंचाई प्राप्त करने के लिए है? डेल्फी कार्यक्रम में .NET रनटाइम होस्टिंग मैं एक नष्ट लाइन को कैसे "जीआईटी दोष" कर सकता हूं? बराबर के बीच अंतर क्या है ?, eql ?, ===, और ==? लिनक्स पर सी + + डायनेमिक शेयर्ड लाइब्रेरी UIWebView के अंदर जावास्क्रिप्ट डिबग करने के कुछ तरीके क्या हैं? अजगर-एफ़टीपी निर्देशिका में सभी फाइलों को डाउनलोड करते हैं .NET के HttpWebRequest / Response के साथ एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करना फ्लक्स ऐप में एजेक्स अनुरोध को कहाँ बनाया जाना चाहिए? न्यूएर फ्लेक्सबॉक्स एपीआई का उपयोग कर फ्लेक्सबॉक्स और ऊर्ध्वाधर स्क्रॉल एक पूर्ण-ऊंचाई वाले ऐप में एक UIScrollView के साथ दो उंगलियों के साथ स्क्रॉल करना इंसटर्स को फ़्लोट्स के रूप में व्यक्त करने से जीएसएल को कैसे रोकें? जावा से एकाधिक एसक्यूएल स्टेटमेंट कैसे निष्पादित करें I ऑब्जेक्ट्स का एक संग्रह छंटनी एकाधिक खोज स्ट्रिंग के साथ MySQL find_in_set

सूची बनाम बाइनरी ट्री छोड़ें

मैं हाल ही में एक छोड़ सूची के रूप में जाना डेटा संरचना भर में आया था। वे द्विआधारी खोज पेड़ के समान व्यवहार करते हैं … मेरा सवाल है – आप द्विआधारी खोज पेड़ पर एक छोड़ी सूची का उपयोग क्यों करना चाहते हैं?

Solutions Collecting From Web of "सूची बनाम बाइनरी ट्री छोड़ें"

छोड़ें सूची समवर्ती अभिगम / संशोधन के लिए अधिक अनुकूल हैं हर्ब Sutter समवर्ती वातावरण में डेटा संरचना के बारे में एक लेख लिखा था इसमें अधिक गहराई से जानकारी है

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


जॉन हैर्रप्स टिप्पणियों से अपडेट

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

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

अनुभाग 8.2 में वे कई समवर्ती वृक्ष कार्यान्वयन के प्रदर्शन की तुलना करते हैं। मैं उनके निष्कर्षों का संक्षेप करेंगे यह पीडीएफ डाउनलोड करने के लिए इसके लायक है क्योंकि इसमें 50, 53 और 54 पृष्ठों पर कुछ बहुत ही जानकारीपूर्ण ग्राफ हैं।

  • लॉकिंग स्किप सूचियां बहुत तेजी से हैं वे समवर्ती पहुंच की संख्या के साथ अविश्वसनीय रूप से अच्छी तरह से स्केल करते हैं यह वही है जो विशेष रूप से छोड़ने वाली सूची बनाता है, अन्य लॉक आधारित डेटा संरचना दबाव में कर्कश होते हैं।
  • लॉक-फ्री स्किप सूचियां छोड़ने वाली सूची को लॉक करने से लगातार तेज होती हैं लेकिन केवल मुश्किलें ही होती हैं।
  • ट्रांसेक्शनल स्किप सूचियां लॉकिंग और गैर लॉकिंग संस्करणों की तुलना में लगातार 2-3 गुना धीमी होती हैं।
  • समवर्ती पहुंच के तहत लाल-काले पेड़ों को ताला लगा देना । उनके प्रदर्शन प्रत्येक नए समवर्ती उपयोगकर्ता के साथ रैखिक रूप से घटता है। दो ज्ञात लॉकिंग लाल-काली वृक्षों के कार्यान्वयन में, एक अनिवार्य रूप से पेड़ के पुनर्व्यवस्था के दौरान एक वैश्विक ताला है। अन्य फैंसी (और जटिल) लॉक बढ़ने का उपयोग करता है, लेकिन फिर भी वैश्विक लॉक संस्करण को प्रदर्शित नहीं करता है।
  • ताला रहित लाल-काले पेड़ मौजूद नहीं हैं (अद्यतन नहीं देखें)।
  • ट्रांसेक्शन वाले लाल-काली पेड़ ट्रांजैक्शनल स्कीप-सूचियों के साथ तुलनीय हैं। यह बहुत ही आश्चर्य की बात थी और बहुत आशाजनक था ट्रांजैक्शनल मेमोरी, हालांकि धीमी गति से लिखना आसान है। यह त्वरित खोज जितना आसान हो सकता है और गैर-समवर्ती संस्करण को बदल सकता है।

अद्यतन करें
यहां तालाबंद पेड़ के बारे में कागज है: ताला रहित लाल-काले पेड़ सीएएस का उपयोग करना ।
मैंने इसे गहराई से नहीं देखा है, लेकिन सतह पर यह ठोस लगता है

सबसे पहले, आप एक यादृच्छिक डेटा संरचना के साथ काफी तुलना नहीं कर सकते हैं जो आपको सबसे खराब स्थिति की गारंटी देता है

एक छोड़ सूची बेतरतीब ढंग से संतुलित द्विआधारी खोज वृक्ष (आरबीएसटी) के बराबर है, जिसे डीन और जोन्स ' डिस्कवरी दी द्विअली ऑफ़ स्पीप लिस्ट्स एंड बाइनरी सर्च ट्रीज' में अधिक विस्तार से समझाया गया है।

दूसरी तरफ, आपके पास डिप्टीनेस्टिकिस्ट स्कीप सूचियां भी हो सकती हैं जो खराब केस प्रदर्शन की गारंटी देती है, cf. मुनरो एट अल

ऊपर कुछ दावा क्या है, आप बाइनरी खोज पेड़ (बीएसटी) के कार्यान्वयन कर सकते हैं जो समवर्ती प्रोग्रामिंग में अच्छी तरह से काम करते हैं। संगामिति-केंद्रित बीएसटी के साथ एक संभावित समस्या यह है कि आप आसानी से संतुलन के बारे में गारंटियां प्राप्त नहीं कर सकते हैं क्योंकि आप लाल-काले (आरबी) वृक्ष से होते हैं (लेकिन "मानक", अर्थात् यादृच्छिक, छोड़ें सूची आपको ये गारंटी भी नहीं देते हैं।) हर समय संतुलन बनाए रखने और अच्छी (और आसान कार्यक्रम) समवर्ती पहुंच के बीच एक व्यापारिक बंद है, इसलिए सुगम आरबी पेड़ों को आमतौर पर इस्तेमाल किया जाता है। जब अच्छा संगामिति वांछित है विश्राम में पेड़ को फिर से संतुलन नहीं किया जाता है। कुछ हद तक दिनांकित (1 99 8) सर्वेक्षण के लिए हांक के '' परफॉर्मेंस ऑफ समवर्ती रेड-ब्लैक ट्री एल्गोरिदम '' [पीएजीजी] देखें ।

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

128 थ्रेड्स के साथ, हमारा एल्गोरिथ्म जावा के गैर-अवरुद्ध स्कीप्लास्ट को 13% से 156% तक बढ़ाता है, ब्रॉन्सन एट अल के लॉक-आधारित एवीएल ट्री 63% से 224% तक, और आरबीटी जो 13 से 134 गुना तक सॉफ्टवेयर लेनदेन मेमरी (एसटीएम) का उपयोग करता है

जोड़ने के लिए संपादित करें: पग की लॉक-आधारित स्पीप सूची, जिसे फ्रेजर और हैरिस (2007) में "बराबरी के साथ समवर्ती प्रोग्रामिंग" में बेंचमार्क किया गया था, जैसे कि अपने स्वयं के लॉक-फ्री संस्करण के करीब आने पर (शीर्ष बिंदु पर एक बिंदु स्पष्ट रूप से आग्रह किया गया) भी अच्छा समवर्ती संचालन के लिए tweaked है, cf. पघ की " चैन की सूची के अनुवर्ती रखरखाव" , हालांकि एक हद तक हल्के तरीके से फिर भी एक नया / 200 9 पेपर " हर्लिहि एट अल द्वारा एक सरल आशावादी स्लिप-लिस्ट एल्गोरिदम" , जो समवर्ती छोड़ सूचियों के लॉक-आधारित कार्यान्वयन की तुलना में एक सरल रूप से सरल (पघ के) प्रस्ताव का प्रस्ताव करता है, ने पुग की आलोचना की, उनके लिए। इसे छोड़कर (शायद बहुत पांडित्य) गुस्सा, हर्लीइहि एट अल दिखाते हैं कि एक छोड़ा सूची का उनका आसान लॉक-आधारित कार्यान्वयन वास्तव में जेडीके के लॉक-फ्री कार्यान्वयन के साथ-साथ, उच्च विवाद (50% सम्मिलित करता है, 50% हटाए गए और 0% लुकअप) के लिए पैमाने पर विफल रहता है … जो फ्रेजर और हैरिस ने बिल्कुल परीक्षा नहीं की; फ्रेजर और हैरिस ने केवल 75% लुकअप, 12.5% ​​आवेषण और 12.5% ​​हटाए गए परीक्षण (~ 500 के तत्वों के साथ छोड़ें सूची पर) का परीक्षण किया। हेर्लिहि एट अल के सरल कार्यान्वयन भी कम विवाद के मामले में जेडीके से ताला मुक्त समाधान के करीब आता है (70% लुकअप, 20% आवेषण, 10% हटाए गए); वे वास्तव में इस परिदृश्य के लिए लॉक-फ्री समाधान को हरा देते हैं जब उन्होंने अपनी छोड़ी सूची को काफी बड़ा बना दिया है, अर्थात 200K से 2 एम तत्वों तक जा रहा है, ताकि किसी ताला पर विवाद की संभावना नगण्य हो। यह अच्छा होगा अगर हर्लिहि एट अल पग के सबूत पर अपने फांसी पर डाल दिया था और उसके कार्यान्वयन भी परीक्षण किया था, लेकिन अफसोस है कि वे ऐसा नहीं किया।

EDIT2: मैंने सभी मानकों का एक (2015 प्रकाशित) मातृभाषा पाया: ग्रामोली का " तुल्य तुल्यकालन के बारे में जानना चाहता था।" Synchrobench, समवर्ती एल्गोरिदम पर सिंक्रनाइज़ेशन के प्रभाव का आकलन करना " : यहाँ इस प्रश्न से संबंधित एक संक्षिप्त छवि है।

यहां छवि विवरण दर्ज करें

"एल्गो 4" ब्राउन एट अल के पूर्ववर्ती (पुराने, 2011 संस्करण) उपर्युक्त है। (मुझे नहीं पता कि 2014 संस्करण कितना बेहतर है या बुरा है)। "एल्गो .26" हेर्लिहिय का उपरोक्त उल्लेख किया गया है; जैसा कि आप देख सकते हैं कि अद्यतनों पर ट्रैश किए गए हैं, और यहां मूल CPU से सूर्य CPU की तुलना में यहां उपयोग किए जाने वाले इंटेल CPU पर बहुत बुरा है। "अल्गो .28" समवर्ती एसकिपलिस्टमैप जेडीके से है; यह ऐसा नहीं करता जितना कि किसी अन्य सीएएस आधारित छोड़ सूची लागूकरण की तुलना में उम्मीद की थी। उच्च विवाद के तहत विजेता "अलागो 2." लॉक-आधारित एल्गोरिदम (!!) सि्रेन एट अल द्वारा वर्णित हैं "ए कॉन्टैक्शन-फ्रेंडली बाइनरी सर्च ट्री" और "अल्गो .30" में "घूर्णन स्कीप्लिस्ट" है, "मैट्रिकोर के लिए लॉगरिदमिक डेटा स्ट्रक्चर" । "अल्गो .29" "कोई हॉट स्पॉट गैर-अवरुद्ध छोड़ने की सूची" है । सलाह दीजिए कि ग्रामोली इन सभी तीन विजेता-एल्गोरिथम पत्रों के लिए सह-लेखक है। "एल्गो .27" फ्रेजर की छोड़ी सूची के सी ++ कार्यान्वयन है।

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

एक पेड़ को डिजाइन करने में कठिनाई है जो ताला रहित है, परमाणु रूप से कई संदर्भों को संशोधित करने की कठिनाई से उत्पन्न होती है छोड़ें सूचियों में उत्तराधिकारी संकेतक के माध्यम से एक दूसरे से जुड़े टॉवर शामिल होते हैं और जिसमें प्रत्येक नोड उसके नीचे तुरंत नोड की ओर इंगित करता है। वे अक्सर पेड़ों के समान माना जाता है क्योंकि प्रत्येक नोड के उत्तराधिकारी टॉवर और इसके नीचे के उत्तराधिकारी होते हैं, हालांकि, एक मुख्य अंतर यह है कि नीचे की ओर संकेतक आमतौर पर अपरिवर्तनीय है इसलिए एक नोड के परमाणु संशोधन को सरल किया जा रहा है। यह भेद शायद ही कारण है कि ऊपर की तरफ से पेचीदा पेड़ों को छोड़ें, जैसे कि चित्रा [ऊपर] में देखा गया है।

ब्राउन एट अल के हालिया काम में इस कठिनाई को ओवरराइड करना एक महत्वपूर्ण चिंता थी। बहु-रिकॉर्ड एलएलएस / एससी कंपाउंड "प्राइमिटिव्स" के निर्माण पर उनके पास एक अलग अलग (2013) कागज "गैर-अवरुद्ध डेटा संरचनाओं के लिए व्यावहारिक प्राथमिकताएं" हैं, जो वे एलएलएक्स / एससीएक्स कहते हैं, स्वयं (मशीन-स्तर) सीएएस का उपयोग कर कार्यान्वित करते हैं। ब्राउन एट अल अपने एलएलएक्स / एससीएक्स बिल्डिंग ब्लॉक को अपने 2014 में इस्तेमाल किया (लेकिन उनके 2011 में नहीं) समवर्ती वृक्ष कार्यान्वयन

मुझे लगता है कि यह शायद यहां "कोई हॉट स्पॉट" / कंटियान-अनुकूल (सीएफ़) की सूची छोड़ने के मौलिक विचारों का सारांश भी लायक नहीं है । यह आराम से आरबी पेड़ों (और इसी तरह की तमाम तली हुई डेटा संरचना) से एक अनिवार्य विचार जोड़ता है: टावरों को अब सम्मिलन पर तुरंत नहीं बनाया गया है, लेकिन जब तक कम विवाद नहीं होता है तब तक देरी हो जाती है। इसके विपरीत, एक लंबा टॉवर का विलोपन कई विवाद पैदा कर सकता है; यह पग के 1 99 0 के समवर्ती स्क्रिप्ट-लिस्ट पेपर के रूप में देखा जाता है, यही कारण है कि प्यूघ ने विलोपन पर पॉइंटर रिवर्सल की शुरुआत की (एक संकेत है कि स्किप सूचियों पर विकिपीडिया का पृष्ठ अभी भी इस दिन का उल्लेख नहीं करता है, अफसोस)। सीएफ़ छोड़ने की सूची में यह एक कदम आगे ले जाता है और एक लंबा टॉवर के ऊपरी स्तर को हटाने में विलंब होता है। सीएफ़ सूचि सूचियों में दोनों तरह के विलंबित संचालन (सीएएस आधारित) अलग-अलग कचरा-कलेक्टर जैसे थ्रेड द्वारा किया जाता है, जो इसके लेखकों ने "अनुकूलन थ्रेड" को बुलाते हैं।

सिंब्रोबेंक कोड (सभी एल्गोरिदम परीक्षणों सहित) यहां उपलब्ध है: https://github.com/gramoli/synchrobench नवीनतम ब्राउन एट अल कार्यान्वयन (उपरोक्त में शामिल नहीं) http://www.cs.toronto.edu/~tabrown/chromatic/ConcurrentChromaticTreeMap.java पर उपलब्ध है क्या किसी के पास 32 + कोर मशीन उपलब्ध है? जम्मू / कश्मीर मेरा मतलब यह है कि आप इन्हें चला सकते हैं

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

व्यवहार में मैंने पाया है कि मेरी प्रोजेक्ट्स पर बी-ट्री के प्रदर्शन ने छोड़-सूची के मुकाबले बेहतर प्रदर्शन किया है छोड़ें सूचियों को समझना आसान लगता है लेकिन बी-पेड़ को लागू करना मुश्किल नहीं है

एक ऐसा फायदा जो मुझे पता है कि कुछ चालाक लोगों ने एक लॉक-फ्री समवर्ती छोड़ सूची को कैसे कार्यान्वित किया है जो केवल परमाणु संचालन का उपयोग करता है उदाहरण के लिए, जावा 6 में ConcurrentSkipListMap वर्ग शामिल है, और यदि आप पागल हो तो आप इसे स्रोत कोड पढ़ सकते हैं

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

विकिपीडिया लेख से आपने उद्धृत किया:

Θ (एन) आपरेशन, जो हमें आरोही क्रम में प्रत्येक नोड पर जाने के लिए मजबूर करता है (जैसे कि पूरी सूची छपाई), एक इष्टतम तरीके से पीछे-सूची के स्तर की संरचना के पीछे के दृश्यों को बेतरतीकृत करने का अवसर प्रदान करता है, हे (लॉग इन) खोज समय पर छोड़ने की सूची ला रहा है […] एक छोड़ सूची, जिस पर हमने हाल ही में [किसी भी] Θ (एन) परिचालन नहीं किया है, वह समान रूप से सबसे खराब खराब स्थिति की गारंटी देता है, जो कि अधिक पारम्परिक संतुलित वृक्ष डेटा संरचनाओं को प्रदान करता है , क्योंकि यह हमेशा संभव होता है (हालांकि बहुत कम संभावना के साथ) कि छोड़ सूची बनाने के लिए इस्तेमाल किया जाने वाला सिक्का-फ्लिप खराब तरीके से संतुलित संरचना का उत्पादन करेगा

संपादित करें: इसलिए यह एक ट्रेड-ऑफ है: सूचियां छोड़ें जोखिम पर कम मेमोरी का उपयोग करें जो कि वे एक असंतुलित वृक्ष में पराजित हो सकते हैं।

छोड़ सूचियों सूची का उपयोग कर कार्यान्वित कर रहे हैं

एकल और दुगुनी लिंक्ड सूचियों के लिए मुफ्त समाधान लॉक करें – लेकिन कोई लॉक मुक्त समाधान नहीं हैं जो सीधे किसी भी हे (लॉगन) डेटा संरचना के लिए केवल सीएएस का उपयोग कर रहे हैं।

आप छोड़ सूची बनाने के लिए सीएएस आधारित सूचियों का उपयोग कर सकते हैं।

(ध्यान दें कि सीएएस का उपयोग कर बनाया गया एमसीएएस, मनमाने ढंग से डेटा संरचना परमिट और एमसीएएस का इस्तेमाल करके लाल-काली वृक्ष का एक सबूत बनाया गया था)।

तो, अजीब के रूप में वे कर रहे हैं, वे बहुत उपयोगी होने की बारी 🙂

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

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

एक inmemory द्विआधारी खोज splay पेड़ महान और अधिक बार प्रयोग किया जाता है।

छोड़ें सूची बनाम एसप्ले ट्री वीएस हैश टेबल रनटाइम ऑन डिक्शनरी ऑप्शन