पुस्तक से एल्गोरिदम।


358

पॉल एर्दोस ने "बुक" के बारे में बात की जहां भगवान प्रत्येक गणितीय प्रमेय का सबसे सुरुचिपूर्ण प्रमाण रखता है। इसने एक पुस्तक को प्रेरित किया (जो मुझे विश्वास है कि अब इसके 4 वें संस्करण में है): पुस्तक से प्रमाण

यदि भगवान के पास एल्गोरिदम के लिए एक समान पुस्तक थी, तो आपको लगता है कि कौन सा एल्गोरिदम (उम्मीदवार) एक उम्मीदवार होगा?

यदि संभव हो, तो कृपया एक क्लिक करने योग्य संदर्भ और कुंजी अंतर्दृष्टि (ओं) को भी आपूर्ति करें जो इसे काम करते हैं।

कृपया प्रति उत्तर केवल एक एल्गोरिथ्म, कृपया।


11
बड़ा अच्छा सवाल! [संपादित करें:} एक सवाल हम एल्गोरिदम और डेटास्ट्रक्चर के बीच की रेखा कहां खींचते हैं? क्या होगा यदि एक एल्गोरिथ्म के लिए महत्वपूर्ण अंतर्दृष्टि एक डायस्टास्ट्रक्चर से संबंधित है (उदाहरण के लिए व्युत्क्रम एकरमन फ़ंक्शन में UNION FIND)?
रॉस स्नाइडर

4
एक महान स्रोत और शायद इस तरह की किताब के लिए एक उम्मीदवार "इनसाइक्लोपीडिया ऑफ अल्गोरिद्म" स्प्रिंगर.com
मार्कोस विलाग्रा

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

49
@ सपरकोल्डेव आपको ईश्वर में विश्वास करने की आवश्यकता नहीं है, लेकिन आपको उनकी पुस्तक पर विश्वास करना चाहिए। ;-)
रॉस स्नाइडर

10
1985 में एक व्याख्यान के दौरान, एर्दो ने कहा, "आपको ईश्वर में विश्वास करने की आवश्यकता नहीं है, लेकिन आपको द बुक में विश्वास करना चाहिए।"
रॉबर्ट मस्सौली

जवाबों:


116

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

विकिपीडिया सेट डिज़ास्टर वन का अच्छा परिचय देता है ।


109

नथ-मॉरिस-प्रैट स्ट्रिंग मैचिंग। कोड की सबसे पतली आठ लाइनें जो आप कभी देखेंगे।


4
यह थोड़े दिमाग का अहसास है कि यह कुछ ऐसा था जो किसी समय स्पष्ट नहीं था और अब केवल स्पष्ट है क्योंकि वे इसके साथ आए थे और हमने इसे सीखा ... मुझे लगता है कि हमें कैर के इतिहास के सिद्धांत को गणित और कंप्यूटर विज्ञान पर लागू करना चाहिए ।
रित्विक बोस

1
वर्णन के अनुसार, मैं कहूंगा कि यह बॉयर-मूर तेजी से घटित होने वाली खोज से संबंधित है।
bart

2
@Mechko तथ्य यह है कि इस एल्गोरिथ्म को एक साथ और स्वतंत्र रूप से अलग-अलग लोगों द्वारा खोजा गया था एक संकेत है कि यह एक हद तक स्पष्ट है। क्या कुछ "स्पष्ट" है परियोजना बाधाओं और व्यापक प्रोग्रामिंग पर्यावरण का एक कार्य है। यदि आपको (1) तेज़ पाठ खोज की आवश्यकता है और (2) आप सही मायने में O (n) एल्गोरिदम के महत्व से अवगत हैं, और (3) आपने पहले आंशिक मिलान वाले पाठ का सामना किया है, और (4) आपके पास समय है चीजों को "सही" करने के लिए, तो यह एल्गोरिथ्म शायद स्पष्ट है।
मैट गलाघेर

में एक साक्षात्कार नुथ ने कहा कि एल्गोरिथ्म के लिए विचार स्टीफन कुक की अध्ययन से आया दो-तरफा परिमित automaton खोल देना करने के लिए।
केव

@ केव मूल केएमपी पेपर से धारा 7 (ऐतिहासिक रिमार्क्स) पढ़ें। इसकी बड़ी टिप्पणी है। मॉरिस ने एक टेक्स्ट एडिटर लिखने के बारे में जो "समझने के लिए सिस्टम के अन्य कार्यान्वयनकर्ताओं के लिए बहुत जटिल था"। नुथ के बारे में "नथुथ के अनुभव में पहली बार कि ऑटोमेटा सिद्धांत ने उसे सिखाया था कि एक वास्तविक प्रोग्रामिंग समस्या को हल करने से बेहतर है कि वह इसे पहले हल कर सके"। और "नुथ को यह सीखने के लिए तैयार किया गया था कि कुक के प्रमेय को जाने बिना, मॉरिस ने एल्गोरिथ्म की खोज की थी।" आनंद।
हेंड्रिक जान

93

ब्लम, फ्लोयड, प्रैट, रिवेस्ट, और टार्जन का एल्गोरिथ्म रैखिक समय में एक अनसुनी सूची के k तत्व को खोजने के लिए एक सुंदर एल्गोरिथ्म है, और केवल इसलिए काम करता है क्योंकि नंबर केवल मास्टर प्रमेय में फिट होने के लिए सही हैं । यह इस प्रकार है:

  1. पाँच तत्वों के प्रत्येक क्रम को क्रमबद्ध करें।
  2. प्रत्येक में माध्यिका निकालें।
  3. इस सूची के माध्यिका को खोजने के लिए पुनः प्राप्त करें।
  4. ध्येयवादियों के ध्येय पर धुरी (क्विकॉर्ट में)
  5. उस सूची में सूची और स्थिति के उचित पक्ष का चयन करें, और पुनरावृत्ति करें।

3
यह मेरे पसंदीदा एल्गोरिदम में से एक है। मुझे इसके लिए एक अंतर्ज्ञान पसंद है जो मैंने चेज़ेल की विसंगति पुस्तक से सीखा है: तत्वों के समूहों के मध्यस्थों की संख्या इनपुट संख्याओं की क्रमबद्ध सूची में अंतराल के लिए एक -net की तरह है । इसलिए एल्गोरिथ्म एक सामान्य प्रतिमान का अनुसरण करता है: a -net तेजी से गणना करें , नेट पर समस्या को हल करें, समाधान को परिष्कृत करने के लिए इनपुट के कुछ भाग पर पुनरावृत्ति करें, जब तक कि आपके पास सटीक समाधान न हो। यह बहुत उपयोगी तकनीक हैε ε1/ϵϵϵ
सैशो निकोलेव

5
BTW एक बार जब आप समूहों का आकार बदल देते हैं, तो स्थिरांक इतने जादुई नहीं होते हैं। वे निश्चित रूप से मास्टर प्रमेय में सही चीज देने के लिए अनुकूलित हैं
साशो निकोलेव

रूबी कार्यान्वयन, gist.github.com/chadbrewbaker/7202412 एल्गोरिथ्म का एक संस्करण है जो अंतरिक्ष (निरंतर, लॉग) का उपयोग करता है, या क्या आपको मध्यस्थों को पकड़ने के लिए रैखिक खरोंच स्थान का उपयोग करना पड़ता है?
चाड ब्रूबैकर

2
दावा है कि "यह केवल इसलिए काम करता है क्योंकि मास्टर प्रमेय में फिट होने के लिए संख्याएं सही हैं" वास्तव में सच नहीं है। यदि आप संख्या को एक बड़ी संख्या साथ बदलते हैं , तो यह देखना आसान है कि जिन दो संख्याओं को से कम करने के लिए और अभिसरण करना है , इसलिए सभी पर्याप्त रूप से बड़े कार्य करें। केवल पहला नंबर है जो काम करता है, यह केवल एक ही नहीं है। एन 1 3 / 4 0 एन 55n13/40n5
विल साविन

88

बाइनरी सर्च सबसे सरल, सुंदर और उपयोगी एल्गोरिथ्म है जिसे मैंने कभी भी चलाया है।


मैं सहज के साथ सुरुचिपूर्ण की जगह लेगा। इसके बारे में सुरुचिपूर्ण कुछ भी नहीं है; इसकी सादगी ही इसकी असली खूबसूरती है।
राबर्ट मासायोली

@ रोबर्ट मस्सली: मैंने सुंदर के साथ सुरुचिपूर्ण को बदल दिया। आप इसके बारे में सही थे।
मीकल्मोनी

2
और सही ढंग से लिखना मुश्किल
जॉन

मेरे पहले स्नातक एल्गोरिदम पाठ्यक्रम में हमारे पास 15 मिनट की क्विज़ थी, जहाँ हमें 2-3 समस्याओं को हाथ से हल करना था। इस तरह के पहले प्रश्नोत्तरी में एक द्विआधारी खोज पेड़ और ढेर के बारे में दो प्रश्न शामिल थे। मुझे यह जानने के लिए शर्मिंदा और निराश होना पड़ा कि मैंने बाइनरी खोज समस्या को गलत पाया है, इससे पहले कि यह बताया जाए कि लगभग 30 लोगों की एक कक्षा में दो सही उत्तर थे। लेकिन यह जानते हुए भी कि, पेशेवर समुदाय को सही होने में 15 साल लग गए।
स्टेला बिडरमैन

84

मुझे आश्चर्य है कि यहां सभी जोड़े सबसे छोटे रास्तों के लिए फ्लोयड-वारशॉल एल्गोरिथ्म नहीं देखा गया है:

d[]: 2D array. d[i,j] is the cost of edge ij, or inf if there is no such edge.

for k from 1 to n:
  for i from 1 to n:
    for j from 1 to n:
      d[i,j] = min(d[i,j], d[i,k] + d[k,j])

सबसे छोटा, स्पष्ट गैर-तुच्छ एल्गोरिदम में से एक, और प्रदर्शन बहुत ही तेज़ है जब आप समझते हैं कि किनारे हो सकते हैं। गतिशील प्रोग्रामिंग के लिए यह मेरा पोस्टर बच्चा होगा!O ( n 2 )O(n3)O(n2)


2
इस एल्गोरिथ्म को वास्तव में साफ-सुथरे तरीके से सामान्यीकृत किया जा सकता है। उदाहरण के लिए देखें r6.ca/blog/20110808T035622Z.html और cl.cam.ac.uk/~sd601/papers/semirings.pdf
मिखाइल ग्लुशेनकोव


73

कुछ हद तक तुच्छ लग सकता है (विशेष रूप से अन्य उत्तरों की तुलना में), लेकिन मुझे लगता है कि क्विकॉर्ट वास्तव में सुरुचिपूर्ण है। मुझे याद है कि जब मैंने पहली बार देखा तो मुझे लगा कि यह वास्तव में जटिल है, लेकिन अब यह सब बहुत सरल लगता है।


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

2
एक एल्गोरिथ्म के "सार" या "नैतिक" का विचार निश्चित रूप से मेलिसा ई। ओ'नील ( cs.hmc.edu/~oneill/papers/ieve-JFP) द्वारा सुंदर पेपर एरेस्टोस्थनीज़ ऑफ़ द रियल पेपर से मिलता है। pdf ) और क्विकॉर्ट चर्चा उस पेपर के ltU चर्चा ( lambda-the-ultimate.org/node/3127 ) से आती है , विशेष रूप से इस टिप्पणी पर शुरू: lambda-the-ultimate.org/node/3127/#comment-45549
जॉर्ग डब्ल्यू मित्तग

8
@ Jörg: लिंक्ड लिस्ट पर क्विकॉर्ट को लागू करना पूरी तरह से समझदारी है, और इसमें ऐसेटिक रनिंग टाइम है जैसा कि इसके इन-प्लेस इंप्लीमेंट पर अरेक्स (हेक, यहां तक ​​कि नेव पर आउट-ऑफ-प्लेस इम्प्लीमेंटेशन का एक ही रनिंग टाइम है) - दोनों ऑन औसत और सबसे खराब स्थिति में। अंतरिक्ष उपयोग के लिए, यह वास्तव में अलग है, लेकिन यह भी कहा जाना चाहिए कि यहां तक ​​कि "इन-प्लेस" संस्करण के लिए गैर-स्थिर अतिरिक्त (कॉल स्टैक!) की आवश्यकता होती है, एक तथ्य जिसे आसानी से अनदेखा किया गया है।
कोनराड रुडोल्फ

इसके अलावा यह व्लादिमीर यारोस्लावस्की के दोहरे पिवट क्विकॉर्ट का उल्लेख करने योग्य है। यह कम से कम 20% अधिक तेज होना चाहिए मूल
क्विकॉर्टर्म

सिद्धांत में क्विकॉर्ट्स सरल है (4 चरणों में उल्लिखित किया जा सकता है) और अत्यधिक अनुकूलित किया जा सकता है, लेकिन व्यवहार में इसे सही ढंग से कोड करना बहुत मुश्किल है। यही वजह है कि इसे मेरा वोट नहीं मिला।
डेनिस


50

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

उस नोट पर, AKS primality test जिसने PRIMES को P में दिखाया है, निश्चित रूप से The Book में होना चाहिए!


49

Schwartz-Zippel lemma के साथ बहुपद पहचान परीक्षण :

यदि किसी ने आपको आधी रात को जगाया और आपसे पहचान के लिए दो अविभाज्य बहुपद अभिव्यक्तियों का परीक्षण करने के लिए कहा, तो आप शायद उन्हें सामान्य उत्पाद के रूप में घटाएँ और संरचनात्मक पहचान की तुलना करें। दुर्भाग्य से, कमी घातीय समय ले सकती है; यह बूलियन अभिव्यक्तियों को सामान्य रूप से अलग करने के लिए कम करने के लिए अनुरूप है।

मान लें कि आप यादृच्छिक एल्गोरिदम को पसंद करने वाले व्यक्ति हैं, तो आपका अगला प्रयास संभवतः काउंटरटेम्पल की खोज में बहुपत्नी चुने गए बिंदुओं पर बहुपद का मूल्यांकन करना होगा, यदि वे पर्याप्त परीक्षण पास करते हैं, तो बहुपद के समान होने की संभावना है। श्वार्ट्ज-जिप्पल लेम्मा से पता चलता है कि जैसे-जैसे अंक बढ़ते हैं, झूठे सकारात्मक की संभावना बहुत तेजी से कम होती जाती है।

समस्या के लिए कोई नियतात्मक एल्गोरिथ्म ज्ञात नहीं है जो बहुपद समय में चलता है।


यह सुझाव बहुत पहले दिया जाना चाहिए था! धन्यवाद!
अर्नब

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

मैंने स्वतंत्र रूप से एक ही एल्गोरिथ्म का आविष्कार किया था जब मैं कुछ साल पहले एक पेपर पर काम कर रहा था जब तक कि कोई मुझसे नहीं पूछता था कि क्या यह श्वार्ट्ज-ज़िपेल लेम्मा नहीं है? और मैंने कहा, वह क्या है? :)
हीलियम

46

गहराई पहली खोज । यह कई अन्य एल्गोरिदम का आधार है। यह भी धोखा देने वाला सरल है: उदाहरण के लिए, यदि आप एक बीएफएस कार्यान्वयन में कतार को एक स्टैक द्वारा प्रतिस्थापित करते हैं, तो क्या आपको डीएफएस मिलता है?


1
यह प्रोलॉग निष्पादन का आधार भी है!
muad

1
बीएफएस के बारे में क्या बात है कि मुझे याद आ रही है? मैंने सोचा होगा कि उत्तर "हाँ, आपको डीएफएस मिलता है"।
उमर एंटोलिन-केमरेना

1
खैर, हर कोई लगता है कि यह समस्या तुच्छ है। इसके अलावा, हर कोई लगता है कि उत्तर "हां" है, जो गलत है। जवाब वास्तव में "इस बात पर निर्भर करता है कि आप किस बीएफएस कार्यान्वयन के साथ शुरू करते हैं"। देखें cs.stackexchange.com/questions/329/… (यह एक सवाल है जिसे मैंने CS.SE के बीटा चरण में मदद करने के लिए पोस्ट किया है)
Radu GRIGore

यहाँ भी संक्षेप में चर्चा की गई है: ics.uci.edu//~eppstein/161/960215.html
रादु GRIGore

42

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

  1. प्रत्येक नोड को एक दूरी मान असाइन करें। इसे हमारे प्रारंभिक नोड के लिए शून्य पर सेट करें और अन्य सभी नोड्स के लिए अनन्तता के लिए।
  2. सभी नोड्स को परिकल्पित के रूप में चिह्नित करें। वर्तमान के रूप में प्रारंभिक नोड सेट करें।
  3. वर्तमान नोड के लिए, इसके सभी परिकल्पित पड़ोसियों पर विचार करें और उनकी अस्थायी दूरी (प्रारंभिक नोड से) की गणना करें। उदाहरण के लिए, यदि वर्तमान नोड (ए) की दूरी 6 है, और इसे दूसरे नोड (बी) के साथ जोड़ने वाली बढ़त 2 है, तो ए के माध्यम से बी की दूरी 6 + 2 = 8 होगी। यदि यह दूरी पहले दर्ज की गई दूरी (शुरुआत में अनंत, प्रारंभिक नोड के लिए शून्य) से कम है, तो दूरी को ओवरराइट कर दें।
  4. जब हम वर्तमान नोड के सभी पड़ोसियों पर विचार कर रहे हैं, तो इसे विज़िट के रूप में चिह्नित करें। एक विज़िट किए गए नोड को फिर से कभी भी चेक नहीं किया जाएगा; अब दर्ज की गई दूरी अंतिम और न्यूनतम है।
  5. यदि सभी नोड्स का दौरा किया गया है, तो समाप्त करें। अन्यथा, अगले "वर्तमान नोड" के रूप में छोटी दूरी (प्रारंभिक नोड से) के साथ अनविसीड नोड सेट करें और चरण 3 से जारी रखें।


40

जेंट्रीज फुल्ली होमोमोर्फिक एनक्रिप्शन स्कीम (या तो आदर्श लैटिस या पूर्णांक से अधिक) बहुत सुंदर है। यह किसी तीसरे पक्ष को निजी कुंजी तक पहुंच के बिना एन्क्रिप्ट किए गए डेटा पर मनमानी गणना करने की अनुमति देता है।

एन्क्रिप्शन योजना कई उत्सुक टिप्पणियों के कारण है।

  • पूरी तरह से होमोमोर्फिक एन्क्रिप्शन स्कीम प्राप्त करने के लिए, किसी को केवल एक ऐसी स्कीम की आवश्यकता होती है, जो इसके अलावा और गुणन में होमोमोर्फिक हो। ऐसा इसलिए है क्योंकि जोड़ और गुणा (मॉड 2) AND, OR, NOT NOT गेट्स (और इसलिए ट्यूरिंग कंप्लीटनेस) प्राप्त करने के लिए पर्याप्त हैं।
  • यही कारण है कि अगर इस तरह के एक योजना किया जा करने के लिए, लेकिन कुछ सीमाओं के कारण केवल कुछ परिमित गहराई का सर्किटों के लिए क्रियान्वित किया जा सकता है, तो एक कर सकते हैं थे homomorphically मुख्य गोपनीयता का त्याग किए बिना सर्किट गहराई सीमा रीसेट करने के लिए डिक्रिप्शन और reencyption प्रक्रिया का मूल्यांकन।
  • इस योजना के लिए डिक्रिप्शन फ़ंक्शन के सर्किट संस्करण की गहराई को "स्क्वाशिंग" करके, कोई व्यक्ति मूल रूप से परिमित सर्किट की गणना कर सकता है, उथले सर्किट एक मनमाने ढंग से गणना करता है।

अपनी थीसिस में, क्रेग जेंट्री ने क्रिप्टोग्राफी में एक लंबी स्थायी (और भव्य) खुली समस्या को हल किया। तथ्य यह है कि एक पूरी तरह से होमोमोर्फिक योजना मौजूद है जो मांग करती है कि हम पहचानते हैं कि कम्प्यूटेबिलिटी के लिए कुछ अंतर्निहित संरचना है जिसे हमने अन्यथा अनदेखा किया है।

http://crypto.stanford.edu/craig/craig-thesis.pdf

http://eprint.iacr.org/2009/616.pdf

http://portal.acm.org/citation.cfm?id=1666420.1666445



38

मैट्रिक्स गुणन के लिए स्ट्रैसन का एल्गोरिदम


शायद तब तक इंतजार करेंगे जब तक हमें पता चलेगा कि यह इष्टतम है।
थॉमस अहले

यह इष्टतम नहीं है, कम से कम, asymptotically ... मुझे लगता है कि स्ट्रैसेन के एल्गोरिथ्म को शामिल करने के लिए आप पहले Karatsuba के एल्गोरिथ्म को शामिल करने के लिए मजबूर करते हैं।
तीमुथियुस सूर्य

35

आंधी-Shapley स्थिर शादी एल्गोरिथ्म । यह एल्गोरिथ्म लालची और बहुत सरल है, यह पहली बार में स्पष्ट नहीं है कि यह क्यों काम करेगा, लेकिन फिर शुद्धता का प्रमाण फिर से समझना आसान है।


+1 क्योंकि विवाह के बारे में पुस्तक से प्रकाशित प्रमाणों में एक अध्याय भी है ...
ixtmixilix

34

प्रत्यय सरणियों के निर्माण के लिए रेखीय समय एल्गोरिथ्म वास्तव में सुंदर है, हालांकि यह वास्तव में मान्यता प्राप्त नहीं करता था जो इसके हकदार थे http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf


मैं है कि यह लगता है कि है कि आप क्या अन्यथा लगता है बनाता है - मान्यता यह हकदार प्राप्त? उदाहरण के लिए, यह C ++ अनुक्रम विश्लेषण लाइब्रेरी SeqAn में लागू किया गया है।
कोनराड रुडोल्फ

यह ध्यान देने योग्य है कि अब कई अन्य रैखिक और गैर रेखीय समय प्रत्यय सरणी निर्माण एल्गोरिदम हैं, जो कि कहीं भी पास नहीं हैं, हालांकि अभ्यास में काफी तेज हो सकता है। "जर्नल ऑफ़ एक्सपेरिमेंटल एलगोरिदमिक्स (JEA), वॉल्यूम 12, जून 2008 के एक कुशल, बहुमुखी दृष्टिकोण", इन पंक्तियों के साथ कुछ प्रयोगात्मक परिणाम हैं।
राफेल

@ राफेल: मैं इस तथ्य से थोड़ा सावधान हूं कि पी। उस JEA पेपर के 3, वे केवल वही मानते हैं जो वे "विश्वास" करते हैं, जो O (n ^ 2 log n) की एक "ढीली" बाध्यता है ... क्या आप किसी भी कागजात को प्रोविजनल लीनियर-टाइम एल्गोरिदम से जानते हैं जो अभ्यास की तुलना में तेज़ हैं तिरछा एल्गोरिदम?
user651

32

गाउस विलोपन। यह यूक्लिडियन जीसीडी एल्गोरिथ्म से नूथ-बेंडिक्स तक सामान्यीकरण अनुक्रम को पूरा करता है।


BTW, सामान्यीकरण अनुक्रम क्या है, और ग्रोबनर आधार के लिए बुचबर्गर का एल्गोरिथ्म इसमें कहाँ फिट होता है? (यह नुथ-बेंडिक्स के अनुरूप लगता है, लेकिन मैंने कहीं एक उल्लेख देखा है कि यह गौसियन उन्मूलन को सामान्य करता है ...)
श्रीवत्सआर

6
अनुक्रम है: यूक्लिडियन जीसीडी -> गाऊसी उन्मूलन -> बुचबर्गर -> नुथ-बेंडिक्स। एक (गौसियन एलिमिनेशन के बजाय) यूनीवेट बहुपद डिवीजन और मोडुलो में भी डाल सकते हैं (सामान्यीकरण क्रम में यह गौसियन एलिमिनेशन से 'अलग' है, जीई मल्टीवेरिएट डिग्री 1 है, पॉलीनोमियल रिंग यूनीवेट अनलिमिटेड डिग्री है, बुचबर्गर की असीमित डिग्री है) चर के अलावा ईजीसीडी से जीई या बहुपद की अंगूठी के लिए सामान्यीकरण कूद सबसे बड़ा है, और फिर असीमित हस्ताक्षर के कारण बुचबर्गर से केबी तक भी बड़ा।
मिच

+1: यूक्लिडियन एल्गोरिथ्म गणित में सबसे प्रसिद्ध समीकरण ax-by = 1 को हल करता है। क्यों यह सीएस में दिखाई नहीं देता है अधिक बार एक रहस्य है।
तेगिरी नेनाशी

32

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

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

प्रमेय 1: ...
प्रमाण: स्पष्ट।

प्रमेय 2: ...
प्रमाण: स्पष्ट।

प्रमेय 3: ...
प्रमाण: स्पष्ट।


4
प्रमेय 4:… प्रमाण: पाठक को व्यायाम।
जॉन

31

कछुआ और खरगोश एल्गोरिथ्म । मुझे यह पसंद है क्योंकि मुझे यकीन है कि अगर मैंने अपना पूरा जीवन बर्बाद करने की कोशिश की, तो भी ऐसा कोई रास्ता नहीं है कि मैं इस तरह के आइडिया के साथ आऊं।


6
क्या आप गूंगे एल्गोरिथ्म को जानते हैं जो समस्या को समान स्पर्शोन्मुखता से हल करता है और एक एल्गोरिथम डिज़ाइन पैटर्न का अनुसरण करता है? मैं पुनरावृत्ति गहरी बनाने के बारे में बात कर रहा हूँ। Nth पुनरावृत्ति में आप रूट के 2 ^ n-वें उत्तराधिकारी से शुरू करते हैं और पुनरावृत्ति की तलाश में 2 ^ n उत्तराधिकारी आगे बढ़ते हैं। भले ही आप प्रत्येक पुनरावृत्ति के साथ अपने कुछ कदमों को वापस ले रहे हों, खोज त्रिज्या की ज्यामितीय वृद्धि दर का अर्थ है कि यह स्पर्शोन्मुखता को प्रभावित नहीं करता है।
प्रति वॉगसेन

30

यूक्लिड के असीम रूप से कई अपराधों के प्रमाण के रूप में मौलिक और "तुच्छ" के रूप में एक उदाहरण:

MAX-CUT के लिए 2-सन्निकटन - प्रत्येक शीर्ष के लिए स्वतंत्र रूप से, समान संभावना वाले दो विभाजनों में से एक को असाइन करें।


6
हाँ, एक बहुत अच्छा एल्गोरिथ्म। कम तुच्छ रूप से, 2 के एक अन्य कारक की कीमत पर, यह एल्गोरिथम किसी भी सबमॉड्यूलर फ़ंक्शन को अधिकतम करने के लिए काम करता है , न कि केवल ग्राफ़ कट फ़ंक्शन। यह FOCS 07 से Feige, Mirrokni और Vondrak का परिणाम है
हारून रोथ

30

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


वास्तव में, सभ्य सन्निकटन की गारंटी के साथ अन्य सरल और सुरुचिपूर्ण सन्निकटन एल्गोरिदम भी हैं।
जेन एच। कोरोहेन



25

रेखीय प्रोग्रामिंग के लिए एल्गोरिदम : सिम्प्लेक्स, एलीपोसिड और आंतरिक बिंदु विधियां।

http://en.wikipedia.org/wiki/Linear_programming#Algorithms


और वास्तव में, इन समस्याओं की हमारी समझ को आगे बढ़ाने के लिए कई नोबेल पुरस्कार दिए गए।
रॉस स्नाइडर

@ रास कान्तोरोविच ने एलपी की खोज और संसाधन आवंटन के लिए इसे लागू करने के लिए अर्थशास्त्र में नोबेल पुरस्कार जीता। आप किस अन्य पुरस्कार के बारे में सोच रहे थे?
मार्क रीटब्लाट

@ मर्क कोपरमैन्स को कांटोरोविच के साथ नोबेल पुरस्कार से सम्मानित किया गया था, लेकिन मुझे "कई" कहना अभी भी गलत था।
रॉस स्नाइडर

22

एसएटी उदाहरणों के एक निश्चित वर्ग को हल करने के लिए रॉबिन मोजर एल्गोरिदम। ऐसे उदाहरण लोवेज़ लोकल लेम्मा द्वारा हल किए जा सकते हैं। मोजर एल्गोरिथ्म वास्तव में लेम्मा के बयान का एक डी-यादृच्छिककरण है।

मुझे लगता है कि कुछ वर्षों में उनके एल्गोरिथ्म (और इसकी शुद्धता प्रमाण के लिए तकनीक) को अच्छी तरह से पचाया जाएगा और पुस्तक से एक एल्गोरिथ्म के लिए एक व्यवहार्य उम्मीदवार होने के बिंदु तक परिष्कृत किया जाएगा ।

यह संस्करण उनके मूल पत्र का एक विस्तार है, जो गेबर टार्डोस के साथ लिखा गया है।


21

सभी अच्छी तरह से परिभाषित समस्याओं के लिए मार्कस हटर का सबसे तेज़ और सबसे छोटा एल्गोरिथम

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


21

नुथ के एल्गोरिथ्म एक्स सटीक कवर समस्या के सभी समाधान पाता है । इसके बारे में क्या जादुई है वह तकनीक है जिसे उन्होंने कुशलता से लागू करने का प्रस्ताव दिया था: नृत्य लिंक


20

मुझे लगता है कि हमें शिबेर-विस्किन को शामिल करना चाहिए , जो निरंतर समय में सबसे कम सामान्य पूर्वजों के प्रश्नों का उत्तर देता है, जो कि रैखिक समय में जंगल को प्रीप्रोसेस करता है।

मुझे वॉल्यूम 4 फ़ासिकल 1 में नथ का एक्सपोज़र पसंद है, और उसका संगीत । उन्होंने कहा कि इसे पूरी तरह से समझने में उन्हें दो दिन लग गए, और मुझे उनके शब्द याद हैं:

मुझे लगता है कि यह काफी सुंदर है, लेकिन आश्चर्यजनक रूप से इसे साहित्य में एक बुरा प्रेस मिला है (..) यह गणित पर आधारित है जो मुझे उत्तेजित करता है।


10
रुको, यह सुंदर हो सकता है, लेकिन अगर इसे पूरी तरह से समझने में दो दिन पूरे हो गए, तो क्या यह वास्तव में "पुस्तक से" है?
श्रीवत्सआर

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