कोडिंग साक्षात्कार की तैयारी · पाठ

स्थान-जटिलता और संतुलन

कॉल स्टैक और सहायक डेटा संरचनाओं के लिए अतिरिक्त स्थान मापिए तथा memoisation और in-place एल्गोरिदम में समय-स्थान संतुलन पहचानिए।

पाठ 4, कुल 4 में से13 चरण

स्थान-जटिलता और संतुलन, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्थान-जटिलता किसे मापती है

स्थान-जटिलता input से अलग अतिरिक्त मेमोरी को मापती है, जिसे सहायक स्थान कहा जाता है। कुछ चर O(1) होते हैं; परिणाम-सरणी या हैश मैप O(n) होता है। कोड देखें।

# O(1) auxiliary space
def sum_array(nums):
    total = 0       # one integer variable
    for n in nums:
        total += n  # constant extra space
    return total

# O(n) auxiliary space
def copy_array(nums):
    return list(nums)  # allocates n slots

print(sum_array([1, 2, 3, 4]))  # 10
print(copy_array([1, 2, 3, 4]))  # [1, 2, 3, 4]

पुनरावृत्ति में कॉल-स्टैक का स्थान

हर पुनरावर्ती कॉल एक स्टैक फ़्रेम जोड़ती है, इसलिए गहराई ही स्थान निर्धारित करती है। रैखिक पुनरावृत्ति O(n) है; संतुलित वृक्ष पर DFS O(log n) है। पुनरावृत्तिमूलक संस्करण इसे बेहतर ढंग से नियंत्रित कर सकता है।

import sys

def recursive_sum(n):
    if n == 0: return 0
    return n + recursive_sum(n - 1)
# Space: O(n) stack frames

def iterative_sum(n):
    total = 0
    while n > 0:
        total += n
        n -= 1
    return total
# Space: O(1)

print(recursive_sum(100))   # 5050
print(iterative_sum(100))   # 5050

मर्ज सॉर्ट का स्थान: O(n)

मर्ज सॉर्ट को अपनी अस्थायी सारणियों के लिए O(n) अतिरिक्त स्थान चाहिए। स्थिर O(n log n) सॉर्ट की यह कीमत है — हीप सॉर्ट स्थान बचाता है, लेकिन स्थिर नहीं होता। कोड देखें।

import tracemalloc

tracemalloc.start()

def merge_sort(arr):
    if len(arr) <= 1: return arr
    m = len(arr) // 2
    l = merge_sort(arr[:m])    # new list
    r = merge_sort(arr[m:])    # new list
    out, i, j = [], 0, 0
    while i < len(l) and j < len(r):
        if l[i] <= r[j]: out.append(l[i]); i+=1
        else:             out.append(r[j]); j+=1
    return out + l[i:] + r[j:]

data = list(range(1000, 0, -1))
merge_sort(data)
_, peak = tracemalloc.get_traced_memory()
print(f'Peak memory: {peak} bytes')  # proportional to n

उसी स्थान पर काम करने वाले एल्गोरिदम: O(1) स्थान

एक उसी स्थान पर काम करने वाला एल्गोरिदम input को सीधे बदलता है और अतिरिक्त आनुपातिक भंडारण का उपयोग नहीं करता — जैसे दो पॉइंटर से किसी array को उलटना। इससे स्थान O(1) रहता है। कोड देखें।

def reverse_inplace(arr):
    l, r = 0, len(arr) - 1
    while l < r:
        arr[l], arr[r] = arr[r], arr[l]  # swap
        l += 1
        r -= 1
    # Space: O(1) -- only two pointer variables

def rotate_right(arr, k):
    '''Rotate array right by k positions in-place.'''
    n = len(arr)
    k %= n
    arr.reverse()          # O(1) space
    arr[:k] = arr[:k][::-1]
    arr[k:]  = arr[k:][::-1]

a = [1, 2, 3, 4, 5]
rotate_right(a, 2)
print(a)  # [4, 5, 1, 2, 3]

समय-स्थान समझौता: Two-Sum

समय-स्थान समझौता हर जगह दिखाई देता है। Two-Sum में O(1) स्थान के साथ O(n^2) समय लगता है, या हैश मैप के माध्यम से O(n) स्थान के साथ O(n) समय। दोनों विकल्पों का उल्लेख कीजिए और पूछिए कि अधिक महत्वपूर्ण क्या है।

# O(n^2) time, O(1) space
def two_sum_slow(nums, target):
    for i in range(len(nums)):          # O(n)
        for j in range(i+1, len(nums)): # O(n)
            if nums[i] + nums[j] == target:
                return [i, j]
    return []

# O(n) time, O(n) space
def two_sum_fast(nums, target):
    seen = {}                    # O(n) space
    for i, n in enumerate(nums):
        comp = target - n
        if comp in seen:         # O(1) lookup
            return [seen[comp], i]
        seen[n] = i
    return []

print(two_sum_fast([2, 7, 11, 15], 9))  # [0, 1]

संस्मरणन बनाम सारणीकरण का स्थान

ऊपर-से-नीचे संस्मरणन में O(n) संस्मरण और O(n) स्टैक लगता है; नीचे-से-ऊपर सारणीकरण स्टैक को छोड़ देता है। केवल पिछली कुछ पंक्तियाँ रखकर इसे O(1) तक घटाया जा सकता है — स्थान-अनुकूलित DP।

# Fibonacci: O(n) space with full table
def fib_table(n):
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[n]

# O(1) space: keep only last two values
def fib_optimal(n):
    if n <= 1: return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b

print(fib_table(10))    # 55
print(fib_optimal(10))  # 55

हैश मैप का स्थान: O(n)

हैश मैप समाधानों में O(n) स्थान की सामान्य लागत है: देखे गए तत्वों के लिए seen-set और गिनती के लिए आवृत्ति मैप। इसे हमेशा बताइए — "O(n) समय, O(n) स्थान" ही पूरा उत्तर है।

def contains_duplicate(nums):
    # O(n) time, O(n) space
    seen = set()
    for n in nums:
        if n in seen: return True
        seen.add(n)
    return False

def group_anagrams(words):
    # O(n*m) time, O(n) space  (m = avg word length)
    from collections import defaultdict
    groups = defaultdict(list)
    for w in words:
        groups[tuple(sorted(w))].append(w)
    return list(groups.values())

print(contains_duplicate([1,2,3,1]))  # True
print(group_anagrams(['eat','tea','tan','ate','nat','bat']))

ग्राफ़ एल्गोरिदम की स्थान-जटिलता का विश्लेषण

ग्राफ़ में वास्तविक स्थान लगता है: संलग्नता सूची O(V + E) होती है, BFS का visited set और queue O(V) होते हैं, और DFS की पुनरावृत्ति O(V) तक गहरी हो सकती है। ग्राफ़ का स्थान V और E में बताइए।

from collections import deque

def bfs(graph, start):
    # Space: O(V) for visited set + O(V) for queue
    visited = set()      # O(V)
    queue = deque([start])  # O(V) max
    order = []
    while queue:
        node = queue.popleft()
        if node in visited: continue
        visited.add(node)
        order.append(node)
        for nb in graph.get(node, []):
            queue.append(nb)
    return order

g = {0:[1,2], 1:[3], 2:[3], 3:[]}
print(bfs(g, 0))  # [0, 1, 2, 3]

स्ट्रिंग और array आवंटन की समस्याएँ

छिपे हुए आवंटन O(n) स्थान जोड़ सकते हैं: स्लाइसिंग नई सूची बनाती है, और लूप में स्ट्रिंग पर + का उपयोग O(n^2) होता है। sorted() प्रतिलिपि बनाता है, लेकिन lst.sort() उसी स्थान पर काम करता है। कोड देखें।

# Hidden allocations:
nums = [1, 2, 3, 4, 5]

# Creates a NEW list -- O(n) space
slice_copy = nums[1:4]  # [2, 3, 4]

# Creates a NEW sorted list -- O(n) space
sorted_copy = sorted(nums)  # nums unchanged

# Sorts IN PLACE -- O(1) extra space
nums.sort()

print(slice_copy)   # [2, 3, 4]
print(sorted_copy)  # [1, 2, 3, 4, 5]
print(nums)         # [1, 2, 3, 4, 5]

साक्षात्कार में स्थान-समझौतों को पहचानना

शुरुआत में ही अपनी स्थान-जटिलता बता दीजिए। यदि साक्षात्कारकर्ता कम स्थान चाहता है, तो सामान्य उपाय हैं: संस्मरण के बजाय नीचे-से-ऊपर DP, या हैश मैप के बजाय उसी स्थान पर काम करने वाला सॉर्ट। कोड देखें।

# Problem: find if array has duplicates
# Option 1: O(1) time-per-check, O(n) space
def has_dup_hash(nums):
    return len(nums) != len(set(nums))

# Option 2: O(n log n) time, O(1) extra space
def has_dup_sort(nums):
    nums_copy = sorted(nums)  # O(n) space -- still!
    for i in range(1, len(nums_copy)):
        if nums_copy[i] == nums_copy[i-1]:
            return True
    return False

# Option 3: truly O(1) extra -- sort in-place
def has_dup_inplace(nums):
    nums.sort()               # modifies original
    for i in range(1, len(nums)):
        if nums[i] == nums[i-1]: return True
    return False

कुल जटिलता बताने का प्रारूप

हमेशा पूरा विवरण दीजिए — समय और स्थान दोनों: "O(n) समय, O(1) अतिरिक्त स्थान।" जहाँ समझौते हों, उनका उल्लेख कीजिए। यही वरिष्ठ उम्मीदवारों को दूसरों से अलग करता है।

# Complete complexity example: Merge Intervals
def merge_intervals(intervals):
    # Time: O(n log n) for sort + O(n) for merge = O(n log n)
    # Space: O(n) for output (could be n/2 to n intervals)
    intervals.sort(key=lambda x: x[0])  # O(n log n)
    merged = [intervals[0]]
    for start, end in intervals[1:]:
        if start <= merged[-1][1]:
            merged[-1][1] = max(merged[-1][1], end)
        else:
            merged.append([start, end])
    return merged

print(merge_intervals([[1,3],[2,6],[8,10],[15,18]]))
# [[1,6],[8,10],[15,18]]

त्वरित जाँच

त्वरित जाँच — देखिए कि स्थान-जटिलता के विचार आपको कितनी अच्छी तरह समझ आए। आप इसके लिए तैयार हैं। ✅

पाठ का पुनरावलोकन

पुनरावलोकन: सहायक स्थान को input से अलग गिना जाता है, पुनरावृत्ति में O(depth) स्टैक स्थान लगता है, और समय-स्थान समझौता अधिकांश एल्गोरिदम-डिज़ाइन विकल्पों का आधार होता है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “स्थान-जटिलता और संतुलन” पाठ निःशुल्क है?

हाँ—“स्थान-जटिलता और संतुलन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“स्थान-जटिलता और संतुलन” में मैं क्या सीखूँगा?

कॉल स्टैक और सहायक डेटा संरचनाओं के लिए अतिरिक्त स्थान मापिए तथा memoisation और in-place एल्गोरिदम में समय-स्थान संतुलन पहचानिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“स्थान-जटिलता और संतुलन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. शुरुआत से Big-O संकेतन
  2. लूप और नेस्टेड लूप का विश्लेषण
  3. पुनरावृत्ति और पुनरावृत्ति-वृक्ष विधि
  4. स्थान-जटिलता और संतुलन
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ