ट्री शाटन: Difference between revisions
No edit summary |
(→दक्षता) |
||
Line 18: | Line 18: | ||
== दक्षता == | == दक्षता == | ||
बाइनरी खोज ट्री में एक आइटम जोड़ना औसतन एक | बाइनरी खोज ट्री में एक आइटम जोड़ना औसतन एक {{math|''O''(log ''n'')}} प्रक्रम है ([[बड़े O चिन्हांकन]] में)। n आइटम जोड़ना एक {{math|''O''(''n'' log ''n'')}} प्रक्रम है, जिससे ट्री शाटन एक 'फास्ट शाटन' प्रक्रम बन जाता है। असंतुलित बाइनरी ट्री में एक आइटम जोड़ने के लिए सबसे अनुपयुक्त स्थिति में {{math|''O''(''n'')}} समय की आवश्यकता होती है: जब ट्री एक [[श्रृंखलित सूची]] ([[अपभ्रष्ट ट्री]]) जैसा दिखता है। इसके परिणामस्वरूप इस शाटन एल्गोरिदम के लिए {{math|''O''(''n''²)}} समय की सबसे अनुपयुक्त स्थिति उत्पन्न होती है। यह सबसे अनुपयुक्त स्थिति तब होती है जब एल्गोरिदम पहले से ही शाटन सेट पर काम करता है, या जो लगभग शाटन, उत्क्रमित या लगभग उत्क्रमित होता है। हालाँकि, प्रत्याशित {{math|''O''(''n'' log ''n'')}} समय को सरणी में समवकुलन करके प्राप्त किया जा सकता है, लेकिन यह समान आइटम के लिए मदद नहीं करता है। | ||
यह सबसे | |||
[[स्व-संतुलन द्विआधारी खोज वृक्ष]] का उपयोग करके सबसे खराब स्थिति वाले व्यवहार में सुधार किया जा सकता है। ऐसे पेड़ का उपयोग करते हुए, एल्गोरिदम में एक है {{math|''O''(''n'' log ''n'')}} सबसे खराब स्थिति में प्रदर्शन, इस प्रकार तुलनात्मक प्रकार के लिए डिग्री-इष्टतम है। हालाँकि, ट्री शाटन एल्गोरिदम को क्विकॉर्ट या हीप्शाटन जैसे इन-प्लेस एल्गोरिदम के विपरीत, ट्री के लिए अलग मेमोरी आवंटित करने की आवश्यकता होती है। अधिकांश सामान्य प्लेटफ़ॉर्म पर, इसका मतलब है कि मेमोरी प्रबंधन#HEAP का उपयोग किया जाना चाहिए, जो कि क्विकॉर्ट और [[ढेर बनाएं और छांटें]] की तुलना में एक महत्वपूर्ण प्रदर्शन हिट है{{citation needed|date=December 2019}}. बाइनरी खोज ट्री के रूप में [[ बिखरा हुआ पेड़ ]] का उपयोग करते समय, परिणामी एल्गोरिदम (जिसे [[ spplaysort ]] कहा जाता है) में अतिरिक्त गुण होता है कि यह एक अनुकूली शाटन है, जिसका अर्थ है कि इसका चलने का समय इससे तेज है {{math|''O''(''n'' log ''n'')}} उन इनपुट के लिए जो लगभग क्रमबद्ध हैं। | [[स्व-संतुलन द्विआधारी खोज वृक्ष]] का उपयोग करके सबसे खराब स्थिति वाले व्यवहार में सुधार किया जा सकता है। ऐसे पेड़ का उपयोग करते हुए, एल्गोरिदम में एक है {{math|''O''(''n'' log ''n'')}} सबसे खराब स्थिति में प्रदर्शन, इस प्रकार तुलनात्मक प्रकार के लिए डिग्री-इष्टतम है। हालाँकि, ट्री शाटन एल्गोरिदम को क्विकॉर्ट या हीप्शाटन जैसे इन-प्लेस एल्गोरिदम के विपरीत, ट्री के लिए अलग मेमोरी आवंटित करने की आवश्यकता होती है। अधिकांश सामान्य प्लेटफ़ॉर्म पर, इसका मतलब है कि मेमोरी प्रबंधन#HEAP का उपयोग किया जाना चाहिए, जो कि क्विकॉर्ट और [[ढेर बनाएं और छांटें]] की तुलना में एक महत्वपूर्ण प्रदर्शन हिट है{{citation needed|date=December 2019}}. बाइनरी खोज ट्री के रूप में [[ बिखरा हुआ पेड़ ]] का उपयोग करते समय, परिणामी एल्गोरिदम (जिसे [[ spplaysort ]] कहा जाता है) में अतिरिक्त गुण होता है कि यह एक अनुकूली शाटन है, जिसका अर्थ है कि इसका चलने का समय इससे तेज है {{math|''O''(''n'' log ''n'')}} उन इनपुट के लिए जो लगभग क्रमबद्ध हैं। |
Revision as of 08:27, 4 July 2023
This article needs additional citations for verification. (June 2022) (Learn how and when to remove this template message) |
Class | Sorting algorithm |
---|---|
Data structure | Array |
Worst-case performance | O(n²) (unbalanced) O(n log n) (balanced) |
Best-case performance | O(n log n)[citation needed] |
Average performance | O(n log n) |
Worst-case space complexity | Θ(n) |
ट्री (तरु) शाटन एक शाटन एल्गोरिथ्म है जो शाटन किए जाने वाले अवयवों से एक बाइनरी खोज ट्री बनाता है, और फिर ट्री को (क्रम में) ट्रैवर्स करता है ताकि अवयव शाटन किए गए क्रम में सामने आएं।[1] इसका प्रारुपिक उपयोग अवयवों को ऑनलाइन शाटन करना है: प्रत्येक निवेशन के बाद, अब तक देखे गए अवयवों के सेट शाटन क्रम में उपलब्ध होते है।
ट्री शाटन का उपयोग एक बार के शाटन के रूप में किया जा सकता है, लेकिन यह द्रुत शाटन के तुल्य है क्योंकि दोनों एक केन्द्र बिन्दु के आधार पर अवयवों को पुनरावर्ती रूप से विभाजित करते हैं, और चूंकि द्रुत शाटन अपनी जगह पर है और इसका ओवरहेड (उपरि) कम है, इसलिए ट्री शाटन के द्रुत शाटन की तुलना में कुछ लाभ हैं। जब स्व-संतुलन ट्री का उपयोग किया जाता है तो इसकी सबसे अनुपयुक्त स्थिति बेहतर होती है, लेकिन इससे भी अधिक उपरि होती है।
दक्षता
बाइनरी खोज ट्री में एक आइटम जोड़ना औसतन एक O(log n) प्रक्रम है (बड़े O चिन्हांकन में)। n आइटम जोड़ना एक O(n log n) प्रक्रम है, जिससे ट्री शाटन एक 'फास्ट शाटन' प्रक्रम बन जाता है। असंतुलित बाइनरी ट्री में एक आइटम जोड़ने के लिए सबसे अनुपयुक्त स्थिति में O(n) समय की आवश्यकता होती है: जब ट्री एक श्रृंखलित सूची (अपभ्रष्ट ट्री) जैसा दिखता है। इसके परिणामस्वरूप इस शाटन एल्गोरिदम के लिए O(n²) समय की सबसे अनुपयुक्त स्थिति उत्पन्न होती है। यह सबसे अनुपयुक्त स्थिति तब होती है जब एल्गोरिदम पहले से ही शाटन सेट पर काम करता है, या जो लगभग शाटन, उत्क्रमित या लगभग उत्क्रमित होता है। हालाँकि, प्रत्याशित O(n log n) समय को सरणी में समवकुलन करके प्राप्त किया जा सकता है, लेकिन यह समान आइटम के लिए मदद नहीं करता है।
स्व-संतुलन द्विआधारी खोज वृक्ष का उपयोग करके सबसे खराब स्थिति वाले व्यवहार में सुधार किया जा सकता है। ऐसे पेड़ का उपयोग करते हुए, एल्गोरिदम में एक है O(n log n) सबसे खराब स्थिति में प्रदर्शन, इस प्रकार तुलनात्मक प्रकार के लिए डिग्री-इष्टतम है। हालाँकि, ट्री शाटन एल्गोरिदम को क्विकॉर्ट या हीप्शाटन जैसे इन-प्लेस एल्गोरिदम के विपरीत, ट्री के लिए अलग मेमोरी आवंटित करने की आवश्यकता होती है। अधिकांश सामान्य प्लेटफ़ॉर्म पर, इसका मतलब है कि मेमोरी प्रबंधन#HEAP का उपयोग किया जाना चाहिए, जो कि क्विकॉर्ट और ढेर बनाएं और छांटें की तुलना में एक महत्वपूर्ण प्रदर्शन हिट है[citation needed]. बाइनरी खोज ट्री के रूप में बिखरा हुआ पेड़ का उपयोग करते समय, परिणामी एल्गोरिदम (जिसे spplaysort कहा जाता है) में अतिरिक्त गुण होता है कि यह एक अनुकूली शाटन है, जिसका अर्थ है कि इसका चलने का समय इससे तेज है O(n log n) उन इनपुट के लिए जो लगभग क्रमबद्ध हैं।
उदाहरण
स्यूडोकोड में निम्नलिखित ट्री शाटन एल्गोरिदम कुल ऑर्डर स्वीकार करता है और आइटम को आरोही क्रम में आउटपुट करता है:
STRUCTURE BinaryTree
BinaryTree:LeftSubTree
Object:Node
BinaryTree:RightSubTree
PROCEDURE Insert(BinaryTree:searchTree, Object:item)
IF searchTree.Node IS NULL THEN
SET searchTree.Node TO item
ELSE
IF item IS LESS THAN searchTree.Node THEN
Insert(searchTree.LeftSubTree, item)
ELSE
Insert(searchTree.RightSubTree, item)
PROCEDURE InOrder(BinaryTree:searchTree)
IF searchTree.Node IS NULL THEN
EXIT PROCEDURE
ELSE
InOrder(searchTree.LeftSubTree)
EMIT searchTree.Node
InOrder(searchTree.RightSubTree)
PROCEDURE TreeSort(Collection:items)
BinaryTree:searchTree
FOR EACH individualItem IN items
Insert(searchTree, individualItem)
InOrder(searchTree)
एक सरल कार्यात्मक प्रोग्रामिंग रूप में, एल्गोरिदम (हास्केल (प्रोग्रामिंग भाषा) में) कुछ इस तरह दिखेगा:
data Tree a = Leaf | Node (Tree a) a (Tree a)
insert :: Ord a => a -> Tree a -> Tree a
insert x Leaf = Node Leaf x Leaf
insert x (Node t y s)
| x <= y = Node (insert x t) y s
| x > y = Node t y (insert x s)
flatten :: Tree a -> [a]
flatten Leaf = []
flatten (Node t x s) = flatten t ++ [x] ++ flatten s
treesort :: Ord a => [a] -> [a]
treesort = flatten . foldr insert Leaf
उपरोक्त कार्यान्वयन में, सम्मिलन एल्गोरिदम और पुनर्प्राप्ति एल्गोरिदम दोनों हैं O(n²) सबसे खराब स्थिति।
बाहरी संबंध
- Binary Tree Java Applet and Explanation at the Wayback Machine (archived 29 November 2016)
- Tree Sort of a Linked List
- Tree Sort in C++
संदर्भ
- ↑ McLuckie, Keith; Barber, Angus (1986). "Binary Tree Sort". माइक्रो कंप्यूटर के लिए क्रमबद्ध दिनचर्या. Basingstoke: Macmillan. ISBN 0-333-39587-5. OCLC 12751343.