English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

वृद्धि दरों के लिए कोड पढ़ना

सही होने के लिए कोड समीक्षा बनाम जटिलता के लिए कोड समीक्षा

सही होने के लिए कोड समीक्षा तर्क त्रुटियों को पकड़ता है: गलत शर्तें, ऑफ-बाय-वन सूचकांक, खो जाने वाली शून्य जांचें। जटिलता-जागरूक कोड समीक्षा एक अलग वर्ग की त्रुटि को पकड़ता है: वह कोड जो N = 100 पर सही ढंग से काम करता है लेकिन N = 100,000 पर आपदा से बढ़ता है।

MOAD-0001 पैटर्न: list seen O(N²) बनाम set seen O(N) — एक-पंक्ति फिक्स


यह पाठ unhamming पाठ्यक्रम में एक गहरी जांच से जुड़ता है: लुप्त अध्याय: एल्गोरिदमिक जटिलता उत्पादन त्रुटियों के संदर्भ में Big O को कवर करता है, और MOAD-0001: तलछटी त्रुटि 60+ सॉफ्टवेयर इकोसिस्टम में पैटर्न को मैप करता है।


दो समीक्षा अनुमान


नेस्टेड लूप जटिलता को गुणा करते हैं। N आइटम पर दो नेस्टेड लूप O(N²) उत्पन्न करते हैं। तीन O(N³) उत्पन्न करते हैं। समीक्षा करते समय: पहले लूप नेस्टिंग गहराई गिनें।


गर्म लूप के अंदर अनुक्रमिक कंटेनर। कोई भी .contains(), .includes(), .find(), या in list जांच लूप के अंदर O(N) की लागत करता है। N पुनरावृत्तियों पर: कुल O(N²)। यह पैटर्न GHC Haskell कंपाइलर, Python pip, Apache Maven, Rust Cargo, TypeScript, Godot जैसे दर्जनों इकोसिस्टम में उत्पादन कोड में दिखाई देता है। एक ही गलती, विभिन्न कोडबेस।

समीक्षा: find_duplicates

जटिलता के लिए निम्नलिखित Python फ़ंक्शन की समीक्षा करें:


def find_duplicates(items):
    seen = []
    duplicates = []
    for item in items:
        if item in seen:
            duplicates.append(item)
        else:
            seen.append(item)
    return duplicates
जटिलता-जागरूक कोड समीक्षा करें: (a) इस फ़ंक्शन की समय जटिलता क्या है? (b) क्यों? जिम्मेदार सटीक लाइन की पहचान करें। (c) इसे O(N) में फिर से लिखें।

MOAD-0001: तलछटी त्रुटि

एक ही त्रुटि, साठ इकोसिस्टम

पैटर्न if x not in list: list.append(x) लूप के अंदर उत्पादन कोड में दर्जनों सॉफ्टवेयर इकोसिस्टम में दिखाई देता है:


- GHC (Haskell कंपाइलर): निर्भरता समाधानकर्ता, N = 50,000 पैकेज पर O(N²), 17-मिनट के बिल्ड

- Python pip: निर्भरता संघर्ष संकल्प

- Apache Maven: क्लासपाथ डीडुप्लिकेशन

- Rust Cargo: विशेषता एकीकरण

- TypeScript compiler: मॉड्यूल संकल्प

- Godot / Redot game engine: नोड ग्राफ ट्रैवर्सल


इनमें से कोई भी टीम गलती नहीं करी। उन्होंने छोटे N पर सही कोड लिखा। N बढ़ा। कोड जमा हुआ। पैटर्न का एक नाम है: MOAD-0001, तलछटी त्रुटि। तलछट: छोटी परतों में सही, हानिरहित। समय के साथ, परतें जमा होती हैं और कठोर होती हैं।


फिक्स

हर मामले में: अनुक्रमिक कंटेनर को हैश कंटेनर से बदलें। एक पंक्ति। सही इनपुट पर शून्य व्यवहार परिवर्तन। वास्तविक दुनिया के N पर 100–1,000× स्पीडअप।


फिक्स काम करता है क्योंकि दो ऑपरेशन तेज रहने की जरूरत है:

1. सदस्यता जांच: क्या इस तत्व को पहले देखा गया है?

2. क्रमबद्ध आउटपुट: उन्हें उस क्रम में वापस करें जिस क्रम में वे दिखाई दिए (कभी-कभी आवश्यक, कभी-कभी नहीं)।


एक set (1) को O(1) में संभालता है। यदि (2) भी महत्वपूर्ण है, तो क्रमबद्ध आउटपुट के लिए एक अलग सूची और सदस्यता जांच के लिए एक set रखें। दो डेटा संरचनाएं, प्रत्येक एक काम कर रही है।

समीक्षक को प्रतिक्रिया देना

एक pull request किसी प्रोजेक्ट के ग्राफ ट्रैवर्सल फ़ंक्शन में MOAD-0001 को ठीक करता है। एक समीक्षक टिप्पणी करता है:


> "Set सम्मिलन क्रम को संरक्षित नहीं करते — यह व्यवहार बदलता है।"

आप कैसे प्रतिक्रिया देते हैं? समझाएं कि समीक्षक की चिंता कब लागू होती है, और कब नहीं। जब वे संघर्ष करते हैं तो दोनों चिंताओं को संतुष्ट करने वाला समाधान प्रस्तावित करें।

साक्षात्कार विश्लेषण पैटर्न

अपेक्षित प्रारूप

एल्गोरिदमिक जटिलता विश्लेषण सॉफ्टवेयर इंजीनियरिंग साक्षात्कार में दिखाई देता है। एक मजबूत उत्तर एक चार-भाग पैटर्न का अनुसरण करता है:


1. वर्तमान जटिलता कहें — समय के लिए O(?), स्पेस के लिए O(?)।

2. समझाएं कि क्यों — जिम्मेदार विशिष्ट निर्माण की पहचान करें (नेस्टेड लूप, लूप में रैखिक स्कैन, पुनरावर्ती शाखा)।

3. एक अनुकूलन प्रस्तावित करें — परिवर्तन का नाम दें और डेटा संरचना या एल्गोरिदम जो यह पेश करता है।

4. नई जटिलता कहें — फिक्स के बाद, समय और स्पेस जटिलता क्या है?


उदाहरण:

कोड: [फ़ंक्शन जो लूप के अंदर सूची में सदस्यता की जांच करता है]
वर्तमान: O(N²) — `item in seen_list` प्रति जांच O(N) × N पुनरावृत्तियां
अनुकूलन: seen_list को seen_set (hash set) से बदलें
बाद में: O(N) — set सदस्यता जांच O(1) है

यह कौशल साक्षात्कार से परे हस्तांतरित होता है: जटिलता-जागरूक कोड समीक्षा, आर्किटेक्चर डिजाइन, प्रदर्शन डिबगिंग, सुरक्षा ऑडिट। कोई भी प्रणाली जो परिवर्तनीय आकार के इनपुट को संसाधित करती है इससे लाभान्वित होती है।


यह पाठ unhamming पाठ्यक्रम में आगे हस्तांतरित होता है, जो 60+ ओपन-सोर्स प्रोजेक्ट में इसी सटीक पैटर्न को उत्पादन त्रुटि जांच में लागू करता है।

साक्षात्कार: has_common_element का विश्लेषण करें

इस फ़ंक्शन को चार-भाग साक्षात्कार प्रारूप में लागू करें:


def has_common_element(list_a, list_b):
    for item in list_a:
        for other in list_b:
            if item == other:
                return True
    return False
वर्तमान जटिलता कहें, समझाएं कि क्यों, एक अनुकूलन प्रस्तावित करें, नई जटिलता कहें।