ایک prefix sum array cumulative totals کو store کرتا ہے تاکہ کوئی بھی range sum O(n) preprocessing کے بعد O(1) میں جواب دیا جا سکے — بجائے ہر query کے لیے O(n) کے۔
The idea
آئیے پہلے عناصر کا مجموعہ ہو۔ پھر کا مجموعہ ہے۔
ایک prefix sum array cumulative totals کو store کرتا ہے تاکہ کوئی بھی range sum O(n) preprocessing کے بعد O(1) میں جواب دیا جا سکے — بجائے ہر query کے لیے O(n) کے۔
آئیے پہلے عناصر کا مجموعہ ہو۔ پھر کا مجموعہ ہے۔
prefix[i]iarr[l..r]prefix[r+1] - prefix[l]def build_prefix(arr):
prefix = [0] * (len(arr) + 1)
for i, x in enumerate(arr):
prefix[i + 1] = prefix[i] + x # running total
return prefix
def range_sum(prefix, l, r): # inclusive l..r
return prefix[r + 1] - prefix[l] # O(1)
p = build_prefix([2, 4, 1, 3, 5])
range_sum(p, 1, 3) # 4+1+3 -> 8
arr = [2, 4, 1, 3, 5]
prefix = [0, 2, 6, 7, 10, 15]
sum(1..3) = prefix[4] - prefix[1] = 10 - 2 = 8
Static data پر بہت سے range-sum queries کے لیے موزوں۔ Variants: 2D prefix sums submatrix sums کے لیے، prefix XOR، اور difference arrays range updates کے لیے۔ اگر array اکثر بدلتا ہے، تو اس کی بجائے Fenwick/segment tree استعمال کریں۔ Index offset کا خیال رکھیں (سائز n+1)۔
Prefix sums بار بار O(n) range queries کو O(1) lookups میں بدل دیتے ہیں — جب queries اکثر ہوں تو یہ بہت بڑی جیت ہے۔
Precompute-once، answer-fast pattern بہت سے data-processing tasks میں عام ہے۔
یہ competitive programming کا ایک لازمی حصہ ہے اور analytics میں ایک عام بنیادی بلاک ہے۔
تفصیلی جوابات کے ساتھ IT انٹرویو سوالات کی ایک لائبریری — جونیئر سے سینئر تک۔
عطیہ دیں