सबसे अस्पष्ट छँटाई एल्गोरिथ्म क्या है जो आप जानते हैं? [बन्द है]


22

मैं सिर्फ एक Sortvis.org ब्लॉग पोस्ट के माध्यम से साइकिल के बारे में पढ़ता हूं। यह शायद मैंने अब तक के बारे में सुना सबसे अस्पष्ट है, क्योंकि यह गणित का उपयोग करता है जिससे मैं परिचित नहीं हूं (पूर्णांक सेट के क्रमपरिवर्तन में चक्रों का पता लगाना)।

सबसे अस्पष्ट क्या है जिसे आप जानते हैं?


4
पढ़ने के लिए वापस आना होगा।
मार्क सी

इस के साथ अच्छा समय, मेरे डेटा संरचनाओं वर्ग अभी कवर प्रकार शुरू कर दिया। अब, मुझे न केवल बुनियादी प्रकारों की समझ है, बल्कि पागल भी हैं।
जेसन

जवाबों:



12

Slowsort गुणा और आत्मसमर्पण द्वारा काम करता है (विभाजन और जीत के विपरीत)। यह दिलचस्प है क्योंकि यह काफी कम से कम कुशल छँटाई एल्गोरिथ्म है जो बनाया जा सकता है (asymptotically, और प्रतिबंध के साथ कि इस तरह के एक एल्गोरिथ्म, जबकि धीमी गति से किया जा रहा है, अभी भी हर समय एक परिणाम की दिशा में काम करना चाहिए)।

यह इसे bogosort से बंद कर देता है क्योंकि सबसे अच्छे मामले में, bogosort काफी कुशल है - अर्थात्, जब सरणी पहले से ही सॉर्ट की जाती है। इस तरह के सर्वश्रेष्ठ व्यवहार से स्लोवॉर्ट "पीड़ित" नहीं होता है। यहां तक कि अपने सबसे अच्छे रूप मामले में, यह अभी भी क्रम है $ \ ओमेगा (एन ^ \ frac {\ log_2n} {2 + \ epsilon}) $ के लिए ε > 0।

यहाँ इसका छद्मकोड है, जिसे जर्मन विकिपीडिया लेख से अनुकूलित किया गया है :

function slowsort(A, i, j):
  if i >= j: return

  m = (i + j) / 2
  slowsort(A, i, m)
  slowsort(A, m + 1, j)

  if A[j] < A[m]:
    swap(A[j], A[m])

  slowsort(A, i, j - 1)

1
बोगोसोर्ट तुच्छ रूप से अपने चरणों के क्रम को उलट कर सबसे अच्छे मामले में अधिक pessimal बनाया जा सकता है: पहला, फेरबदल। अगर छांटा गया है, तो बंद करो।
एलेक्स फेइमैन

3
@ एलेक्स: नहीं। यह कुछ भी नहीं बदलता है। बोगोसॉर्ट अभी भी पहले चरण के बाद समाप्त हो जाएगा क्योंकि मौका के रूप में, फेरबदल अनुक्रम को क्रमबद्ध किया होगा। बोगोसोर्ट अभी भी एक सबसे अच्छे मामले को सबसे खराब स्थिति और औसत मामले से मौलिक रूप से अलग-अलग रन-टाइम (ओ (एन)) के साथ प्रदर्शित करता है। Slowsort में बस यह नहीं है।
कोनराड रुडोल्फ

आह, मैं केवल प्रारंभिक परिस्थितियों के बारे में सोच रहा था, निष्पादन पथ के नहीं!
एलेक्स फ़िनमैन

इस प्यार से :) कुछ भी नहीं की तरह जानवर बल ...

8

मुझे नहीं पता कि यह अस्पष्टता के रूप में गिना जाता है, लेकिन सबसे हास्यास्पद छंटाई "एल्गोरिदम" में से एक बोगोसॉर्ट है । बोगोसॉर्ट पेज के लिंक भी मजेदार हैं।

और "क्वांटम बोगो-सॉर्ट" खंड पर यह मणि है।

तर्कपूर्ण रूप से, 2 एन ब्रह्मांड का निर्माण भी बहुत स्मृति-गहन है।

हम्म् ... आप कह सकते हैं कि :-)।


मैं यह पसंद है। मुझे विशेष रूप से "क्वांटम बोगोसॉर्ट" का विचार पसंद है :-)
डीन हार्डिंग

6

एक और अस्पष्ट "एल्गोरिथ्म" इंटेलिजेंट डिज़ाइन सॉर्ट है - लेकिन कोई एल्गोरिथ्म तेज़ नहीं है या मेमोरी की खपत कम है :)


उस एल्गोरिथ्म की सबसे अच्छी विशेषताओं में से एक यह है कि हम सिर्फ यह जानते हैं कि यह काम करता है - कुछ भी विश्लेषण या साबित करने की कोई आवश्यकता नहीं है।
कालेब


5

मुझे लगता है कि बबल सॉर्ट इस स्थिति में भी गलत उत्तर होगा

:)


3

नूथ वॉल्यूम 3 1 , अभ्यास में से एक के जवाब में, एक नाममात्र सॉर्टिंग एल्गोरिदम का कार्यान्वयन देता है जो मूल रूप से एक प्राचीन कोड गोल्फ है - सबसे छोटा प्रकार जिसे आप MIX असेंबली भाषा में लिख सकते हैं। लघु कोड हे (एन 3 ) जटिलता के ओह-मामूली कीमत पर आता है, हालांकि ...

1 कम से कम पुराने संस्करणों में। नए संस्करण के लिए MIXAL के संशोधनों को देखते हुए, मुझे यकीन नहीं है कि यह अभी भी वहां है, या यहां तक ​​कि मूल MIXAL में किए गए अर्थ का मामूली सा बनाता है।



2

मुझे नहीं पता कि यह सबसे अस्पष्ट है, लेकिन स्पेगेटी सॉर्ट उन स्थितियों में सबसे अच्छा है जहां आप इसका उपयोग कर सकते हैं।


यह "स्लीप सॉर्ट" के विचार में काफी समान है और अनुक्रमण डीएनए (सेंगर अनुक्रमण) के लिए जैव सूचना विज्ञान में काफी उपयोग किया जाता है।
कोनराड रुडोल्फ

2

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


1

मैंने एक बार CRAY असेंबलर में वेक्टर रजिस्टर्स बबल सॉर्ट में किया था। मशीन में एक डबल शिफ्ट निर्देश था, जिसने आपको एक शब्द द्वारा वेक्टर रजिस्टर की सामग्री को ऊपर / नीचे स्थानांतरित करने की अनुमति दी थी। हर दूसरे बिंदु को दो सदिश रजिस्टरों में रखें, तो आप एक पूर्ण बबल सॉर्ट कर सकते हैं बिना किसी अन्य मेमोरी रेफरेंस के जब तक आप काम नहीं करते। बुलबुला प्रकार की एन ** 2 प्रकृति को छोड़कर यह कुशल था।

मुझे भी एक बार एक ही क्रम के लिए जितनी जल्दी हो सके 4 वेक्टर की एक फ्लोटिंग पॉइंट सॉर्ट करने की आवश्यकता थी। क्या यह टेबल लुकअप द्वारा किया गया था (ए 2-ए 1 का साइन बिट एक बिट है, ए 3-ए 1 का संकेत एक और बिट है ..., तो आप एक टेबल में क्रमपरिवर्तन वेक्टर को देखते हैं। यह वास्तव में सबसे तेज समाधान था जो मैं आ सकता था। के साथ। आधुनिक आर्किटेक्चर पर अच्छा काम नहीं करता है, हालांकि, फ्लोटिंग और पूर्णांक इकाइयां अलग हो जाती हैं।


क्या आपके पास अभी भी इसके लिए स्रोत है? मुझे इसकी जाँच करने में दिलचस्पी होगी!
सोवा

कोई स्रोत नहीं, यह एक कंपनी के लिए एक अप्रचलित मशीन के लिए था जिसने अंततः मुझे बंद कर दिया। टेबल लुकिंग कठिन नहीं है: sb1 = 1 & ((a2-a1) >> 63); sb2 = 2 & ((a3-a1) >> 62); ... सूचकांक = sb1 | sb2 | sb3 | आदेश की एक तालिका देखने के द्वारा।
ओमेगा सेंटौरी

1

Google कोड जैम में गोरोसोर्ट नामक एक एल्गोरिथ्म के बारे में एक समस्या थी, जो मुझे लगता है कि उन्होंने समस्या के लिए आविष्कार किया था।

गोरो की 4 भुजाएँ हैं। गोरो बहुत मजबूत है। आप गोरो के साथ खिलवाड़ नहीं करते। गोरो को एन अलग-अलग पूर्णांक की एक सरणी को सॉर्ट करने की आवश्यकता है। एल्गोरिदम गोरो की ताकत नहीं हैं; ताकत है गोरो की ताकत। गोरो की योजना सरणी के कई तत्वों को पकड़ने के लिए अपने दो हाथों की उंगलियों का उपयोग करना है और तालिका को अपने तीसरे और चौथे मुट्ठी के साथ जितना संभव हो उतना मुश्किल से मारना है। इससे एरे के असुरक्षित तत्व हवा में उड़ जाएंगे, बेतरतीब ढंग से हिल जाएंगे, और खाली स्थानों में वापस गिर जाएंगे।

http://code.google.com/codejam/contest/dashboard?c=975485#s=p3


0

नाम याद नहीं है, लेकिन यह मूल रूप से था

while Array not sorted

  rearrange the array in a random order

यह बोगोसॉर्ट है, अन्य उत्तरों में उल्लेख किया गया है।
MatrixFrog

0

खोल छाँट

शायद एल्गोरिथ्म ही वह अस्पष्ट नहीं है, लेकिन जो वास्तव में व्यवहार में उपयोग किए जाने वाले कार्यान्वयन को नाम दे सकता है? हाँ मैं!

TIGCC (TI-89/92 / V200 रेखांकन कैलकुलेटर के लिए एक GCC- आधारित संकलक) qsortअपने मानक पुस्तकालय में कार्यान्वयन के लिए शैल प्रकार का उपयोग करता है :

__ATTR_LIB_C__ void qsort(void *list, short num_items, short size, compare_t cmp_func)
{
  unsigned short gap,byte_gap,i,j;                
  char *p,*a,*b,temp;                       
  for (gap=((unsigned short)num_items)>>1; gap>0; gap>>=1)    // Yes, this is not a quicksort,
    {                                                         // but works fast enough...    
      byte_gap=gap*(unsigned short)size;
      for(i=byte_gap; i<((unsigned short)num_items)*(unsigned short)size; i+=size)
        for(p=(char*)list+i-byte_gap; p>=(char*)list; p-= byte_gap)
          {
            a=p; b=p+byte_gap;
            if(cmp_func(a,b)<=0) break;
            for(j=size;j;j--)
              temp=*a, *a++=*b, *b++=temp;
          }
    }
}

शैल आकार कोड आकार को कम रखने के लिए क्विकॉर्ट के पक्ष में चुना गया था। यद्यपि यह विषमतापूर्ण जटिलता है, लेकिन TI-89 में RAM (190K, कार्यक्रम का आकार और किसी भी अनारक्षित चर के कुल आकार) की पूरी मात्रा नहीं है, इसलिए यह मान लेना सुरक्षित है कि मदों की संख्या नीचे।

मेरे द्वारा लिखित एक कार्यक्रम में बहुत धीमी गति से होने की शिकायत के बाद एक तेज कार्यान्वयन लिखा गया था। यह असेंबली ऑप्टिमाइजेशन के साथ बेहतर गैप साइज का उपयोग करता है। यह यहाँ पाया जा सकता है: qsort.c

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