उच्च क्रम के एल्गोरिदम


35

अधिकांश प्रसिद्ध एल्गोरिदम पहले क्रम में हैं, इस अर्थ में कि उनका इनपुट और आउटपुट "सादा" डेटा है। कुछ तुच्छ तरीके से दूसरे क्रम के होते हैं, उदाहरण के लिए छंटाई, हैशटेबल्स या मानचित्र और गुना फ़ंक्शन: वे एक फ़ंक्शन द्वारा पैरामीटर किए जाते हैं, लेकिन वे वास्तव में इसके साथ कुछ भी दिलचस्प नहीं करते हैं, अन्य इनपुट डेटा के टुकड़ों पर इसे छोड़कर।

कुछ दूसरे क्रम के भी हैं लेकिन कुछ और दिलचस्प हैं:

  • विखंडन मोनोग्राम द्वारा पैरामीटर
  • एक नीरस भविष्यवाणी पर एक उंगलियों का बंटवारा
  • उपसर्ग योग एल्गोरिदम, फिर से आमतौर पर एक मोनोइड या एक विधेय आदि द्वारा पैरामीटरित किया जाता है।

अंत में, कुछ इस अर्थ में "सही मायने में" उच्च-क्रम हैं जो मेरे लिए सबसे दिलचस्प हैं:

  • वाई कॉम्बिनेटर
  • अंतर सूची

क्या अन्य उच्च-क्रम वाले एल्गोरिदम मौजूद हैं?

एल्गोरिथ्म के इंटरफेस और / या कार्यान्वयन में एक महत्वपूर्ण तरीके से कम्प्यूटेशनल औपचारिकता के उच्च-क्रम की सुविधाओं का उपयोग करते हुए, "nontrivial उच्च-क्रम" मेरा मतलब है "के तहत मेरे प्रश्न को स्पष्ट करने के प्रयास में"


3
मैंने एक बार ऐसा ही कुछ पूछा था। यहाँ कुछ उत्तर: caml.inria.fr/pub/ml-archives/caml-list/2004/09/…
Radu GRIGore

क्या आप लोग एल्गोरिदम के बारे में बात कर रहे हैं जो एल्गोरिदम और / या एल्गोरिदम लौटाता है?
प्रतीक देवघर

जवाबों:


13

Http://math.andrej.com/ पर बहुत अधिक ऑर्डर फ़ंक्शंस हैं , उदाहरण के लिए डबल घातीय के बारे में पोस्ट में , निम्न हास्केल प्रकार दिखाई देता है (टाइप समानार्थी के साथ विस्तारित):

shift :: Bool -> ((Int -> Bool) -> Bool) -> ((Int -> Bool) -> Bool)

परिमित समय में अनंत खोज के लिए पोस्ट ए हास्केल मोनाड के साथ आप बहुत मज़ा कर सकते हैं - उदाहरण के लिए:

newtype S a = S ((a -> Bool) -> a)
bigUnion :: S (S a) -> S a

मुझे लगता है कि bigUnion का प्रकार 4 या 5 वां क्रम है!


22

एल्गोरिदम का एक समूह है जो "सही मायने में 2 क्रम" हैं, हालांकि आमतौर पर इन शब्दों में स्पष्ट रूप से वर्णित नहीं किया गया है। जब भी हमारे पास सब-लीनियर टाइम एल्गोरिदम होता है, तो निहितार्थ इनपुट के लिए किसी प्रकार का उपयोग होता है, अर्थात वास्तव में इनपुट को एक फ़ंक्शन के रूप में मानते हैं।

उदाहरण:

(1) एक "जुदाई ओरेकल" के साथ काम करते समय एलीपोसिड एल्गोरिदम (जैसे http://math.mit.edu/~vempala/18.433/L18.pdf )

(2) सबमॉड्यूलर फंक्शन मिनिमाइजेशन (उदाहरण के लिए http://people.commerce.ubc.ca/facademy/mccormick/sfmchap8a.pdf )

(3) संपत्ति परीक्षण का पूरा क्षेत्र वास्तव में इस रूप में है ( http://www.wisdom.weizmann.ac.il/~oded/test.html )

(4) क्वेरी मॉडल में संयुक्त नीलामी (जैसे http://pluto.huji.ac.il/~blumrosen/papers/iter.pdf )


15

इस सवाल का एक और जवाब है: कोई भी नहीं है। विशेष रूप से, किसी भी ऐसे (लागू करने योग्य!) उच्च-क्रम एल्गोरिथ्म यंत्रवत् रूप से डी-ऑर्डर एल्गोरिथ्म के बराबर है, जो कि विक्षेपण का उपयोग करता है

मुझे और अधिक सटीक होने दें: जबकि वास्तव में वास्तविक उच्च-क्रम के एल्गोरिदम हैं, व्यवहार में प्रत्येक उदाहरण को पूरी तरह से प्रथम-क्रम प्रोग्राम के रूप में फिर से लिखना हमेशा संभव है । दूसरे शब्दों में, कोई संतृप्त उच्च-क्रम के कार्यक्रम नहीं हैं - अनिवार्य रूप से क्योंकि कार्यक्रमों के इनपुट / आउटपुट बिट स्ट्रिंग्स हैं। [हाँ, वे बिट स्ट्रिंग फ़ंक्शंस का प्रतिनिधित्व कर सकते हैं, लेकिन यह बात है: वे फ़ंक्शंस का प्रतिनिधित्व करते हैं, वे फ़ंक्शंस नहीं हैं]।

पहले से दिए गए उत्तर उत्कृष्ट हैं, और मेरे उत्तर को उनके विरोधाभासी नहीं माना जाना चाहिए। इसे थोड़े बड़े संदर्भ (स्टैंड-अलोन एल्गोरिदम के बजाय पूर्ण कार्यक्रम) के भीतर से प्रश्न का उत्तर देने के रूप में माना जाना चाहिए। और संदर्भ के इस परिवर्तन से उत्तर काफी हद तक बदल जाता है। मेरे उत्तर की बात यह है कि लोगों को यह याद दिलाना है, जिसे भूलना बहुत आसान है।


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

1
@jkff: मैं आपकी पहली बात से सहमत हूँ - हमें इन आंतरिक गुणों के बारे में निश्चित रूप से चर्चा करनी चाहिए। मैं दूसरे बिंदु से सशक्त रूप से असहमत हूं: आप किसी तरह दावा कर रहे हैं कि एक्सटेंशन और इंटेंसिटी 'समान' हैं, जो कि केवल पेटेंट रूप से गलत है। [मैटिस की पेंटिंग की याद दिलाती है 'यह कोई पाइप नहीं है']
जैक्स कैरेट

आह, हाँ, "एटा रूपांतरण के विश्वासघात"। (\\() -> "Ceci n'est pas une fonction") ()
सीए मैककैन

मैं दावा कर रहा हूं कि अगर दो चीजें बराबर हैं (एक-दूसरे का प्रतिनिधित्व करके), तो आप उनमें से एक के अस्तित्व से इनकार नहीं कर सकते :)
jkff

@jkff: इससे असहमत होना मुश्किल है!
जैक्स केयरटे

13

पार्सर कॉम्बिनेटर पुस्तकालयों में फ़ंक्शन का क्रम आम तौर पर काफी अधिक होता है। की जाँच करें यहां तक कि उच्च क्रम कार्य के लिए पार्सिंग या क्यों चाहेंगे क्या कभी किसी ने करने के लिए उपयोग एक छठी आदेश समारोह करना चाहते हैं? क्रिस ओकासाकी द्वारा। जर्नल ऑफ़ फंक्शनल प्रोग्रामिंग , 8 (2): 195-199, मार्च 1998।


यह एक बेहतरीन पेपर है, लेकिन इस चीज के बारे में नहीं, जिसकी मुझे तलाश है। हालांकि कॉम्बिनेटर उच्च-क्रम के हैं, वे बहुत सरल और स्वतंत्र हैं, और उनमें से कोई भी शायद ही एक गैर-तुच्छ एल्गोरिथ्म / डेटास्ट्रक्चर के रूप में गिना जाएगा (हालांकि, शायद कॉम्बीनेटर पार्सर्स खुद होगा)। इसके विपरीत, वाई कॉम्बीनेटर एक निश्चित बिंदु खोजने के लिए एक अत्यधिक nontrivial एल्गोरिथ्म है, और अंतर सूचियां एक चतुर डेटास्ट्रक्चर हैं जो पूरी तरह से उच्च-क्रम के कार्यों से निर्मित हैं। (मैं आपके जवाब को कम नहीं
आंक

13

कम्प्यूटेशनल विश्लेषण वास्तविक संख्याओं को प्रोग्रामेटिक रूप से चिह्नित करता है, क्योंकि वास्तविक संख्याओं में सूचनाओं की एक असीम मात्रा होती है, और इसलिए वास्तविक संख्याओं पर संचालन प्रश्न अर्थ में उच्च-क्रम होता है। आमतौर पर, वास्तविक संख्याओं को बिट्स की अनंत धारा, कैंटर स्पेस पर एक टोपोलॉजिकल दृश्य का उपयोग करके प्रस्तुत किया जाता है, जो कम्प्यूटेशनल टोपोलॉजी के व्यापक क्षेत्र में ब्याज देता है।

क्लाउस वेहराच ने इसके बारे में कंप्यूटेबल टोपोलॉजी की प्रभावकारिता की टाइप टू पदानुक्रम के रूप में बात की है। इसके बारे में अधिक जानने के लिए, 2009 में वेहरच और ग्रुबा, प्राथमिक कम्प्यूटेशनल टोपोलॉजी , और जॉन टकर के शोध पृष्ठ, कम्प्यूटेशनल डेटा के साथ गणना को देखें । मैं अपने प्रश्न में, कैंटर स्पेस के एप्लिकेशन में टकर के पृष्ठ का उल्लेख करता हूं ।


और यह सामान्य रूप से गणना करने योग्य गणितीय वस्तुओं के लिए काफी स्वाभाविक रूप से फैली हुई है: अन्य कम्प्यूटेशनल संख्याएं (जरूरी नहीं कि वास्तविक हों), अनंत समूहों (रिंग्स, बीजगणित, ...) के कम्प्यूटेशनल तत्व, रिक्त स्थान में कम्प्यूटेशनल बिंदु, आदि ऐसे सभी मामलों में, एल्गोरिथम। सिद्धांत चिंताओं को कार्यात्मक प्रतिनिधित्व (गणितीय वस्तु की गणना कैसे करें) से जानकारी निकालने की है, और वस्तु से ही नहीं।
ex0du5

13

निरंतरता कार्यात्मक का एक मापांक एक मानचित्र है mजो एक (निरंतर) कार्यात्मक को स्वीकार करता है F : (nat -> nat) -> natऔर एक संख्या को kऐसे आउटपुट करता है कि F f = F gजब भी f i = g iसभी के लिए i < kनिरंतरता के मापांक (बहुत कुशल नहीं) की गणना के लिए एल्गोरिदम हैं, जिससे यह 3 क्रम के एल्गोरिथ्म का एक उदाहरण बन जाता है।


9

नोआम के उत्तर को पूरक करने के लिए , ऐसी कई परिस्थितियाँ हैं जहाँ एक फ़ंक्शन का आउटपुट (एक स्पष्ट प्रतिनिधित्व) होना महत्वपूर्ण है ।

C:0,1n0,1mA (α,L,ϵ)CnAM1,,ML

w0,1m,PrA[m, (Ag(C(m),w)α i[L], j[n], PrMi[Mi(j)=mj]1ϵ)]2/3

AgA2/3ϵmmα


5

ग्राफ एल्गोरिदम में, कोने और किनारों को आमतौर पर सादे डेटा के रूप में माना जाता है लेकिन उन्हें वास्तव में उत्पादक रूप से सामान्यीकृत किया जा सकता है ताकि वे प्रोग्राम-ऑन-डिमांड पर उत्पन्न हो सकें।

मेरी पीएचडी (कम्प्यूटेशनल केमिस्ट्री में) के दौरान मैंने कई ग्राफ़ एल्गोरिदम को उच्च-क्रम के रूप में लागू किया ताकि उन्हें निहित ग्राफ़ के विश्लेषण के लिए लागू किया जा सके, मुख्यतः क्योंकि मेरा वास्तविक ग्राफ़ अनंत था इसलिए मैं उन्हें स्पष्ट रूप से संग्रहीत करने का जोखिम नहीं उठा सकता था! विशेष रूप से, मैं इकाई कोशिकाओं (सुपरकैल्स) के 3D झुकाव के रूप में प्रतिनिधित्व किए गए अनाकार सामग्रियों की टोपोलॉजी का अध्ययन कर रहा था।

उदाहरण के लिए, आप iइस तरह के मूल शीर्ष के nth-निकटतम पड़ोसी शेल की गणना करने के लिए एक फ़ंक्शन लिख सकते हैं :

nth i 0 = {i}
nth i 1 = neighbors i
nth i n = diff (diff (fold union empty (map neighbors (nth i (n-1)))) (nth i (n-1))) (nth i (n-2))

जहां neighborsएक फ़ंक्शन है जो दिए गए शीर्ष पर पड़ोसी लंबवत का सेट लौटाता है।

उदाहरण के लिए, 2 डी वर्ग जाली:

neighbors (x, y) = {(x-1, y), (x+1, y), (x, y-1), (x, y+1)}

इस संदर्भ में अन्य दिलचस्प एल्गोरिदम में फ्रांजब्लॉ का सबसे छोटा पथ रिंग आँकड़े शामिल हैं।


यह मुझे एक प्रश्न के लिए लाता है जो मैंने एक बार किया था। यदि इस तरह से रेखांकन को परिभाषित करने के प्रोग्रामेटिक तरीके हैं, तो क्या एक स्व-रेफरेंशियल पैराडॉक्सिकल ग्राफ को परिभाषित करने का एक तरीका है?
सुरेश वेंकट

1
{x:xx}{x:xx}

ज़रूर। लेकिन क्या यह एक आत्म-संदर्भीय ग्राफ है ?
सुरेश वेंकट

@ सुरेश: यह एक कार्यात्मक भाषा में परिभाषित किया गया एक ग्राफ है, जिसमें एक प्रकार Uका कोने और U -> U -> Boolकिनारों का एक कार्य होता है।
sdcvvc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.