मुझे पता है कि सबसे अच्छा क्या है: ऐरे या बाइनरी सर्च पेड़ (डालें, हटाएं, अधिकतम और मिनट ढूंढें) और मैं दोनों को कैसे सुधार सकता हूं?दक्षता में ऐरे और बाइनरी खोज पेड़ के बीच क्या अंतर है?
उत्तर
एक सरणीrandom access इसमें प्रत्येक तत्व के लिए अनुमति देता है। इसलिए आप O(1)
में एक विशिष्ट तत्व डालें, हटाएं और देखें, और अधिकतम/मिनट, O(n)
में हटाएं। [आप अधिकतम/न्यूनतम O(1)
भी बना सकते हैं और इसके बजाय O(n)
हटा सकते हैं]। यदि आप अपनी सरणी को सॉर्ट कर रहे हैं, तो यह O(n)
होने के लिए डालने/हटाएगा, लेकिन आपको O(logn)
मिल जाएगा, और O(1)
न्यूनतम/अधिकतम।
एक BST परिभाषा के अनुसार क्रमबद्ध किया जाता है, और एक नियमित [असंतुलित] BST के लिए, आप O(n)
सबसे खराब स्थिति व्यवहार मिलता है। संतुलित बीएसटी के लिए, आपको O(logn)
डालें/हटाएं/ढूंढें। आप O(1)
मिनट/अधिकतम दोनों के लिए कैसे प्राप्त कर सकते हैं।
एरे आमतौर पर iterate [पुनरावृत्ति का मानना महत्वपूर्ण नहीं है] के लिए तीर भी अधिक तेज़ होते हैं क्योंकि आप बेहतर cache प्रदर्शन प्राप्त करते हैं। इसके अलावा, बीएसटी के विपरीत - जिसमें प्रकृति द्वारा असंबद्ध आकार है, एक सरणी को पुनर्वितरण की आवश्यकता होती है और जब आपकी सरणी पूरी होती है तो डेटा की प्रतिलिपि बनाना आवश्यक होता है। AVL या red-black-trees तरह -
एक BST में सुधार यह balanced बनाकर किया जा सकता है।
कौन सा बेहतर है? यह आवेदन पर निर्भर करता है। आम तौर पर जब आप डेटा डालने और इसे क्रमबद्ध रखने की योजना बना रहे हैं, तो बीएसटी को प्राथमिकता दी जाएगी। यदि यादृच्छिक अभिगम या पुनरावृत्ति मुख्य उद्देश्य है: आप आमतौर पर एक सरणी का उपयोग करते हैं।
एक संतुलित बीएसटी के लिए 'findMin/findMax' निरंतर संचालन' ओ (1) 'क्यों है? – Cratylus
@ user384706: जब भी आप एक संतुलित बीएसटी से तत्व डालते/हटाते हैं, तो यह गैर संतुलित बीएसटी के लिए 'ओ (लॉगन)' और 'ओ (एन) 'है। आप अतिरिक्त पॉइंटर्स 'min' और' max' को बनाए रख सकते हैं, जो केवल तब संशोधित किए जाएंगे जब आप बीएसटी से तत्वों को सम्मिलित/हटा दें। संतुलित अधिकतम बीएसटी और 'ओ (एन) 'के लिए नया अधिकतम/न्यूनतम' ओ (लॉग) 'ढूंढना गैर संतुलित के लिए है - इस प्रकार इस ऑपरेशन में कोई प्रदर्शन हानि [बड़ी ओ शर्तें] नहीं है, और बड़े ओ के संदर्भ में, आप इन पॉइंटर्स को "फ्री" – amit
आह के लिए बनाए रख सकते हैं, इसलिए आपका मतलब अतिरिक्त पॉइंटर्स का उपयोग करना है। लेकिन इस मामले में, यह एक अनुकूलन है जो सीधे बीएसटी एल्गोरिदम से संबंधित नहीं है। इसलिए यह तुलना में दावा करने के लिए कुछ हद तक असंगत/भ्रामक नहीं है एक और डेटा संरचना (इस मामले में एक सरणी) कि 'अधिकतम/मिनट'' ओ (1) 'है क्योंकि यह डिफ़ॉल्ट रूप से नहीं है? इसे इसे लागू करना होगा जैसे कि यह – Cratylus
प्रदर्शन Arrays और द्विआधारी खोज पेड़ों की तुलना:
Array Binary search tree
Unsorted Sorted Average Worst case
Space O(n) O(n) O(n) O(n)
Search O(n) O(log n) * O(log n) O(n)
Max/Min O(n) O(1) O(1) ** O(1) **
Insert O(1) O(n) O(log n) O(n)
Delete O(1) O(n) O(log n) O(n)
*
संभालने द्विआधारी खोज
**
न्यूनतम और अधिकतम करने के लिए अतिरिक्त संकेत की आवश्यकता है, अन्यथा यह हे है (लॉग एन)
'ओ (1) 'बीएसटी का अधिकतम/न्यूनतम क्यों है? – Cratylus
अब आप पूछते हैं, मुझे यकीन नहीं है कि यह सही है या नहीं। बाइनरी सर्च पेड़ परिभाषा के अनुसार क्रमबद्ध हैं, लेकिन (कार्यान्वयन के आधार पर?) ओ (1) में न्यूनतम/अधिकतम प्राप्त करना संभव नहीं हो सकता है। उस स्थिति में यह ओ (लॉग एन) के बजाय होगा। – Peladao
यह 'ओ (1)' नहीं है जब तक कि आपका कार्यान्वयन 'min' और 'max' मानों पर सूचक नहीं रखता है। अमित – Cratylus
- 1. रैखिक खोज और बाइनरी खोज के बीच क्या अंतर है?
- 2. ऐरे में बाइनरी खोज
- 3. बाइनरी खोज पेड़ क्यों?
- 4. द्विआधारी खोज बनाम बाइनरी खोज पेड़
- 5. जावास्क्रिप्ट बाइनरी खोज पेड़ कार्यान्वयन
- 6. बाइनरी खोज पेड़ में "आंतरिक नोड" क्या है?
- 7. जावास्क्रिप्ट में, indexOf() और खोज() के बीच क्या अंतर है?
- 8. पेड़ की गहराई और ऊंचाई के बीच क्या अंतर है?
- 9. पेड़ और निर्देशिका के बीच क्या अंतर है?
- 10. एक स्ट्रीमराइटर और बाइनरी लेखक के बीच क्या अंतर है?
- 11. सादे टेक्स्ट और बाइनरी डेटा के बीच क्या अंतर है?
- 12. ट्रे और पेड़ के बीच अंतर?
- 13. क्वाड्री और केडी-पेड़ के बीच अंतर
- 14. जावास्क्रिप्ट में ऐरे (1) और नया ऐरे (1) के बीच क्या अंतर है?
- 15. बी-पेड़ और 2-3-4 पेड़ के बीच अंतर
- 16. रिग्रेशन पेड़ और मॉडल पेड़ के बीच अंतर
- 17. एक संतुलित बाइनरी खोज पेड़ का निर्माण
- 18. एक बाइनरी खोज पेड़ की औसत ऊंचाई
- 19. एंड्रॉइड में ऐरे एडाप्टर और कर्सर एडाप्टर के बीच अंतर
- 20. गैर-बाइनरी पेड़ में एक नोड के लिए रिकर्सिव खोज
- 21. बाइनरी खोज पेड़ के साथ हैश की तुलना करें
- 22. सी # बाइनरी पेड़ और शब्दकोश
- 23. डेटा संरचना वृक्ष और ग्राफ के बीच क्या अंतर है?
- 24. खोज 'बच्चों' और 'खोज' के बीच JQuery अंतर?
- 25. प्रत्यय पेड़ और कोशिशें। अंतर क्या है?
- 26. बाइनरी खोज पेड़ में डुप्लिकेट प्रविष्टियों को खोजने की रणनीति
- 27. द्विआधारी खोज दक्षता बनाम fortran
- 28. बाइनरी पेड़ कैसे बनाएं
- 29. एवीएल पेड़ और स्प्ले पेड़ों के बीच अंतर
- 30. आदेशित और अनियंत्रित (रूट) पेड़ के बीच अंतर
आप की कोशिश की इस जानकारी की खोज कर रहे हैं? यह खोजना आसान होना चाहिए। – Howard
क्या आपका मतलब सार डेटा संरचना [लिंक की गई सूची] (http://en.wikipedia.org/wiki/Linked_list) और [बाइनरी खोज पेड़] (http://en.wikipedia.org/wiki/Binary_search_tree) है? – Gumbo
किस तरह से सुधार? क्या के लिए सबसे अच्छा है? वे पूरी तरह से अलग डेटा संरचनाएं हैं, और उनमें से प्रत्येक एक निश्चित अनुप्रयोग के लिए 'सर्वश्रेष्ठ' हो सकता है। – amit