पाठ 42 / 42
K-way Merge
एक min-heap का उपयोग करते हुए k sorted lists को कुशलता से मिलाएँ, जो हर list से अगला-सबसे-छोटा उम्मीदवार रखता है।
Two-way merge से आगे
दो sorted lists को मिलाना दो pointers से O(n) है। k sorted lists के लिए, हर list से एक उम्मीदवार रखने वाला min-heap इसे सामान्यीकृत करता है: हमेशा सबसे छोटा pop करें, फिर उस list का अगला element push करें।
k sorted lists मिलाएँ
Heap को हर list के पहले element से भरें (उसके list/index के साथ चिह्नित ताकि पता चले अगला value कहाँ से लाना है)।
import heapq
def merge_k_sorted(lists):
heap = []
for i, lst in enumerate(lists):
if lst:
heapq.heappush(heap, (lst[0], i, 0))
result = []
while heap:
val, i, j = heapq.heappop(heap)
result.append(val)
if j + 1 < len(lists[i]):
heapq.heappush(heap, (lists[i][j + 1], i, j + 1))
return result
Output:
merge_k_sorted([[1,4,5],[1,3,4],[2,6]]) # [1, 1, 2, 3, 4, 4, 5, 6]
Complexity और उपयोग
k lists में कुल n elements के साथ, यह O(n log k) में चलता है — heap में कभी k से ज़्यादा elements नहीं होते। Sorted log files मिलाने, external sorting, और 'k lists को कवर करने वाली सबसे छोटी range' जैसी समस्याओं में इस्तेमाल होता है।
अंतिम क्विज़ 1/8
अंतिम क्विज़
त्वरित जाँच: Binary search की time complexity क्या है?
- O(n)
- O(1)
- O(log n)
- O(n log n)
Answer
O(log n) — हर कदम search range आधी करता है।
अंतिम क्विज़ 2/8
अंतिम क्विज़
त्वरित जाँच: कौन-सी structure key से औसत O(1) lookup देती है?
- Linked list
- Stack
- Sorted array scan
- Hash map
Answer
Hash map — Hash function keys को buckets से map करता है।
अंतिम क्विज़ 3/8
अंतिम क्विज़
त्वरित जाँच: Balanced-bracket जाँच के लिए कौन-सी structure उपयुक्त है?
- Stack
- Queue
- Trie
- Heap
Answer
Stack — Opening push करें, closing पर pop करें।
अंतिम क्विज़ 4/8
अंतिम क्विज़
त्वरित जाँच: Unweighted graph में shortest paths कौन-सा traversal खोजता है?
- DFS
- BFS
- In-order
- Post-order
Answer
BFS — BFS level-by-level खोजता है।
अंतिम क्विज़ 5/8
अंतिम क्विज़
त्वरित जाँच: Dijkstra का algorithm कब सही परिणाम देता है?
- The graph is a tree
- The graph is undirected
- All edge weights are non-negative
- The graph is small
Answer
All edge weights are non-negative — Negative edges के लिए Bellman-Ford चाहिए।
अंतिम क्विज़ 6/8
अंतिम क्विज़
त्वरित जाँच: Merge sort का worst-case time क्या है?
- O(n^2)
- O(n)
- O(log n)
- O(n log n)
Answer
O(n log n) — यह हमेशा बराबर बाँटता और merge करता है।
अंतिम क्विज़ 7/8
अंतिम क्विज़
त्वरित जाँच: Longest-substring समस्याओं को एक pass में कौन-सा pattern संभालता है?
- Sliding window
- Union-find
- Bit manipulation
- K-way merge
Answer
Sliding window — दाएँ बढ़ाएँ, ज़रूरत पर बाएँ घटाएँ।
अंतिम क्विज़ 8/8
अंतिम क्विज़
त्वरित जाँच: कौन-सी बात किसी समस्या को dynamic programming के उपयुक्त बनाती है?
- Random inputs
- Overlapping subproblems and optimal substructure
- Large strings
- Sorted data
Answer
Overlapping subproblems and optimal substructure — पुनर्गणना से बचने के लिए subproblem उत्तर रखें।