algorithm - sanskrit - खरगोश और हिंदी में कछुआ कहानी लिखी




क्या मेरा कछुए बनाम खरगोश दौड़ में सुधार हो सकता है? (3)

क्या पाश के अंदर कोड दोहराव से छुटकारा पाने का कोई तरीका है?

कैसा रहेगा:

for(int i = 0; i < 2; i++)
{
    hare = hare.next();
    if (hare == back) return;
}

 tortoise = tortoise.next();

यह किसी भी तरह से बड़े पैमाने पर सुधार नहीं है।

क्या मैं यह मानने में ठीक हूं कि कछुए के बाद एक कदम आगे बढ़ाए जाने के बाद मुझे चेक की ज़रूरत नहीं है?

हां, जैसा कि आप सही तरीके से सोचते हैं, कछुआ हमेशा खराश के पीछे होता है, इससे पहले ही वह चलता है; इसलिए कछुए हमेशा उस जमीन को कवर कर रहा है जिसे पहले कवर किया गया है।

यदि आंकड़ा-संरचना दौड़ में किसी भी कारण के लिए उत्परिवर्तित होती है, तो निश्चित रूप से यह सच नहीं होगा (लेकिन यदि हां, तो आपको बड़ी समस्याएं होंगी)।

इस कोड को सरल / सुगम बनाने के लिए कोई अन्य तरीके?

जिसके बारे में मैंने सोचा था, वह नहीं है।

लिंक सूची में चक्रों का पता लगाने के लिए यहां मेरा कोड है:

do
{
    hare = hare.next();
    if (hare == back) return;

    hare = hare.next();
    if (hare == back) return;

    tortoise = tortoise.next();
}
while (tortoise != hare);
throw new AssertionError("cyclic linkage");
  1. क्या पाश के अंदर कोड दोहराव से छुटकारा पाने का कोई तरीका है?

  2. क्या मैं यह मानने में ठीक हूं कि कछुए के बाद एक कदम आगे बढ़ाए जाने के बाद मुझे चेक की ज़रूरत नहीं है? जैसा कि मैं इसे देखता हूं, कछुआ खरगोश से पहले सूची के अंत तक कभी नहीं पहुंच सकता (कब्र के विपरीत)।

  3. इस कोड को सरल / सुगम बनाने के लिए कोई अन्य तरीके?


आप एक भी वक्तव्य का उपयोग कर सकते हैं और इस तथ्य का उपयोग कर सकते हैं कि || एक शॉर्ट सर्किट ऑपरेटर है यह थोड़ा अधिक संक्षिप्त है, लेकिन समझना कठिन हो सकता है और अभी भी कोड दोहराव है

    do
    {
        if ((hare = hare.next()) == back || 
            (hare = hare.next()) == back) 
                return;            
        tortoise = tortoise.next();
    }
    while (tortoise != hare);

स्टीव की टिप्पणी पर आधारित मेरा सुधार कोड है (बैक सेंनिनेल नोड को खुद से लिंक करना):

while (hare != back)
{
    tortoise = tortoise.next();
    hare = hare.next().next();
    if (hare == tortoise) throw new AssertionError("cyclic linkage");
}

मुझे कोई जगह नहीं दिखाई देगी जहां यह क्लाइंट कोड को तोड़ देगा, और मेरी इकाई परीक्षण यह पुष्टि करेगा कि महान :)





control-flow