पाठ 2 / 42

Big-O और जटिलता

Big-O बताता है कि इनपुट बढ़ने पर समय या मेमोरी कैसे बढ़ती है।

वृद्धि, स्टॉपवॉच नहीं

Big-O स्थिरांक और मशीन गति को अनदेखा करके पूछता है: यदि इनपुट दोगुना हो, तो काम का क्या होगा? O(1) अपरिवर्तित, O(log n) एक चरण बढ़ता है, O(n) दोगुना, O(n log n) दोगुने से थोड़ा अधिक, O(n^2) चौगुना।

लूप से जटिलता पढ़ना

n वस्तुओं पर एक बार गुज़रना O(n) है। एक ही डेटा पर लूप के अंदर लूप O(n^2) है। हर चरण में सीमा आधी करना O(log n) है।

for x in arr:            # O(n)
    print(x)

for i in arr:            # O(n^2)
    for j in arr:
        print(i, j)

lo, hi = 0, len(arr) - 1 # O(log n)
while lo <= hi:
    mid = (lo + hi) // 2
    ...

समय बनाम स्थान

स्थान जटिलता इनपुट से परे अतिरिक्त मेमोरी गिनती है — कुछ वेरिएबल O(1), array की प्रति O(n), n गहराई की recursion O(n) स्टैक स्थान। इंटरव्यूअर अक्सर एक को दूसरे से बदलने को कहते हैं।

त्वरित जाँच: इनपुट 1,000 से 1,000,000 हो जाता है। O(log n) चरण गणना लगभग...

  • तीन गुना
  • ~10 चरण बढ़ती है
  • 1000 गुना बढ़ती है
Answer

~10 चरण बढ़ती है — log2(1e6) - log2(1e3) लगभग 20 - 10 = 10 अतिरिक्त चरण।