हीप बनाम बाइनरी सर्च ट्री (BST)


169

ढेर और BST में क्या अंतर है?

एक ढेर का उपयोग कब करें और एक बीएसटी का उपयोग कब करें?

यदि आप तत्वों को क्रमबद्ध तरीके से प्राप्त करना चाहते हैं, तो क्या BST हीप से बेहतर है?


13
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह कंप्यूटर विज्ञान के बारे में है और इसे cs.stackexchange.com पर पूछा जाना चाहिए
Flow

3
@ इसके लिए वहाँ पर पूछा गया है: cs.stackexchange.com/questions/27860/…
Ciro Santilli Sant been been been

3
मुझे लगता है कि यह स्टैक एक्सचेंज और स्टैक ओवरफ्लो दोनों से संबंधित है। तो यहाँ होना ठीक है
Azizbro

जवाबों:


191

सारांश

          Type      BST (*)   Heap
Insert    average   log(n)    1
Insert    worst     log(n)    log(n) or n (***)
Find any  worst     log(n)    n
Find max  worst     1 (**)    1
Create    worst     n log(n)  n
Delete    worst     log(n)    log(n)

इस तालिका में सभी औसत समय सम्मिलित करने के अलावा उनके सबसे खराब समय के समान हैं।

  • *: इस उत्तर में हर जगह, BST == संतुलित BST, क्योंकि असंतुलित रूप से असमान रूप से चूसता है
  • **: इस उत्तर में समझाया गया एक मामूली संशोधन का उपयोग करना
  • ***: log(n)पॉइंटर ट्री हीप के लिए, nडायनेमिक ऐरे हीप के लिए

एक बीएसटी पर बाइनरी हीप के फायदे

बाइनरी हीप पर बीएसटी का लाभ

  • मनमाने तत्वों की तलाश है O(log(n))यह बीएसटी की हत्यारा विशेषता है।

    ढेर के लिए, यह O(n)सामान्य रूप से है, सबसे बड़े तत्व को छोड़कर O(1)

BST पर ढेर का "गलत" फायदा

  • ढेर को O(1)अधिकतम, BST ढूंढना है O(log(n))

    यह एक सामान्य गलत धारणा है, क्योंकि सबसे बड़े तत्व का ट्रैक रखने के लिए एक BST को संशोधित करना तुच्छ है, और जब भी उस तत्व को बदला जा सकता है, तो इसे अपडेट करें: एक बड़ा एक स्वैप के सम्मिलन पर, हटाने पर दूसरा सबसे बड़ा लगता है। क्या हम ढेर ऑपरेशन का अनुकरण करने के लिए बाइनरी सर्च ट्री का उपयोग कर सकते हैं? ( Yeo द्वारा उल्लिखित )।

    वास्तव में, यह BSTs की तुलना में ढेर की एक सीमा है: केवल सबसे बड़ी तत्व के लिए कुशल खोज है।

औसत बाइनरी हीप इन्सर्ट है O(1)

सूत्रों का कहना है:

सहज तर्क:

  • नीचे के पेड़ के स्तर में शीर्ष स्तर की तुलना में अधिक तत्व होते हैं, इसलिए नए तत्वों को तल पर जाना लगभग निश्चित है
  • हीप सम्मिलन नीचे से शुरू होता है , BST शीर्ष से शुरू होना चाहिए

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

जीसीसी सी ++ मानक पुस्तकालय वास्तविक हार्डवेयर पर बेंचमार्क सम्मिलित करते हैं

मैंने C ++ std::set( रेड-ब्लैक ट्री BST ) और std::priority_queue( डायनेमिक ऐरे हीप ) को यह देखने के लिए सम्मिलित किया कि क्या मैं इन्सर्ट टाइम के बारे में सही था, और यही मुझे मिला:

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

  • बेंचमार्क कोड
  • प्लॉट स्क्रिप्ट
  • प्लॉट डेटा
  • Ubuntu 19.04, GCC 8.3.0 पर लेनोवो थिंकपैड P51 लैपटॉप में CPU के साथ परीक्षण किया गया: Intel Core i7-7820HQ CPU (4 कोर / 8 धागे, 2.90 GHz आधार, 8 MB कैश), RAM: 2x सैमसंग M472A2K43BB1-CRC (2x 16GiB) , 2400 एमबीपीएस), एसएसडी: सैमसंग MZVLB512HAJQ-000L7 (512GB, 3,000 MB / s)

तो स्पष्ट रूप से:

  • ढेर डालने का समय मूल रूप से स्थिर है।

    हम स्पष्ट रूप से डायनामिक ऐरे रिसाइज़ पॉइंट्स देख सकते हैं। चूँकि हम हर 10k आवेषण पर औसत होते हैं , सिस्टम शोर के ऊपर कुछ भी देखने में सक्षम होने के लिए , उन चोटियों वास्तव में दिखाए गए की तुलना में 10k गुना बड़ा है!

    ज़ूम किया गया ग्राफ़ अनिवार्य रूप से केवल सरणी आकार बिंदुओं को बाहर करता है, और दिखाता है कि लगभग सभी आवेषण 25 नैनोसेकंड के नीचे आते हैं।

  • BST लॉगरिदमिक है। सभी आवेषण औसत ढेर डालने की तुलना में बहुत धीमी हैं।

  • BST बनाम हैशमैप पर विस्तृत विश्लेषण: क्या डेटा संरचना std के अंदर :: C ++ में मैप है?

GCC C ++ मानक पुस्तकालय gem5 पर बेंचमार्क डालें

मणि 5 एक पूर्ण प्रणाली सिम्युलेटर है, और इसलिए इसके साथ एक असीम रूप से सटीक घड़ी प्रदान करता है m5 dumpstats। इसलिए मैंने व्यक्तिगत आवेषण के लिए समय का अनुमान लगाने के लिए इसका उपयोग करने की कोशिश की।

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

व्याख्या:

  • ढेर अभी भी स्थिर है, लेकिन अब हम अधिक विस्तार से देखते हैं कि कुछ लाइनें हैं, और प्रत्येक उच्च रेखा अधिक विरल है।

    यह उच्च और उच्च आवेषण के लिए मेमोरी एक्सेस लेटेंसी के अनुरूप होता है।

  • TODO मैं वास्तव में BST की पूरी तरह से व्याख्या नहीं कर सकता क्योंकि यह इतना लघुगणक और कुछ अधिक स्थिर नहीं दिखता है।

    इस अधिक विस्तार के साथ हालांकि हम देख सकते हैं कि कुछ अलग रेखाएं भी देख सकते हैं, लेकिन मुझे यकीन नहीं है कि वे क्या प्रतिनिधित्व करते हैं: मैं उम्मीद करूंगा कि नीचे की रेखा पतली हो सकती है, क्योंकि हम शीर्ष नीचे सम्मिलित करते हैं?

अराजकता 64 HPI CPU पर इस बिल्डरोट सेटअप के साथ बेंचमार्क ।

BST को किसी एरे पर कुशलता से लागू नहीं किया जा सकता है

हीप संचालन को केवल एकल ट्री ब्रांच को ऊपर या नीचे करने की आवश्यकता होती है, इसलिए O(log(n))सबसे खराब स्थिति स्वैप, O(1)औसत।

BST को संतुलित रखने के लिए पेड़ के घुमावों की आवश्यकता होती है, जो एक और के लिए शीर्ष तत्व को बदल सकते हैं, और पूरे सरणी को चारों ओर घुमाने की आवश्यकता होगी ( O(n))।

हीप्स को एक एरे पर कुशलता से लागू किया जा सकता है

वर्तमान सूचकांक से माता-पिता और बच्चों के अनुक्रमित की गणना की जा सकती है जैसा कि यहां दिखाया गया है

BST की तरह कोई भी संतुलन कार्य नहीं कर रहे हैं।

Delete min सबसे चिंताजनक ऑपरेशन है क्योंकि इसे टॉप डाउन करना है। लेकिन यह हमेशा यहां बताए गए ढेर की एक भी शाखा "पेरकोलेटिंग डाउन" द्वारा किया जा सकता है । यह ओ (लॉग (एन)) सबसे खराब स्थिति की ओर जाता है, क्योंकि ढेर हमेशा अच्छी तरह से संतुलित होता है।

यदि आप अपने द्वारा हटाए गए प्रत्येक के लिए एक एकल नोड सम्मिलित कर रहे हैं, तो आप स्पर्शोन्मुख ओ (1) औसत आवेषण का लाभ खो देते हैं जो कि हटने पर हावी होते हैं, और आप बीएसटी का उपयोग कर सकते हैं। दिज्क्स्ट्रा हालांकि प्रत्येक हटाने के लिए कई बार नोड्स अपडेट करता है, इसलिए हम ठीक हैं।

डायनेमिक ऐरे ढेर बनाम पॉइंटर ट्री ढेर

हीप्स को पॉइंटर हीप्स के शीर्ष पर कुशलता से लागू किया जा सकता है: क्या कुशल पॉइंटर-आधारित बाइनरी हीप कार्यान्वयन करना संभव है?

गतिशील सरणी कार्यान्वयन अधिक स्थान कुशल है। मान लीजिए कि प्रत्येक ढेर तत्व में सिर्फ एक सूचक होता है struct:

  • पेड़ के कार्यान्वयन को प्रत्येक तत्व के लिए तीन बिंदुओं को संचय करना चाहिए: माता-पिता, बाएं बच्चे और दाएं बच्चे। तो मेमोरी का उपयोग हमेशा होता है 4n(3 ट्री पॉइंटर्स + 1 structपॉइंटर)।

    ट्री बीएसटी को आगे भी संतुलन की जानकारी की आवश्यकता होगी, जैसे कि काले-लाल-नेस।

  • डायनामिक एरे का कार्यान्वयन 2nएक दोहरीकरण के बाद आकार का हो सकता है । तो औसतन यह होने जा रहा है 1.5n

दूसरी ओर, पेड़ के ढेर में सबसे खराब स्थिति होती है, क्योंकि इसके आकार को दोगुना करने के लिए बैकिंग डायनामिक सरणी की नकल करना O(n)सबसे खराब स्थिति होती है, जबकि पेड़ का ढेर प्रत्येक नोड के लिए नए छोटे आवंटन करता है।

फिर भी, बैकिंग सरणी दोहरीकरण को O(1)परिशोधन किया जाता है, इसलिए यह अधिकतम विलंबता पर विचार करने के लिए नीचे आता है। यहाँ उल्लेख किया

दर्शन

  • BST एक माता-पिता और सभी वंशजों के बीच एक वैश्विक संपत्ति बनाए रखते हैं (बाएं छोटे, दाएं बड़े)।

    BST का शीर्ष नोड मध्य तत्व है, जिसे बनाए रखने के लिए वैश्विक ज्ञान की आवश्यकता होती है (यह जानकर कि कितने छोटे और बड़े तत्व हैं)।

    यह वैश्विक संपत्ति बनाए रखने के लिए अधिक महंगा है (लॉग एन डालें), लेकिन अधिक शक्तिशाली खोज (लॉग एन खोज) देता है।

  • माता-पिता माता-पिता और प्रत्यक्ष बच्चों (माता-पिता> बच्चों) के बीच एक स्थानीय संपत्ति बनाए रखते हैं।

    एक ढेर का शीर्ष नोड बड़ा तत्व है, जिसे केवल आपके माता-पिता को जानने (बनाए रखने) के लिए स्थानीय ज्ञान की आवश्यकता होती है।

BST बनाम हीप बनाम हैशमैप की तुलना:

  • BST: या तो एक उचित हो सकता है:

    • अनियंत्रित सेट (एक संरचना जो यह निर्धारित करती है कि कोई तत्व पहले डाला गया था या नहीं)। लेकिन हैशमैप ओ (1) एमर्टाइज़्ड इंसर्ट के कारण बेहतर होता है।
    • छँटाई मशीन। लेकिन ढेर आमतौर पर उस पर बेहतर होता है, यही कारण है कि हीप्सोर्ट पेड़ के प्रकार की तुलना में अधिक व्यापक रूप से जाना जाता है
  • ढेर: सिर्फ एक छँटाई मशीन है। एक कुशल अनियंत्रित सेट नहीं हो सकता, क्योंकि आप केवल सबसे छोटे / सबसे बड़े तत्व के लिए तेजी से जांच कर सकते हैं।

  • हैश मैप: केवल एक अनियंत्रित सेट हो सकता है, एक कुशल छँटाई मशीन नहीं, क्योंकि हैशिंग किसी भी क्रम को मिलाता है।

संदेह से जुड़ी सूची

एक दोगुनी लिंक की गई सूची को ढेर के सबसेट के रूप में देखा जा सकता है, जहां पहले आइटम की सबसे बड़ी प्राथमिकता होती है, तो आइए उनकी तुलना यहां भी करें:

  • प्रविष्टि:
    • स्थान:
      • दोगुनी लिंक की गई सूची: सम्मिलित आइटम या तो पहले या अंतिम होने चाहिए, क्योंकि हमारे पास केवल उन तत्वों के संकेत हैं।
      • बाइनरी हीप: डाला गया आइटम किसी भी स्थिति में समाप्त हो सकता है। लिंक की गई सूची की तुलना में कम प्रतिबंधात्मक।
    • समय:
      • दोगुनी लिंक की गई सूची: O(1)सबसे खराब स्थिति चूंकि हमारे पास आइटम के लिए संकेत हैं, और अपडेट वास्तव में सरल है
      • बाइनरी हीप: O(1)औसत, इस प्रकार लिंक की गई सूची से भी बदतर। अधिक सामान्य सम्मिलन की स्थिति के लिए ट्रेडऑफ़।
  • खोज: O(n)दोनों के लिए

इसके लिए एक उपयोग का मामला तब है जब ढेर की कुंजी वर्तमान टाइमस्टैम्प है: उस स्थिति में, नई प्रविष्टियां हमेशा सूची की शुरुआत में जाएंगी। तो हम भी सटीक टाइमस्टैम्प को पूरी तरह से भूल सकते हैं, और सूची में स्थिति को प्राथमिकता के रूप में रख सकते हैं।

इसका उपयोग LRU कैश को लागू करने के लिए किया जा सकता है । वैसे ही जैसे डिज्कस्ट्रा की तरह ढेर अनुप्रयोगों के लिए , आप सूची का इसी नोड के लिए कुंजी से एक अतिरिक्त hashmap रखने के लिए है, जो नोड जल्दी से अद्यतन करने के लिए खोजने के लिए चाहते हैं।

विभिन्न बैलेंस्ड BST की तुलना

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

  • लाल-काला पेड़ । 2019 तक सबसे अधिक इस्तेमाल किया जाने वाला BBST है, उदाहरण के लिए, यह GCC 8.3.0 C ++ कार्यान्वयन द्वारा उपयोग किया जाने वाला एक है
  • एवीएल पेड़ । BST की तुलना में थोड़ा अधिक संतुलित होने की अपील करता है, इसलिए यह थोड़ा और अधिक महंगे खोजने की कीमत पर विलंबता का पता लगाने के लिए बेहतर हो सकता है। विकी संक्षेप में बताता है: "AVL के पेड़ों की तुलना अक्सर लाल-काले पेड़ों से की जाती है क्योंकि दोनों ही समान संचालन के सेट का समर्थन करते हैं और बुनियादी कार्यों के लिए [समान] समय लेते हैं। लुक-सघन अनुप्रयोगों के लिए, AVL पेड़ लाल-काले पेड़ों की तुलना में तेज़ होते हैं क्योंकि वे अधिक सख्ती से संतुलित हैं। लाल-काले पेड़ों के समान, एवीएल के पेड़ ऊंचाई-संतुलित हैं। दोनों सामान्य रूप से, किसी भी म्यू <1/2 के लिए न तो वजन-संतुलित और न ही मु-संतुलित हैं; अर्थात, सहोदर नोड्स बेहद हो सकते हैं। वंशजों की अलग-अलग संख्या। ”
  • WAVLमूल कागज पुनर्संतुलन और रोटेशन कार्यों पर सीमा के मामले में उस संस्करण के फायदे का उल्लेख है।

यह सभी देखें

CS पर समान प्रश्न: /cs/27860/whats-the-difference-between-a-binary-search-tree-and-a-binary-heap


4
I + 1ed, लेकिन "O" का औचित्य औसत O (1) बाइनरी हीप सम्मिलन अब एक मृत लिंक है, और "स्लाइड" केवल प्रमाण के बिना दावे को बताता है। इसके अलावा, मुझे लगता है कि यह स्पष्ट करने में मदद मिलेगी कि "औसत मामला" यहां औसत का मतलब है कि सम्मिलित मूल्य कुछ विशेष वितरण से आते हैं , इसलिए मुझे यकीन नहीं है कि यह "हत्यारा" कैसे है।
j_random_hacker

3
BST और संतुलित BST का परस्पर उपयोग होता है। यह स्पष्ट किया जाना चाहिए कि भ्रम से बचने के लिए उत्तर संतुलित बीएसटी को संदर्भित करता है।
गल्पक

2
@ मुझे लगता है कि हम थोड़ा पच रहे हैं, लेकिन अगर हम एक ही समय में अधिकतम और न्यूनतम दोनों चाहते हैं, तो हम दो ढेर बनाए रखने के मुद्दों में भाग सकते हैं यदि हम सावधान नहीं हैं - stackoverflow.com/a/1098454/7154924 । यह संभवतः अधिकतम-न्यूनतम हीप (एटकिंसन एट अल।) के कारण उपयोग करना बेहतर है, जो विशेष रूप से इस उद्देश्य के लिए डिज़ाइन किया गया है।
flow2k

1
@CiroSantilli 新疆 改造 六四 事件 法轮功 I: मुझे समझ नहीं आता कि बाइनरी हीप का डिलीट ऑपरेशन O (लॉग एन) क्यों है। यह केवल तभी काम करता है जब आपके पास ढेर में तत्व के लिए एक संकेतक है, लेकिन ज्यादातर उपयोग के मामलों में, आपके पास कुंजी है और आपको पहले तत्व को खोजने की आवश्यकता है जो O (n) लेता है।
रिकोला

5
हीप प्रविष्टि लॉग (n) नहीं ओ (1)
बोबो

78

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


8
"हीप गारंटी देता है कि निचले स्तरों पर तत्वों की तुलना में उच्च स्तर पर तत्व अधिक से अधिक (अधिकतम-ढेर के लिए) या छोटे (न्यूनतम-हीप के लिए) हैं," - हीप यह प्रति स्तर लागू नहीं करता है , लेकिन केवल माता-पिता-बच्चे में- जंजीरों। [1, 5, 9, 7, 15, 10, 11]एक वैध न्यूनतम-ढेर का प्रतिनिधित्व करता है, लेकिन 7स्तर 3 स्तर 2 से छोटा 9है। एक दृश्य के लिए, उदाहरण के लिए 25और ढेर के लिए नमूना विकिपीडिया छवि19 में तत्व देखें । (यह भी ध्यान दें कि तत्वों के बीच असमानता के संबंध सख्त नहीं हैं, क्योंकि तत्व आवश्यक रूप से अद्वितीय नहीं हैं।)
डैनियल एंडरसन

देर से प्रवेश के लिए क्षमा करें, लेकिन मैं केवल स्पष्टता प्राप्त करना चाहता हूं। यदि बाइनरी हीप को सॉर्ट किया जाता है, तो खोज के लिए सबसे खराब मामला लॉग एन राइट होगा। तो उस मामले में, बाइनरी सर्च ट्री (रेड-ब्लैक बीएसटी) की तुलना में बाइनरी हीप्स को बेहतर तरीके से सॉर्ट किया जाता है। धन्यवाद
कृष्णा

50

कब एक ढेर का उपयोग करें और कब एक BST का उपयोग करें

ढेर findMin / findMax (कम से बेहतर है O(1),), जबकि BST में अच्छा है सभी पाता ( O(logN))। सम्मिलित करना O(logN)दोनों संरचनाओं के लिए है। यदि आप केवल findMin / findMax (जैसे प्राथमिकता-संबंधी) की परवाह करते हैं, तो ढेर के साथ जाएं। यदि आप सब कुछ हल करना चाहते हैं, तो BST के साथ जाएं।

पहले कुछ स्लाइड्स यहां से चीजों को बहुत स्पष्ट रूप से समझाते हैं।


3
जबकि सबसे खराब स्थिति में दोनों के लिए लॉगरिदमिक है, औसत हीप डालने में निरंतर समय लगता है। (चूंकि अधिकांश मौजूदा तत्व नीचे हैं, ज्यादातर मामलों में एक नए तत्व को केवल एक या दो स्तरों तक बुलबुला करना होगा, यदि सभी पर।)
जॉनील्स

1
@xysun मुझे लगता है कि BST FindMin और findMax stackoverflow.com/a/27074221/764592
Yeo

2
@Yeo: ढेर findMin के लिए बेहतर है XOR findMax। अगर आपको दोनों की जरूरत है , तो BST बेहतर है।
मिंग डक

1
मुझे लगता है कि यह सिर्फ एक गलत धारणा है। एक बाइनरी ट्री को मिनिमम और मैक्स को खोजने के लिए आसानी से संशोधित किया जा सकता है। यह वास्तव में ढेर का प्रतिबंध है: एकमात्र कुशल खोज न्यूनतम या अधिकतम है। हीप का सही लाभ ओ (1) औसत सम्मिलित है जैसा कि मैं समझाता हूं: stackoverflow.com/a/29548834/895245
Ciro Santilli 郝海东 h h h 法轮功 ''

1
Ciro Santilli का उत्तर अब तक बेहतर है: stackoverflow.com/a/29548834/2873507
विक सेड्वेन्यू

9

जैसा कि दूसरों ने उल्लेख किया है, हीप O findMin या findMax (1) में कर सकता है, लेकिन दोनों एक ही डेटा संरचना में नहीं। हालांकि मैं असहमत हूं कि हीप फाइंडमिन / फाइंडमैक्स में बेहतर है। वास्तव में, एक मामूली संशोधन के साथ, BST O और (1) दोनों में कर सकता है ।findMin findMax

इस संशोधित BST में, आप न्यूनतम नोड और अधिकतम नोड का ट्रैक रखते हैं जो आप एक ऑपरेशन करते हैं जो संभवतः डेटा संरचना को संशोधित कर सकता है। उदाहरण के लिए इन्सर्ट ऑपरेशन में आप जाँच सकते हैं कि क्या न्यूनतम मान नए सम्मिलित मूल्य से बड़ा है, फिर नए जोड़े गए नोड में न्यूनतम मान निर्दिष्ट करें। अधिकतम मूल्य पर एक ही तकनीक लागू की जा सकती है। इसलिए, इस BST में ये जानकारी है जो आप उन्हें O (1) में प्राप्त कर सकते हैं। (बाइनरी हीप के समान)

इस BST (बैलेंस्ड BST) में, जब आप pop minया pop maxसौंपे जाने वाले अगले न्यूनतम मूल्य , मिनिमम नोड के उत्तराधिकारी होते हैं, जबकि सौंपा जाने वाला अगला अधिकतम मूल्य अधिकतम नोड का पूर्ववर्ती होता है। इस प्रकार यह O (1) में प्रदर्शन करता है। हालांकि हमें पेड़ को फिर से संतुलित करने की आवश्यकता है, इस प्रकार यह अभी भी ओ (लॉग एन) चलाएगा। (बाइनरी हीप के समान)

मुझे नीचे टिप्पणी में आपके विचार सुनने के लिए दिलचस्पी होगी। धन्यवाद :)

अपडेट करें

इसी तरह के प्रश्न के लिए क्रॉस संदर्भ क्या हम ढेर ऑपरेशन का अनुकरण करने के लिए बाइनरी सर्च ट्री का उपयोग कर सकते हैं? BST का उपयोग कर ढेर के अनुकरण पर अधिक चर्चा के लिए।


आप असहमत क्यों हैं? क्या आप अपने विचार नीचे साझा करेंगे?
Yeo

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

@JustinLardipedia क्षमा करें, मैं अपने उत्तर में इस पर प्रकाश डालना भूल गया। BST में, जब आप पॉप मिनट करते हैं, तो सौंपे जाने वाले अगले मिनट का मान न्यूनतम नोड का उत्तराधिकारी होता है। और यदि आप अधिकतम पॉप करते हैं, तो असाइन किया जाने वाला अगला अधिकतम मूल्य अधिकतम नोड का पूर्ववर्ती है। इस प्रकार यह अभी भी O (1) में प्रदर्शन करता है।
Yeo

सुधार: के लिए popMinया popMaxयह ओ (1) नहीं है, लेकिन यह ओ (लॉग एन) है क्योंकि इसमें एक बैलेंस्ड बीएसटी होना चाहिए, जिसे हर डिलीट ऑपरेशन को रीबैलेंस करना होगा। इसलिए यह बाइनरी हीप के समान है popMinया popMaxजो O (लॉग एन)
Yeo

2
आप पहले मिनट / अधिकतम प्राप्त कर सकते हैं, लेकिन kth मिनट / अधिकतम प्राप्त करने पर सामान्य BST जटिलता वापस आ जाएगी।
कैओस

3

एक द्विआधारी खोज ट्री परिभाषा का उपयोग करता है: प्रत्येक नोड के लिए, इसके बाईं ओर के नोड में कम मूल्य (कुंजी) होता है और इसके दाईं ओर नोड का अधिक मूल्य (कुंजी) होता है।

जहां ढेर के रूप में, एक द्विआधारी पेड़ के कार्यान्वयन के रूप में निम्नलिखित परिभाषा का उपयोग किया जाता है:

यदि A और B नोड हैं, जहाँ B, A का बच्चा नोड है, तो A का मान (कुंजी) B.That के मान (कुंजी) से बड़ा या बराबर होना चाहिए, कुंजी (A) (कुंजी (B) )।

http://wiki.answers.com/Q/Difference_between_binary_search_tree_and_heap_tree

मैं अपनी परीक्षा के लिए आज उसी प्रश्न पर दौड़ा और मैंने इसे ठीक कर लिया। मुस्कुराओ ... :)


"हीप, बाइनरी ट्री का एक कार्यान्वयन" - बस यह इंगित करता है कि ढेर एक प्रकार का बाइनरी ट्री है, एक प्रकार का BST नहीं
साद

3

हीप पर BST का एक और उपयोग; एक महत्वपूर्ण अंतर के कारण:

  • एक बीएसटी में उत्तराधिकारी और पूर्ववर्ती खोजने में ओ (एच) समय लगेगा। (O (logn) संतुलित BST में)
  • हीप में रहते हुए, कुछ तत्व के उत्तराधिकारी या पूर्ववर्ती को खोजने के लिए O (n) समय लगेगा।

ढेर पर BST का उपयोग : अब, हम कहते हैं कि हम उड़ानों के लैंडिंग समय को संग्रहीत करने के लिए एक डेटा संरचना का उपयोग करते हैं। यदि लैंडिंग समय में अंतर 'd' से कम है तो हम उड़ान भरने के लिए लैंड नहीं कर सकते हैं। और मान लें कि कई उड़ानें डेटा संरचना (BST या हीप) में उतरने के लिए निर्धारित की गई हैं।

अब, हम एक और फ़्लाइट शेड्यूल करना चाहते हैं जो टी पर उतरेगी । इसलिए, हमें इसके उत्तराधिकारी और पूर्ववर्ती (होना चाहिए> डी) के साथ टी के अंतर की गणना करने की आवश्यकता है । इस प्रकार, हम इस के लिए एक BST है, जो यह तेजी से करता है की आवश्यकता होगी यानी में ओ (logn) यदि संतुलित।

संपादित:

सॉर्टिंग क्रम में तत्वों को प्रिंट करने के लिए BST को O (n) समय लगता है (Inorder traversal), जबकि Heap इसे O (n logn) समय में कर सकता है। हीप मिनिमम एलीमेंट को निकालता है और ऐरे को री-हेप करता है, जिससे यह O (n logn) टाइम में सॉर्ट करता है।


1
हाँ। यह अनसोल्ड से सॉर्ट किए गए अनुक्रम से है। एक बीएसटी के इनवर्टर ट्रैवर्सल के लिए ओ (एन) समय, जो क्रमबद्ध अनुक्रम देता है। हीप्स में रहते हुए, आप न्यूनतम तत्व निकालते हैं और फिर O (लॉग एन) समय में पुनः सुधार करते हैं। अतः, n तत्वों को निकालने के लिए O (n logn) लगेगा। और यह आपको एक क्रमबद्ध अनुक्रम के साथ छोड़ देगा।
कॉडप्रोअर

from unsorted to sorted sequence. O(n) time for inorder traversal of a BST, which gives sorted sequence.खैर, बिना अनुक्रम के BST से मैं O (n लोगन) समय से कम की तुलना के आधार पर एक विधि नहीं जानता, जो BST के अनुक्रम भाग पर हावी है। (जबकि वहाँ हे (एन) ढेर निर्माण है।)। मैं इसे उचित समझूंगा (यदि निरर्थक) राज्य ढेर को अनिश्चितता और बीएसटी सॉर्ट किए जाने के करीब है।
ग्रेबियर 19

जो मैं यहाँ समझाने की कोशिश कर रहा हूँ वह यह है कि यदि आपके पास BST है और n तत्वों का भी ढेर => तो सभी तत्व दोनों डेटा संरचनाओं से क्रमबद्ध क्रम में मुद्रित किए जा सकते हैं और BST इसे O (n) समय (इनवर्टर ट्रैवर्सल) में कर सकते हैं ), जबकि हीप हे (एन लोगन) समय लेगा। मुझे समझ नहीं आ रहा है कि आप यहाँ क्या कहना चाह रहे हैं। आप कैसे कहते हैं कि BST आपको O (n logn) में क्रमबद्ध अनुक्रम देगा।
21

मुझे लगता है कि आप BST और ढेर बनाने में लगने वाले समय पर भी विचार कर रहे हैं। लेकिन मेरा मानना ​​है कि आपके पास पहले से ही यह है कि आपने इसे समय के साथ बनाया है और अब आप हल किया हुआ परिणाम प्राप्त करना चाहते हैं। मुझे आपकी बात रास नहीं आ रही है?
21

1
संपादित ... मुझे आशा है कि अब आप संतुष्ट हैं; p और यदि सही है तो +1 दें।
कॉड्र्र्रॉसर

1

B से O (n लोगन) के लिए एक सरणी से सभी n तत्वों को डालें। एक सरणी में n हथेलियों को O (n) समय में ढेर में डाला जा सकता है। जो ढेर को एक निश्चित लाभ देता है


0

हीप गारंटी देता है कि उच्च स्तरों पर तत्व अधिक से अधिक हैं (अधिकतम-हीप के लिए) या छोटे (न्यूनतम-हीप के लिए) समान स्तर के तत्वों की तुलना में अधिक हैं

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

अगर मुझे BST के साथ ऐसा करना होता है, तो यह मुझे n (n) सबसे खराब स्थिति में ले जाता है। (पहला मूल्य बहुत छोटा है और अन्य सभी क्रमिक रूप से लंबा और लंबा आता है और पेड़ केवल दाएं या बाएं बच्चे तक फैलता है छोटे और छोटे के मामले में। मंत्री को O (1) समय लगेगा, लेकिन फिर से मुझे संतुलन रखना होगा। इसलिए मेरी स्थिति और उपरोक्त सभी उत्तरों से जो मुझे मिला है, जब आप न्यूनतम या अधिकतम प्राथमिकता के आधार पर मूल्यों के बाद ही जाते हैं। ढेर के लिए।

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