पुनरावृत्ति के वास्तविक दुनिया के उदाहरण [बंद]


95

वास्तविक दुनिया की समस्याएं क्या हैं जहां गहराई-पहली खोज (डीएफएस) के अलावा एक पुनरावर्ती दृष्टिकोण प्राकृतिक समाधान है?

(मैं हनोई के टॉवर , फाइबोनैचि संख्या , या वास्तविक जीवन की वास्तविक समस्याओं पर विचार नहीं करता हूं । वे मेरे दिमाग में थोड़े वंचित हैं।)


2
सभी सुझावों के लिए धन्यवाद, लेकिन सभी का सुझाव है पेड़ / नेटवर्क ट्रैवर्सल्स। Theses अनिवार्य रूप से गहराई-प्रथम-खोज (या BFS I अनुमान) के सभी उदाहरण हैं। मैं अन्य अच्छी तरह से प्रेरित एल्गोरिदम / समस्याओं की तलाश में था।
21

10
मुझे यह सवाल पसंद है! "मुझे तकनीक एक्स के सभी उपयोग बताएं, तकनीक एक्स के मुख्य व्यावहारिक उपयोग को लागू करें"
जस्टिन स्टैंडर्ड

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

6
अपने खुद के साहसिक उपन्यास चुनें! मैं पूरी बात पढ़ना चाहता हूं, और पुनरावृत्ति ऐसा करने का सबसे अच्छा तरीका है।
एन्ड्रेस

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

जवाबों:


41

यहाँ बहुत सारे मैथी उदाहरण हैं, लेकिन आप एक वास्तविक दुनिया उदाहरण चाहते हैं, इसलिए थोड़ी सोच के साथ, यह संभवतः मेरे लिए सबसे अच्छा उदाहरण है:

आप एक ऐसे व्यक्ति को ढूंढते हैं, जिसने किसी दिए गए संक्रामक संक्रमण को अनुबंधित किया है, जो कि घातक नहीं है, और खुद को जल्दी ठीक कर लेता है (टाइप ए), 5 लोगों में से एक को छोड़कर (हम इन प्रकार बी को कॉल करेंगे) जो स्थायी रूप से इसके साथ संक्रमित हो जाते हैं और नहीं दिखाते हैं लक्षण और केवल एक स्प्रेडर कार्य करता है।

यह कहर की काफी कष्टप्रद लहरें पैदा करता है जब कभी B टाइप A की भीड़ को संक्रमित करता है।

आपका काम सभी प्रकार के बी एस को ट्रैक करना और उन्हें रोग की रीढ़ को रोकने के लिए टीकाकरण करना है। दुर्भाग्य से, आप सभी के लिए एक राष्ट्रव्यापी इलाज नहीं कर सकते, क्योंकि जो लोग टाइप हैं उन्हें भी बी से काम करने वाले इलाज से घातक एलर्जी है।

जिस तरह से आप ऐसा करेंगे, वह सामाजिक खोज होगी, एक संक्रमित व्यक्ति (टाइप ए) को देखते हुए, पिछले सप्ताह में अपने सभी संपर्कों को चुनें, प्रत्येक संपर्क को एक ढेर पर चिह्नित करें। जब आप किसी व्यक्ति के संक्रमित होने का परीक्षण करते हैं, तो उन्हें "अनुवर्ती" कतार में जोड़ें। जब कोई व्यक्ति एक प्रकार का बी होता है, तो उन्हें सिर पर "अनुवर्ती" में जोड़ें (क्योंकि आप इस उपवास को रोकना चाहते हैं)।

किसी दिए गए व्यक्ति को संसाधित करने के बाद, कतार के सामने से व्यक्ति का चयन करें और यदि आवश्यक हो तो टीकाकरण लागू करें। अपने सभी संपर्कों को पहले ही अनवीकृत कर लें, और फिर देखें कि क्या वे संक्रमित हैं।

संक्रमित लोगों की कतार 0 हो जाने तक दोहराएं और फिर दूसरे प्रकोप की प्रतीक्षा करें।

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


2
धन्यवाद - यह अभी भी ग्राफ ट्रैवर्सल है लेकिन यह अच्छी तरह से प्रेरित है और गैर-प्रोग्रामर लोगों को समझ में आता है।
लालफीताशाही

मेरा मानना ​​है कि रोगी 0 को ढूंढना एक बेहतर उदाहरण होगा। उन सभी इंटरैक्शन को निर्धारित करें जो संक्रमण का कारण हो सकते थे। उन सभी को दोहराएं जो बातचीत के समय संक्रामक थे जब तक कोई संक्रामक नहीं पाया जाता है
विलियम फिट्जपैट्रिक

4
यह वास्तविक दुनिया का उदाहरण अब बहुत परिचित है :(
हेरोल्डोलिविएरी

109

पुनरावृत्ति का एक वास्तविक विश्व उदाहरण

एक सूरजमुखी


12
मैट्रिक्स वास्तुकार द्वारा पुनरावृत्ति के साथ कोडित :)
मार्सेल

3
यह कैसे पुनरावर्ती है? यकीन है, यह सुंदर है। लेकिन पुनरावर्ती? एक भग्न गोभी ने अच्छी तरह से काम किया होगा, लेकिन मुझे इस फूल में आत्म-समानताएं नहीं दिखती हैं।
क्लेमेंट

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

1
"आमतौर पर पुनरावृत्ति के माध्यम से लागू किया जाता है" जरूरी नहीं कि फूल ऐसा करता है। शायद यह करता है; मैं एक आणविक जीवविज्ञानी को जानने के लिए पर्याप्त नहीं हूं, लेकिन यह कैसे करता है, इसके बारे में स्पष्टीकरण के बिना , मैं इसे विशेष रूप से उपयोगी नहीं देखता। Downvoting। यदि आप एक विवरण जोड़ना चाहते हैं (यह जैविक रूप से सही है या नहीं, तो यह जानकारी देने के लिए उधार दे सकता है), तो मैं खुशी से वोट पर पुनर्विचार करूंगा।
जुलाब

65

फ़ाइल सिस्टम में निर्देशिका संरचना को शामिल करने वाली किसी भी चीज़ के बारे में कैसे। पुन: फ़ाइलें ढूंढना, फ़ाइलें हटाना, निर्देशिका बनाना, आदि।

यहां एक जावा कार्यान्वयन है जो एक निर्देशिका और उसके उप-निर्देशिकाओं की सामग्री को पुन: प्रिंट करता है।

import java.io.File;

public class DirectoryContentAnalyserOne implements DirectoryContentAnalyser {

    private static StringBuilder indentation = new StringBuilder();

    public static void main (String args [] ){
        // Here you pass the path to the directory to be scanned
        getDirectoryContent("C:\\DirOne\\DirTwo\\AndSoOn");
    }

    private static void getDirectoryContent(String filePath) {

        File currentDirOrFile = new File(filePath);

        if ( !currentDirOrFile.exists() ){
            return;
        }
        else if ( currentDirOrFile.isFile() ){
            System.out.println(indentation + currentDirOrFile.getName());
            return;
        }
        else{
            System.out.println("\n" + indentation + "|_" +currentDirOrFile.getName());
            indentation.append("   ");

            for ( String currentFileOrDirName : currentDirOrFile.list()){
                getPrivateDirectoryContent(currentDirOrFile + "\\" + currentFileOrDirName);
            }

            if (indentation.length() - 3 > 3 ){
                indentation.delete(indentation.length() - 3, indentation.length());
            }
        }       
    }

}

2
एक फाइल सिस्टम प्रेरणा प्रदान करता है (जो अच्छा है, धन्यवाद) लेकिन यह डीएफएस का एक विशिष्ट उदाहरण है।
21

4
मुझे "डीएफएस" का संक्षिप्त रूप नहीं मिला - जब से मैं कक्षा में बैठा, तब से बहुत देर हो चुकी है।
मैट डिलार्ड

5
गहराई-पहली खोज: dfs (नोड) {नोड बच्चे में {{बच्चे }}
हाओपेस्ट

सरल कोड उदाहरण के लिए, देखें stackoverflow.com/questions/126756/…
जोनीक

क्या इस कोड में कोई त्रुटि है? क्या getPirectDirectoryContent () को getDirectoryContent () से बदला जाना चाहिए?
Shn_Android_Dev


16

मैट डिलार्ड का उदाहरण अच्छा है। अधिक आम तौर पर, किसी भी पेड़ के चलने को आमतौर पर बहुत आसानी से पुनरावृत्ति द्वारा नियंत्रित किया जा सकता है। उदाहरण के लिए, पार्स पेड़ों को संकलित करना, एक्सएमएल या एचटीएमएल पर चलना, आदि।


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

16

रिकर्सियन का उपयोग अक्सर बैकट्रैकिंग एल्गोरिदम के कार्यान्वयन में किया जाता है । इस के एक "वास्तविक दुनिया" आवेदन के लिए, कैसे एक सुडोकू सॉल्वर के बारे में ?


एक राज्य सरणी और एक निम्न गति इसे बढ़ा सकती है।
बीसीएस

13

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

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


11

निश्चित रूप से है कि वहाँ बाहर कई संकलक पुनरावृत्ति का भारी उपयोग करते हैं। कंप्यूटर की भाषाएं स्वाभाविक रूप से स्वयं को पुन: प्रस्तुत करती हैं (यानी, आप 'एम्बेड कर सकते हैं यदि' अन्य के अंदर स्टेटमेंट 'यदि' स्टेटमेंट 'इत्यादि)।


अगर बयान पुनरावृत्ति नहीं हैं तो एंबेडेड।
जॉन मेघेर

लेकिन उन्हें पार्स करने के लिए रिकर्सन, जॉन की आवश्यकता होती है।
Apocalisp

2
जॉन, तथ्य यह है कि आप घोंसला कर सकते हैं अगर बयानों का मतलब है कि भाषा की परिभाषा (और संभावना है कि भाषा पार्सर) पुनरावर्ती है।
डेरेक पार्क

पुनरावर्ती वंश एक संकलक को हाथ से कोड करने के सबसे आसान तरीकों में से एक है। याक जैसे उपकरण का उपयोग करना उतना आसान नहीं है, लेकिन यह समझने में आसान है कि यह कैसे काम करता है। पूरे टेबल-संचालित राज्य मशीनों को समझाया जा सकता है, लेकिन आमतौर पर ब्लैक बॉक्स होने के कारण।
ग्रहण

कोडी ब्रोचेस के जवाब में "संकलन पार्स पेड़ों का उल्लेख" भी इस क्षेत्र में इंगित किया गया: भाषा विश्लेषण / व्याख्या / संकलन।
इम्ज़ - इवान ज़खरीशेव

9

एक कंटेनर नियंत्रण में सभी बच्चों के लिए केवल पढ़ने के लिए अक्षम / स्थापित करना। मुझे ऐसा करने की आवश्यकता थी क्योंकि कुछ बच्चे नियंत्रण खुद कंटेनर थे।

public static void SetReadOnly(Control ctrl, bool readOnly)
{
    //set the control read only
    SetControlReadOnly(ctrl, readOnly);

    if (ctrl.Controls != null && ctrl.Controls.Count > 0)
    {
        //recursively loop through all child controls
        foreach (Control c in ctrl.Controls)
            SetReadOnly(c, readOnly);
    }
}

8

प्रसिद्ध प्रमाण / SICP से चक्र लागू करें

वैकल्पिक शब्द
(स्रोत: mit.edu )

यहाँ eval की परिभाषा है:

(define (eval exp env)
  (cond ((self-evaluating? exp) exp)
        ((variable? exp) (lookup-variable-value exp env))
        ((quoted? exp) (text-of-quotation exp))
        ((assignment? exp) (eval-assignment exp env))
        ((definition? exp) (eval-definition exp env))
        ((if? exp) (eval-if exp env))
        ((lambda? exp)
         (make-procedure (lambda-parameters exp)
                         (lambda-body exp)
                         env))
        ((begin? exp) 
         (eval-sequence (begin-actions exp) env))
        ((cond? exp) (eval (cond->if exp) env))
        ((application? exp)
         (apply (eval (operator exp) env)
                (list-of-values (operands exp) env)))
        (else
         (error "Unknown expression type - EVAL" exp))))

यहाँ लागू करने की परिभाषा है:

(define (apply procedure arguments)
  (cond ((primitive-procedure? procedure)
         (apply-primitive-procedure procedure arguments))
        ((compound-procedure? procedure)
         (eval-sequence
           (procedure-body procedure)
           (extend-environment
             (procedure-parameters procedure)
             arguments
             (procedure-environment procedure))))
        (else
         (error
          "Unknown procedure type - APPLY" procedure))))

यहाँ eval- अनुक्रम की परिभाषा है:

(define (eval-sequence exps env)
  (cond ((last-exp? exps) (eval (first-exp exps) env))
        (else (eval (first-exp exps) env)
              (eval-sequence (rest-exps exps) env))))

eval-> apply-> eval-sequence->eval


7

खेल विकास (और इसी तरह के अन्य क्षेत्रों) में टक्कर का पता लगाने के लिए बीएसपी पेड़ों जैसी चीजों में रिकर्सन का उपयोग किया जाता है।


7

लोग अक्सर पुनरावर्ती पद्धति का उपयोग करके दस्तावेजों के ढेर को सॉर्ट करते हैं। उदाहरण के लिए, कल्पना करें कि आप उन पर नामों के साथ 100 दस्तावेजों को छांट रहे हैं। पहले पत्र द्वारा बवासीर में दस्तावेजों को रखें, फिर प्रत्येक ढेर को क्रमबद्ध करें।

शब्दकोश में शब्दों को देखना अक्सर एक द्विआधारी-खोज जैसी तकनीक द्वारा किया जाता है, जो पुनरावर्ती है।

संगठनों में, मालिक अक्सर विभाग प्रमुखों को आदेश देते हैं, जो बदले में प्रबंधकों को आदेश देते हैं, और इसी तरह।


5

वास्तविक विश्व आवश्यकता मुझे हाल ही में मिली:

आवश्यकता ए: आवश्यकता ए को अच्छी तरह से समझने के बाद इस सुविधा को लागू करें।


4

पार्सर्स और कंपाइलर्स को पुनरावर्ती-वंश विधि में लिखा जा सकता है। इसे करने का सबसे अच्छा तरीका नहीं है, क्योंकि lex / yacc जैसे उपकरण तेजी से और अधिक कुशल पार्सर उत्पन्न करते हैं, लेकिन वैचारिक रूप से सरल और लागू करने में आसान होते हैं, इसलिए वे सामान्य बने रहते हैं।


4

पुनरावर्तन को उन समस्याओं (स्थितियों) पर लागू किया जाता है जहां आप इसे छोटे भागों में तोड़ सकते हैं (कम कर सकते हैं), और प्रत्येक भाग मूल समस्याओं के समान दिखता है।

उन चीज़ों के अच्छे उदाहरण जहाँ पर अपने समान छोटे हिस्से हैं:

  • पेड़ की संरचना (एक शाखा पेड़ की तरह है)
  • सूचियाँ (सूची का एक भाग अभी भी एक सूची है)
  • कंटेनर (रूसी गुड़िया)
  • अनुक्रम (एक अनुक्रम का हिस्सा अगले की तरह दिखता है)
  • वस्तुओं का समूह (एक उपसमूह अभी भी वस्तुओं का एक समूह है)

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

कुछ पुनरावर्ती सॉर्टिंग एल्गोरिदम, ट्री-वॉकिंग एल्गोरिदम, मैप / कम एल्गोरिदम, डिवाइड-एंड-कॉनकेर इस तकनीक के सभी उदाहरण हैं।

कंप्यूटर प्रोग्रामिंग में, अधिकांश स्टैक-आधारित कॉल-रिटर्न प्रकार भाषा में पहले से ही पुनरावृत्ति के लिए निर्मित क्षमताएं हैं: अर्थात

  • समस्या को छोटे टुकड़ों में तोड़ना ==> मूल डेटा के छोटे उपसमुच्चय पर कॉल करें),
  • टुकड़ों को कैसे विभाजित किया जाता है इस पर नज़र रखें ==> कॉल स्टैक,
  • परिणामों को वापस सिलाई ==> स्टैक-आधारित रिटर्न


4

कार्यात्मक प्रोग्रामिंग भाषाओं में पुनरावृत्ति के कुछ महान उदाहरण पाए जाते हैं। कार्यात्मक प्रोग्रामिंग भाषाओं ( एरलैंग , हास्केल , ML / OCaml / F # , आदि) में, किसी भी सूची प्रसंस्करण उपयोग की पुनरावृत्ति होना बहुत आम है।

जब विशिष्ट अनिवार्य OOP- शैली भाषाओं में सूचियों के साथ काम किया जाता है, तो सूचीबद्ध सूचियों के रूप में कार्यान्वित सूचियों को देखना बहुत आम है ([आइटम 1 -> आइटम 2 -> आइटम 3 -> आइटम 4])। हालाँकि, कुछ कार्यात्मक प्रोग्रामिंग भाषाओं में, आप पाते हैं कि सूचियाँ खुद को पुनरावर्ती रूप से कार्यान्वित की जाती हैं, जहाँ सूची का "प्रमुख" सूची में पहले आइटम की ओर इंगित करता है, और "पूंछ" सूची में बाकी वस्तुओं से युक्त होता है ( [item1 -> [item2 -> [item3 -> [item4 -> []]]]])। यह मेरी राय में बहुत रचनात्मक है।

सूचियों का यह हैंडलिंग, जब पैटर्न मिलान के साथ संयुक्त है, बहुत शक्तिशाली है। मान लीजिए कि मैं संख्याओं की सूची बनाना चाहता हूं:

let rec Sum numbers =
    match numbers with
    | [] -> 0
    | head::tail -> head + Sum tail

यह अनिवार्य रूप से कहता है "अगर हमें एक खाली सूची के साथ बुलाया गया था, तो 0 लौटाएं" (हमें पुनरावृत्ति को तोड़ने की अनुमति देता है), अन्यथा सिर के मूल्य + शेष वस्तुओं के साथ सुम के मूल्य (इसलिए, हमारी पुनर्संरचना) को वापस करें।

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

आप इस कार्यात्मक पैटर्न को किसी भी प्रकार के MapReduce कोड में विस्तारित कर सकते हैं जहाँ आप किसी चीज़ की सूची ले सकते हैं, उसे रूपांतरित कर सकते हैं और कुछ और लौटा सकते हैं (चाहे दूसरी सूची हो, या सूची में कुछ ज़िप आदेश)।


3

XML, या एक पेड़ है कि कुछ भी पता लगाने। हालांकि, ईमानदार होने के लिए, मैं अपनी नौकरी में बहुत अधिक कभी भी पुनरावृत्ति का उपयोग नहीं करता हूं।


पूंछ-पुनरावृत्ति भी नहीं?
Apocalisp

मैंने अपने कैरियर में एक बार पुनरावृत्ति का इस्तेमाल किया, और जब रूपरेखा बदल गई, तो मुझे इससे छुटकारा मिल गया। हम जो करते हैं उसका 80% CRUD है।
चार्ल्स ग्राहम

1
पहली बार में "एक्सएमएल" का उल्लेख करना काफी अजीब है। यह एक स्वाभाविक बात नहीं है, न कि एक सामान्य व्यक्ति जिसे आप पढ़ाने जा रहे हैं, उसे रोजमर्रा की जिंदगी में निपटना होगा। लेकिन विचार बिल्कुल समझदार है।
इम्ज़ - इवान ज़ख़रीशेव

3

एक पदानुक्रमित संगठन में प्रतिक्रिया लूप।

शीर्ष मालिक कंपनी में सभी से प्रतिक्रिया एकत्र करने के लिए शीर्ष अधिकारियों को बताता है।

प्रत्येक कार्यकारी अपनी प्रत्यक्ष रिपोर्ट इकट्ठा करता है और उनसे कहता है कि वे अपनी प्रत्यक्ष रिपोर्टों से प्रतिक्रिया एकत्र करें।

और नीचे लाइन पर।

कोई प्रत्यक्ष रिपोर्ट वाले लोग - पेड़ में पत्ती के नोड्स - अपनी प्रतिक्रिया दें।

फ़ीडबैक प्रत्येक प्रबंधक के अपने स्वयं के फीडबैक को जोड़ने के साथ पेड़ पर वापस जाता है।

आखिरकार सभी फीडबैक इसे शीर्ष बॉस तक पहुंचाते हैं।

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


2

मान लीजिए कि आप एक वेबसाइट के लिए एक सीएमएस का निर्माण कर रहे हैं, जहां आपके पृष्ठ एक पेड़ की संरचना में हैं, जड़ को होम-पेज कहते हैं।

मान लीजिए कि आपका {उपयोगकर्ता | ग्राहक | ग्राहक | बॉस} अनुरोध करता है कि आप हर पेज पर एक ब्रेडक्रंब निशान रखें, जहां आप पेड़ में हैं।

किसी भी दिए गए पृष्ठ n के लिए, आप n के माता-पिता और उसके माता-पिता तक चलना चाहते हैं, और इसी तरह, पुन: पृष्ठ के पेड़ की जड़ तक नोड्स की एक सूची बनाने के लिए पुनरावृत्ति करते हैं।

बेशक, आप उस उदाहरण में प्रति पृष्ठ db को कई बार मार रहे हैं, इसलिए हो सकता है कि आप कुछ SQL उपनाम का उपयोग करना चाहें, जहां आप पृष्ठ-तालिका को एक के रूप में देखते हैं, और पृष्ठ-तालिका को फिर से b के रूप में, और a.id के साथ शामिल होते हैं b.parent तो आप डेटाबेस को पुनरावर्ती जोड़ करते हैं। कुछ समय हो गया है, इसलिए मेरा वाक्य-विन्यास शायद मददगार नहीं है।

फिर, आप बस इसे केवल एक बार गणना करना चाहते हैं और इसे पेज रिकॉर्ड के साथ स्टोर कर सकते हैं, केवल पेज को स्थानांतरित करने पर इसे अपडेट कर सकते हैं। वह शायद अधिक कुशल होगा।

वैसे भी, यह मेरी $ .02 है


2

आपके पास एक संगठन वृक्ष है जो N स्तर गहरा है। कई नोड्स की जाँच की जाती है, और आप केवल उन नोड्स का विस्तार करना चाहते हैं जिन्हें चेक किया गया है।

यह कुछ ऐसा है जिसे मैंने वास्तव में कोडित किया है। पुनरावृत्ति के साथ इसका अच्छा और आसान।


2

मेरी नौकरी में हमारे पास जेनेरिक डेटा संरचना वाला एक सिस्टम है जिसे एक पेड़ के रूप में वर्णित किया जा सकता है। इसका मतलब है कि डेटा के साथ काम करने के लिए पुनरावृत्ति एक बहुत प्रभावी तकनीक है।

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


2

वित्त / भौतिकी के लिए गणना, जैसे कि यौगिक औसत।


2
  • XML फ़ाइल पार्स करना ।
  • बहुआयामी स्थानों में कुशल खोज। ई। जी। 2 डी में क्वाड-ट्री, 3 डी में ऑक्ट-ट्री, केडी-ट्री आदि।
  • पदानुक्रमित क्लस्टरिंग।
  • यह सोचने के लिए आओ, किसी भी पदानुक्रमित संरचना का पता लगाना स्वाभाविक रूप से पुनरावृत्ति के लिए उधार देता है।
  • C ++ में टेम्पलेट मेटाप्रोग्रामिंग, जहां कोई लूप नहीं हैं और पुनरावृत्ति एकमात्र तरीका है।

"एक्सएमएल" इस उत्तर के विचार के लिए आवश्यक नहीं है (और विशेष रूप से एक्सएमएल का उल्लेख उन लोगों को घृणित / उबाऊ हो सकता है जिन्हें आप सिखा रहे हैं)। बस किसी भी सामान्य भाषा (एक कंप्यूटर भाषा या एक प्राकृतिक एक) एक पुनरावर्ती पार्सिंग समस्या के लिए एक उदाहरण के रूप में जाना जाएगा।
इम्ज़ - इवान ज़खरीशेव

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


2

सबसे अच्छा उदाहरण मुझे पता है कि क्विकसॉर्ट है , यह पुनरावृत्ति के साथ बहुत सरल है। पर एक नज़र डालें:

shop.oreilly.com/product/9780596510046.do

www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047

(अध्याय 3 के तहत पहले उपशीर्षक पर क्लिक करें: "सबसे सुंदर कोड जो मैंने कभी लिखा था")।


1
और MergeSort, भी पुनरावृत्ति के साथ सरल है।
मैथ्यू Schinckel

1
लिंक टूट गया है। क्या आप पुस्तक का शीर्षक जोड़ सकते हैं?
पीटर मोर्टेंसन

@PeterMortensen, ग्रेग विल्सन और एंडी ओरम की किताब ब्यूटीफुल कोड है। मैंने लिंक को अपडेट किया, हालांकि ऐसा लगता है कि ओ'रिली अब अंदर झांकने की अनुमति नहीं देता है। लेकिन आप अमेज़न पर एक नज़र डाल सकते हैं।
फेबियो सेकोनेलो

1

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

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


1

आगमनात्मक तर्क, अवधारणा-निर्माण की प्रक्रिया, प्रकृति में पुनरावर्ती है। आपका मस्तिष्क इसे हर समय करता है, वास्तविक दुनिया में।


1

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


1

प्राकृतिक संख्याओं का गुणन पुनरावृत्ति का एक वास्तविक विश्व उदाहरण है:

To multiply x by y
  if x is 0
    the answer is 0
  if x is 1
    the answer is y
  otherwise
    multiply x - 1 by y, and add x
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.