कॉम्ब सॉर्ट: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Interval based sorting algorithm}} {{Infobox algorithm |class=Sorting algorithm |image=Visualisation of comb sort |caption=...")
 
No edit summary
Line 18: Line 18:
|optimal=
|optimal=
}}
}}
कॉम्ब सॉर्ट एक अपेक्षाकृत सरल [[छँटाई एल्गोरिथ्म]] है जिसे मूल रूप से 1980 में व्लोड्ज़िमिएर्ज़ डोबोसिविज़ और आर्टूर बोरोवी द्वारा डिज़ाइन किया गया था।<ref name=BB/><ref>{{Cite journal
कॉम्ब सॉर्ट अपेक्षाकृत सरल [[छँटाई एल्गोरिथ्म]] है जिसे मूल रूप से 1980 में व्लोड्ज़िमिएर्ज़ डोबोसिविज़ और आर्टूर बोरोवी द्वारा डिज़ाइन किया गया था।<ref name=BB/><ref>{{Cite journal
  |title=An efficient variation of bubble sort
  |title=An efficient variation of bubble sort
  |first=Wlodzimierz |last=Dobosiewicz
  |first=Wlodzimierz |last=Dobosiewicz
Line 41: Line 41:
मूल विचार कछुओं, या सूची के अंत के पास छोटे मूल्यों को खत्म करना है, क्योंकि बबल सॉर्ट में ये सॉर्टिंग को काफी धीमा कर देते हैं। खरगोश, सूची की शुरुआत में बड़े मान, बबल सॉर्ट में कोई समस्या पैदा नहीं करते हैं।
मूल विचार कछुओं, या सूची के अंत के पास छोटे मूल्यों को खत्म करना है, क्योंकि बबल सॉर्ट में ये सॉर्टिंग को काफी धीमा कर देते हैं। खरगोश, सूची की शुरुआत में बड़े मान, बबल सॉर्ट में कोई समस्या पैदा नहीं करते हैं।


बबल सॉर्ट में, जब किन्हीं दो तत्वों की तुलना की जाती है, तो उनमें हमेशा 1 का अंतर (एक दूसरे से दूरी) होता है।<ref>{{cite web
बबल सॉर्ट में, जब किन्हीं दो तत्वों की तुलना की जाती है, तो उनमें हमेशा 1 का अंतर (दूसरे से दूरी) होता है।<ref>{{cite web
   |website=[[National Institute of Standards and Technology]] (nist.gov)
   |website=[[National Institute of Standards and Technology]] (nist.gov)
   |url=https://xlinux.nist.gov/dads/HTML/combSort.html
   |url=https://xlinux.nist.gov/dads/HTML/combSort.html
Line 47: Line 47:
   |accessdate=March 9, 2021}}</ref> कंघी सॉर्ट का मूल विचार यह है कि अंतर 1 से अधिक हो सकता है। बबल सॉर्ट का आंतरिक लूप, जो वास्तविक स्वैप करता है, को इस तरह संशोधित किया जाता है कि स्वैप किए गए तत्वों के बीच का अंतर कम हो जाता है (बाहरी लूप के प्रत्येक पुनरावृत्ति के लिए) सिकुड़न कारक k के चरण: {{math|[{{sfrac|''n''|''k''}}, {{sfrac|''n''|''k''<sup>2</sup>}}, {{sfrac|''n''|''k''<sup>3</sup>}}, ..., 1]}}.
   |accessdate=March 9, 2021}}</ref> कंघी सॉर्ट का मूल विचार यह है कि अंतर 1 से अधिक हो सकता है। बबल सॉर्ट का आंतरिक लूप, जो वास्तविक स्वैप करता है, को इस तरह संशोधित किया जाता है कि स्वैप किए गए तत्वों के बीच का अंतर कम हो जाता है (बाहरी लूप के प्रत्येक पुनरावृत्ति के लिए) सिकुड़न कारक k के चरण: {{math|[{{sfrac|''n''|''k''}}, {{sfrac|''n''|''k''<sup>2</sup>}}, {{sfrac|''n''|''k''<sup>3</sup>}}, ..., 1]}}.


अंतर तब शुरू होता है जब सूची n की लंबाई को सिकुड़न कारक k द्वारा विभाजित करके क्रमबद्ध किया जाता है (आम तौर पर 1.3; नीचे देखें) और उपरोक्त संशोधित बबल सॉर्ट का एक पास उस अंतर के साथ लागू किया जाता है। फिर अंतर को सिकुड़न कारक द्वारा फिर से विभाजित किया जाता है, सूची को इस नए अंतर के साथ क्रमबद्ध किया जाता है, और प्रक्रिया तब तक दोहराई जाती है जब तक कि अंतर 1 न हो जाए। इस बिंदु पर, कंघी सॉर्ट 1 के अंतर का उपयोग करना जारी रखता है जब तक कि सूची पूरी तरह से क्रमबद्ध न हो जाए। प्रकार का अंतिम चरण इस प्रकार बुलबुला प्रकार के बराबर होता है, लेकिन इस समय तक अधिकांश कछुओं का निपटारा हो चुका होता है, इसलिए बुलबुला प्रकार प्रभावी होगा।
अंतर तब शुरू होता है जब सूची n की लंबाई को सिकुड़न कारक k द्वारा विभाजित करके क्रमबद्ध किया जाता है (आम तौर पर 1.3; नीचे देखें) और उपरोक्त संशोधित बबल सॉर्ट का पास उस अंतर के साथ लागू किया जाता है। फिर अंतर को सिकुड़न कारक द्वारा फिर से विभाजित किया जाता है, सूची को इस नए अंतर के साथ क्रमबद्ध किया जाता है, और प्रक्रिया तब तक दोहराई जाती है जब तक कि अंतर 1 न हो जाए। इस बिंदु पर, कंघी सॉर्ट 1 के अंतर का उपयोग करना जारी रखता है जब तक कि सूची पूरी तरह से क्रमबद्ध न हो जाए। प्रकार का अंतिम चरण इस प्रकार बुलबुला प्रकार के बराबर होता है, लेकिन इस समय तक अधिकांश कछुओं का निपटारा हो चुका होता है, इसलिए बुलबुला प्रकार प्रभावी होगा।


सिकुड़न कारक का कंघी छंटाई की दक्षता पर बहुत प्रभाव पड़ता है। 200,000 से अधिक यादृच्छिक सूचियों पर अनुभवजन्य परीक्षण के बाद मूल लेख के लेखकों द्वारा k = 1.3 को एक आदर्श सिकुड़न कारक के रूप में सुझाया गया है। बहुत छोटा मान अनावश्यक रूप से कई तुलनाएँ करके एल्गोरिदम को धीमा कर देता है, जबकि बहुत बड़ा मान कछुओं से प्रभावी ढंग से निपटने में विफल रहता है, जिससे उसे 1 गैप आकार के साथ कई पास की आवश्यकता होती है।
सिकुड़न कारक का कंघी छंटाई की दक्षता पर बहुत प्रभाव पड़ता है। 200,000 से अधिक यादृच्छिक सूचियों पर अनुभवजन्य परीक्षण के बाद मूल लेख के लेखकों द्वारा k = 1.3 को आदर्श सिकुड़न कारक के रूप में सुझाया गया है। बहुत छोटा मान अनावश्यक रूप से कई तुलनाएँ करके एल्गोरिदम को धीमा कर देता है, जबकि बहुत बड़ा मान कछुओं से प्रभावी ढंग से निपटने में विफल रहता है, जिससे उसे 1 गैप आकार के साथ कई पास की आवश्यकता होती है।


घटते अंतराल के साथ बार-बार सॉर्टिंग पास का पैटर्न शेलसॉर्ट के समान है, लेकिन शेलसॉर्ट में सरणी को अगले सबसे छोटे अंतराल पर जाने से पहले प्रत्येक पास को पूरी तरह से सॉर्ट किया जाता है। कॉम्ब सॉर्ट के पास तत्वों को पूरी तरह से सॉर्ट नहीं करते हैं। यही कारण है कि शेलसॉर्ट#गैप अनुक्रमों में लगभग 2.2 का बड़ा इष्टतम सिकुड़न कारक होता है।
घटते अंतराल के साथ बार-बार सॉर्टिंग पास का पैटर्न शेलसॉर्ट के समान है, लेकिन शेलसॉर्ट में सरणी को अगले सबसे छोटे अंतराल पर जाने से पहले प्रत्येक पास को पूरी तरह से सॉर्ट किया जाता है। कॉम्ब सॉर्ट के पास तत्वों को पूरी तरह से सॉर्ट नहीं करते हैं। यही कारण है कि शेलसॉर्ट#गैप अनुक्रमों में लगभग 2.2 का बड़ा इष्टतम सिकुड़न कारक होता है।
Line 57: Line 57:
  फ़ंक्शन कॉम्बसॉर्ट (सरणी इनपुट) है
  फ़ंक्शन कॉम्बसॉर्ट (सरणी इनपुट) है
   
   
     गैप := इनपुट.साइज <span style= color:green >// गैप साइज आरंभ करें</span>
     गैप�:= इनपुट.साइज <span style= color:green >// गैप साइज आरंभ करें</span>
     सिकुड़न := 1.3 <span style= color:green >// गैप सिकुड़न कारक</span> सेट करें
     सिकुड़न�:= 1.3 <span style= color:green >// गैप सिकुड़न कारक</span> सेट करें
     क्रमबद्ध:=झूठा
     क्रमबद्ध:=झूठा
   
   
     सॉर्ट करते समय लूप = गलत
     सॉर्ट करते समय लूप = गलत
         <span style= color:green >// अगली कंघी के लिए गैप वैल्यू अपडेट करें</span>
         <span style= color:green >// अगली कंघी के लिए गैप वैल्यू अपडेट करें</span>
         अंतराल := फर्श(अंतराल / सिकुड़न)
         अंतराल�:= फर्श(अंतराल / सिकुड़न)
         यदि गैप ≤ 1 है तो
         यदि गैप ≤ 1 है तो
             अंतराल := 1
             अंतराल�:= 1
             क्रमबद्ध := सत्य <span style= color:green >// यदि इस पास में कोई स्वैप नहीं है, तो हमारा काम हो गया</span>
             क्रमबद्ध�:= सत्य <span style= color:green >// यदि इस पास में कोई स्वैप नहीं है, तो हमारा काम हो गया</span>
         अगर अंत
         अगर अंत
   
   
         <span style= color:green >// इनपुट सूची पर एक एकल कंघी</span>
         <span style= color:green >// इनपुट सूची पर एकल कंघी</span>
         मैं := 0
         मैं�:= 0
         लूप जबकि i + गैप < इनपुट.साइज <span style= color:green > // समान विचार के लिए [[ शैल सॉर्ट ]] देखें</span>
         लूप जबकि i + गैप < इनपुट.साइज <span style= color:green > // समान विचार के लिए [[ शैल सॉर्ट ]] देखें</span>
             यदि इनपुट[i] > इनपुट[i+gap] तो
             यदि इनपुट[i] > इनपुट[i+gap] तो
                 [[स्वैप (कंप्यूटर विज्ञान)]](इनपुट[i], इनपुट[i+गैप])
                 [[स्वैप (कंप्यूटर विज्ञान)]](इनपुट[i], इनपुट[i+गैप])
                 क्रमबद्ध:=झूठा
                 क्रमबद्ध:=झूठा
                 <span style= color:green >// यदि यह असाइनमेंट लूप के भीतर कभी नहीं होता है,
                 <span style= color:green >// यदि यह असाइनमेंट लूप के भीतर कभी नहीं होता है,
                // तो कोई अदला-बदली नहीं हुई है और सूची क्रमबद्ध है।</span>
                  // तो कोई अदला-बदली नहीं हुई है और सूची क्रमबद्ध है।</span>
               अगर अंत
               अगर अंत
      
      
               मैं := मैं + 1
               मैं�:= मैं + 1
           अंत पाश
           अंत पाश
       अंत पाश
       अंत पाश
Line 87: Line 87:


===पायथन कोड===
===पायथन कोड===
साथ ही, दो त्वरित [[पायथन (प्रोग्रामिंग भाषा)]] कार्यान्वयन: एक सूची (या सरणी, या अन्य परिवर्तनीय प्रकार जहां उस पर उपयोग किए गए संचालन भाषा को समझ में आता है) पर काम करता है, दूसरा उसी स्थान पर समान मानों के साथ एक सूची बनाता है दिया गया डेटा और उसे सॉर्ट करने के बाद लौटाता है (बिल्डिन के समान)। <code>sorted</code> समारोह)।
साथ ही, दो त्वरित [[पायथन (प्रोग्रामिंग भाषा)]] कार्यान्वयन: सूची (या सरणी, या अन्य परिवर्तनीय प्रकार जहां उस पर उपयोग किए गए संचालन भाषा को समझ में आता है) पर काम करता है, दूसरा उसी स्थान पर समान मानों के साथ सूची बनाता है दिया गया डेटा और उसे सॉर्ट करने के बाद लौटाता है (बिल्डिन के समान)। <code>sorted</code> समारोह)।
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
from math import floor
from math import floor
Line 132: Line 132:
== यह भी देखें ==
== यह भी देखें ==
{{Wikibooks|Algorithm Implementation|Sorting/Comb sort|Comb sort}}
{{Wikibooks|Algorithm Implementation|Sorting/Comb sort|Comb sort}}
* बबल सॉर्ट, एक आम तौर पर धीमी एल्गोरिथ्म, कंघी सॉर्ट का आधार है।
* बबल सॉर्ट, आम तौर पर धीमी एल्गोरिथ्म, कंघी सॉर्ट का आधार है।
* [[ कॉकटेल प्रकार ]], या द्विदिशात्मक बबल सॉर्ट, बबल सॉर्ट का एक रूप है जो कछुओं की समस्या का भी समाधान करता है, यद्यपि कम प्रभावी ढंग से।
* [[ कॉकटेल प्रकार ]], या द्विदिशात्मक बबल सॉर्ट, बबल सॉर्ट का रूप है जो कछुओं की समस्या का भी समाधान करता है, यद्यपि कम प्रभावी ढंग से।


== संदर्भ ==
== संदर्भ ==

Revision as of 06:21, 18 July 2023

कॉम्ब सॉर्ट
Visualisation of comb sort
Comb sort with shrink factor k=1.24733
ClassSorting algorithm
Data structureArray
Worst-case performance[1]
Best-case performance
Average performance, where p is the number of increments[1]
Worst-case space complexity

कॉम्ब सॉर्ट अपेक्षाकृत सरल छँटाई एल्गोरिथ्म है जिसे मूल रूप से 1980 में व्लोड्ज़िमिएर्ज़ डोबोसिविज़ और आर्टूर बोरोवी द्वारा डिज़ाइन किया गया था।[1][2] बाद में 1991 में स्टीफन लेसी और रिचर्ड बॉक्स द्वारा इसे फिर से खोजा गया (और इसे कॉम्बसॉर्ट नाम दिया गया)।[3] कॉम्ब सॉर्ट बुलबुले की तरह में उसी तरह सुधार करता है जैसे शैलसॉर्ट सम्मिलन सॉर्ट में सुधार करता है।[clarification needed]

नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड्स एंड टेक्नोलॉजी|nist.gov की घटती वेतन वृद्धि सॉर्ट परिभाषा में 'कंघी सॉर्ट' शब्द का उल्लेख डेटा के पुनरावृत्त पासों को देखने के रूप में किया गया है, जहां कंघी के दांत स्पर्श करते हैं; पहला शब्द डोनाल्ड नुथ से जुड़ा है।[4]


एल्गोरिदम

मूल विचार कछुओं, या सूची के अंत के पास छोटे मूल्यों को खत्म करना है, क्योंकि बबल सॉर्ट में ये सॉर्टिंग को काफी धीमा कर देते हैं। खरगोश, सूची की शुरुआत में बड़े मान, बबल सॉर्ट में कोई समस्या पैदा नहीं करते हैं।

बबल सॉर्ट में, जब किन्हीं दो तत्वों की तुलना की जाती है, तो उनमें हमेशा 1 का अंतर (दूसरे से दूरी) होता है।[5] कंघी सॉर्ट का मूल विचार यह है कि अंतर 1 से अधिक हो सकता है। बबल सॉर्ट का आंतरिक लूप, जो वास्तविक स्वैप करता है, को इस तरह संशोधित किया जाता है कि स्वैप किए गए तत्वों के बीच का अंतर कम हो जाता है (बाहरी लूप के प्रत्येक पुनरावृत्ति के लिए) सिकुड़न कारक k के चरण: [n/k, n/k2, n/k3, ..., 1].

अंतर तब शुरू होता है जब सूची n की लंबाई को सिकुड़न कारक k द्वारा विभाजित करके क्रमबद्ध किया जाता है (आम तौर पर 1.3; नीचे देखें) और उपरोक्त संशोधित बबल सॉर्ट का पास उस अंतर के साथ लागू किया जाता है। फिर अंतर को सिकुड़न कारक द्वारा फिर से विभाजित किया जाता है, सूची को इस नए अंतर के साथ क्रमबद्ध किया जाता है, और प्रक्रिया तब तक दोहराई जाती है जब तक कि अंतर 1 न हो जाए। इस बिंदु पर, कंघी सॉर्ट 1 के अंतर का उपयोग करना जारी रखता है जब तक कि सूची पूरी तरह से क्रमबद्ध न हो जाए। प्रकार का अंतिम चरण इस प्रकार बुलबुला प्रकार के बराबर होता है, लेकिन इस समय तक अधिकांश कछुओं का निपटारा हो चुका होता है, इसलिए बुलबुला प्रकार प्रभावी होगा।

सिकुड़न कारक का कंघी छंटाई की दक्षता पर बहुत प्रभाव पड़ता है। 200,000 से अधिक यादृच्छिक सूचियों पर अनुभवजन्य परीक्षण के बाद मूल लेख के लेखकों द्वारा k = 1.3 को आदर्श सिकुड़न कारक के रूप में सुझाया गया है। बहुत छोटा मान अनावश्यक रूप से कई तुलनाएँ करके एल्गोरिदम को धीमा कर देता है, जबकि बहुत बड़ा मान कछुओं से प्रभावी ढंग से निपटने में विफल रहता है, जिससे उसे 1 गैप आकार के साथ कई पास की आवश्यकता होती है।

घटते अंतराल के साथ बार-बार सॉर्टिंग पास का पैटर्न शेलसॉर्ट के समान है, लेकिन शेलसॉर्ट में सरणी को अगले सबसे छोटे अंतराल पर जाने से पहले प्रत्येक पास को पूरी तरह से सॉर्ट किया जाता है। कॉम्ब सॉर्ट के पास तत्वों को पूरी तरह से सॉर्ट नहीं करते हैं। यही कारण है कि शेलसॉर्ट#गैप अनुक्रमों में लगभग 2.2 का बड़ा इष्टतम सिकुड़न कारक होता है।

छद्मकोड

फ़ंक्शन कॉम्बसॉर्ट (सरणी इनपुट) है

    गैप�:= इनपुट.साइज // गैप साइज आरंभ करें
    सिकुड़न�:= 1.3  // गैप सिकुड़न कारक सेट करें
    क्रमबद्ध:=झूठा

    सॉर्ट करते समय लूप = गलत
        // अगली कंघी के लिए गैप वैल्यू अपडेट करें
        अंतराल�:= फर्श(अंतराल / सिकुड़न)
        यदि गैप ≤ 1 है तो
            अंतराल�:= 1
            क्रमबद्ध�:= सत्य // यदि इस पास में कोई स्वैप नहीं है, तो हमारा काम हो गया
        अगर अंत

        // इनपुट सूची पर एकल कंघी
        मैं�:= 0
        लूप जबकि i + गैप < इनपुट.साइज   // समान विचार के लिए शैल सॉर्ट  देखें
            यदि इनपुट[i] > इनपुट[i+gap] तो
                स्वैप (कंप्यूटर विज्ञान)(इनपुट[i], इनपुट[i+गैप])
                क्रमबद्ध:=झूठा
                // यदि यह असाइनमेंट लूप के भीतर कभी नहीं होता है,
                 // तो कोई अदला-बदली नहीं हुई है और सूची क्रमबद्ध है।
             अगर अंत
    
             मैं�:= मैं + 1
         अंत पाश
     अंत पाश
अंत समारोह


पायथन कोड

साथ ही, दो त्वरित पायथन (प्रोग्रामिंग भाषा) कार्यान्वयन: सूची (या सरणी, या अन्य परिवर्तनीय प्रकार जहां उस पर उपयोग किए गए संचालन भाषा को समझ में आता है) पर काम करता है, दूसरा उसी स्थान पर समान मानों के साथ सूची बनाता है दिया गया डेटा और उसे सॉर्ट करने के बाद लौटाता है (बिल्डिन के समान)। sorted समारोह)।

from math import floor

def combsort_inplace(data):
    length = len(data)
    shrink = 1.3
    gap = length
    sorted = False
    while not sorted:
        gap = floor(gap / shrink)
        if gap <= 1:
            sorted = True
            gap = 1
        # equivalent to `i = 0; while (i + gap) < length: ...{loop body}... i += 1`
        for i in range(length - gap):
            sm = gap + i
            if data[i] > data[sm]:
                # because Python is very nice, this accomplishes the swap
                data[i], data[sm] = data[sm], data[i]
                sorted = False


def combsort(data):
    length = len(data)
    shrink = 1.3
    gap = length
    out = list(data)
    is_sorted = False
    while not is_sorted:
        gap = floor(gap / shrink)
        if gap <= 1:
            is_sorted = True
            gap = 1
        for i in range(length - gap):
            sm = gap + i
            if out[i] > out[sm]:
                out[i], out[sm] = out[sm], out[i]
                is_sorted = False
    return out


यह भी देखें

  • बबल सॉर्ट, आम तौर पर धीमी एल्गोरिथ्म, कंघी सॉर्ट का आधार है।
  • कॉकटेल प्रकार , या द्विदिशात्मक बबल सॉर्ट, बबल सॉर्ट का रूप है जो कछुओं की समस्या का भी समाधान करता है, यद्यपि कम प्रभावी ढंग से।

संदर्भ

  1. 1.0 1.1 1.2 Brejová, Bronislava (15 September 2001). "Analyzing variants of Shellsort". Information Processing Letters. 79 (5): 223–227. doi:10.1016/S0020-0190(00)00223-4.
  2. Dobosiewicz, Wlodzimierz (29 August 1980). "An efficient variation of bubble sort". Information Processing Letters. 11 (1): 5–6. doi:10.1016/0020-0190(80)90022-8.
  3. Lacey, Stephen; Box, Richard (April 1991). "A Fast, Easy Sort: A novel enhancement makes a bubble sort into one of the fastest sorting routines". Hands On. Byte Magazine. Vol. 16, no. 4. pp. 315–318, 320. Entire magazine available at archive.org.
  4. "diminishing increment sort". Retrieved March 9, 2021.
  5. "comb sort". National Institute of Standards and Technology (nist.gov). Retrieved March 9, 2021.