ट्री शाटन: Difference between revisions
(→दक्षता) |
No edit summary |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 13: | Line 13: | ||
}} | }} | ||
'''ट्री | '''ट्री शाटन''' एक [[सॉर्ट एल्गोरिथ्म|शाटन एल्गोरिथ्म]] है जो शाटन किए जाने वाले अवयवों से एक [[बाइनरी सर्च ट्री|बाइनरी खोज ट्री]] बनाता है, और फिर ट्री को ([[क्रम में]]) ट्रैवर्स करता है ताकि अवयव शाटन किए गए क्रम में सामने आएं।<ref name="McLuckie Barber p. ">{{cite book | chapter = Binary Tree Sort | last=McLuckie | first=Keith | last2=Barber | first2=Angus | title=माइक्रो कंप्यूटर के लिए क्रमबद्ध दिनचर्या| publisher=Macmillan | publication-place=Basingstoke | date=1986 | isbn=0-333-39587-5 | oclc=12751343 | page=}}</ref> इसका विशिष्ट उपयोग अवयवों को [[ऑनलाइन]] शाटन करना है: प्रत्येक निवेशन के बाद, अब तक देखे गए अवयवों के सेट केवल शाटन क्रम में उपलब्ध है। | ||
ट्री शाटन का उपयोग एक बार के शाटन के रूप में किया जा सकता है, लेकिन यह [[जल्दी से सुलझाएं| | ट्री शाटन का उपयोग एक बार के शाटन के रूप में किया जा सकता है, लेकिन यह [[जल्दी से सुलझाएं|द्रुतशाटन]] के तुल्य है क्योंकि दोनों एक प्रधान आधार पर अवयवों को पुनरावर्ततः विभाजित करते हैं, और चूंकि द्रुतशाटन अपने स्थान पर है और इसका ओवरहेड (उपरि) कम है, इसलिए ट्री शाटन के द्रुतशाटन की तुलना में कुछ लाभ हैं। जब स्व-संतुलित ट्री का उपयोग किया जाता है तो इसकी सबसे खराब स्थिति बेहतर होती है, लेकिन इससे भी अधिक उपरि होती है। | ||
== दक्षता == | == दक्षता == | ||
बाइनरी खोज ट्री में एक आइटम जोड़ना औसतन एक {{math|''O''(log ''n'')}} प्रक्रम है ([[बड़े O चिन्हांकन]] में)। n | बाइनरी खोज ट्री में एक मद (आइटम) जोड़ना औसतन एक {{math|''O''(log ''n'')}} प्रक्रम है ([[बड़े O चिन्हांकन|बड़े O नोटेशन]] में)। n मद जोड़ना एक {{math|''O''(''n'' log ''n'')}} प्रक्रम है, जिससे ट्री शाटन एक 'तीव्र शाटन' प्रक्रम बन जाता है। असंतुलित बाइनरी ट्री में एक मद जोड़ने के लिए सबसे खराब स्थिति में {{math|''O''(''n'')}} काल की आवश्यकता होती है: जब ट्री एक [[श्रृंखलित सूची]] ([[अपभ्रष्ट ट्री]]) जैसा दिखता है। इसके परिणामस्वरूप इस शाटन एल्गोरिदम के लिए {{math|''O''(''n''²)}} काल की सबसे खराब स्थिति उत्पन्न होती है। यह सबसे खराब स्थिति तब होती है जब एल्गोरिदम पहले से ही शाटन सेट पर काम करता है, या जो लगभग शाटन, उत्क्रमित या लगभग उत्क्रमित होता है। हालाँकि, अपेक्षित {{math|''O''(''n'' log ''n'')}} काल को सरणी में शफ्लिंग करके प्राप्त किया जा सकता है, लेकिन यह समान मद के लिए मदद नहीं करता है। | ||
[[स्व-संतुलन द्विआधारी खोज वृक्ष|स्व- | [[स्व-संतुलन द्विआधारी खोज वृक्ष|स्व-संतुलित बाइनरी खोज ट्री]] का उपयोग करके सबसे खराब स्थिति वाली गतिविधि में सुधार किया जा सकता है। ऐसे ट्री का उपयोग करते हुए, एल्गोरिदम में {{math|''O''(''n'' log ''n'')}} सबसे खराब स्थिति वाला निष्पादन होता है, इस प्रकार [[तुलनात्मक शाटन]] के लिए कोटि-इष्टतम होती है। हालाँकि, ट्री शाटन एल्गोरिदम को [[द्रुत शाटन|द्रुतशाटन]] या [[पुंज शाटन|हीपशाटन]] जैसे स्थान में एल्गोरिदम के विपरीत, ट्री के लिए अलग मेमोरी आवंटित करने की आवश्यकता होती है। अधिकांश सामान्य प्लेटफार्मों पर, इसका अर्थ है कि हीप मेमोरी का उपयोग करना होगा, जो कि [[द्रुत शाटन|द्रुतशाटन]] और [[हीप शाटन|हीपशाटन]] की तुलना में एक महत्वपूर्ण निष्पादन हिट है।{{citation needed|date=December 2019}} बाइनरी खोज ट्री के रूप में [[ बिखरा हुआ पेड़ |स्प्ले ट्री]] का उपयोग करते समय, परिणामी एल्गोरिदम (जिसे [[ spplaysort |स्प्ले]][[पुंज शाटन|शाटन]] कहा जाता है) में अतिरिक्त गुण होता है कि यह एक [[अनुकूली शाटन]] है, जिसका अर्थ है कि इसका चलन काल लगभग शाटन किए गए इनपुट के लिए {{math|''O''(''n'' log ''n'')}} से तेज़ है। | ||
== उदाहरण == | == उदाहरण == | ||
स्यूडोकोड में निम्नलिखित ट्री शाटन एल्गोरिदम [[ | स्यूडोकोड में निम्नलिखित ट्री शाटन एल्गोरिदम [[तुलनीय आइटम के संग्रह|तुलनीय मद के संग्रह]] को स्वीकार करता है और मद को आरोही क्रम में आउटपुट करता है: | ||
{{syntaxhighlight|lang=sql| | {{syntaxhighlight|lang=sql| | ||
Line 58: | Line 58: | ||
}} | }} | ||
एक सरल [[कार्यात्मक प्रोग्रामिंग]] रूप में, एल्गोरिदम ([[हास्केल (प्रोग्रामिंग भाषा)]] में) कुछ इस | एक सरल [[कार्यात्मक प्रोग्रामिंग|फंक्शनल प्रोग्रामिंग]] रूप में, एल्गोरिदम ([[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] में) कुछ इस प्रकार दिखेगा: | ||
<syntaxhighlight lang="haskell"> | <syntaxhighlight lang="haskell"> | ||
Line 76: | Line 76: | ||
treesort = flatten . foldr insert Leaf | treesort = flatten . foldr insert Leaf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
उपरोक्त कार्यान्वयन में, | उपरोक्त कार्यान्वयन में, निवेशन एल्गोरिदम और पुनःप्राप्ति एल्गोरिदम दोनों हैं, {{math|''O''(''n''²)}} सबसे खराब स्थिति है। | ||
== बाहरी संबंध== | == बाहरी संबंध== | ||
Line 89: | Line 89: | ||
{{reflist}} | {{reflist}} | ||
{{sorting}} | {{sorting}} | ||
[[Category:All articles needing additional references]] | |||
[[Category:All articles with unsourced statements]] | |||
[[Category: | [[Category:Articles needing additional references from June 2022]] | ||
[[Category:Articles with unsourced statements from December 2019]] | |||
[[Category:Articles with unsourced statements from September 2014]] | |||
[[Category:Collapse templates]] | |||
[[Category:Created On 27/06/2023]] | [[Category:Created On 27/06/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Webarchive template wayback links]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:ऑनलाइन प्रकार]] | |||
[[Category:छँटाई एल्गोरिदम]] |
Latest revision as of 16:06, 13 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) सबसे खराब स्थिति वाला निष्पादन होता है, इस प्रकार तुलनात्मक शाटन के लिए कोटि-इष्टतम होती है। हालाँकि, ट्री शाटन एल्गोरिदम को द्रुतशाटन या हीपशाटन जैसे स्थान में एल्गोरिदम के विपरीत, ट्री के लिए अलग मेमोरी आवंटित करने की आवश्यकता होती है। अधिकांश सामान्य प्लेटफार्मों पर, इसका अर्थ है कि हीप मेमोरी का उपयोग करना होगा, जो कि द्रुतशाटन और हीपशाटन की तुलना में एक महत्वपूर्ण निष्पादन हिट है।[citation needed] बाइनरी खोज ट्री के रूप में स्प्ले ट्री का उपयोग करते समय, परिणामी एल्गोरिदम (जिसे स्प्लेशाटन कहा जाता है) में अतिरिक्त गुण होता है कि यह एक अनुकूली शाटन है, जिसका अर्थ है कि इसका चलन काल लगभग शाटन किए गए इनपुट के लिए 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.