Agar size < capacity: index size par x likho, size++ karo. → O(1) (sasta append).
Agar size == capacity: naaya block allocate karo capacity g⋅capacity ka, saaresize purane elements copy karo, purana block free karo, phir likho. → O(n) (mehenga append).
Socho ek row mein identical lockers hain, numbered 0,1,2… Locker 5 kholne ke liye tum seedha wahan chale jaate ho — pehle lockers 0–4 nahi kholte. Isliye arrays ko read karna instant hai.
Ab maano row bhar gayi aur tumhe ek aur locker chahiye. Tum end mein ek aur glue nahi kar sakte (wall hai wahan). Toh tum ek nayi row twice as long banate ho, saara saman wahan le jaate ho, aur continue karte ho. Yeh doubling trick karne se matlab hai ki tum saman kabhi kabhi hi move karte ho, toh on average ek locker add karna still sasta hai.
Bonus: kyunki lockers ek seedhi line mein hain, jab tum locker 5 se kuch lete ho toh tumhare haath 6,7,8 ke paas already hain — computer "ek muthi mein pakad leta hai." Scattered lockers (linked list) tumhe baar baar bhaagna padata.
Zyaatar appends bas write karte hain (O(1)); kabhi kabhi full array O(n) copy trigger karta hai. n appends mein average karne par total copy cost O(n) hai, toh per-append O(1) hai.
Ek dynamic array kaun se do numbers track karta hai aur woh kaise related hain?
Doubling growth ke saath n appends ki total copy cost?
1+2+4+…+2^k < 2n = O(n), toh O(1) amortized.
Constant (+1) se badhana append ko O(n) amortized kyun banata hai?
Har append resize karta hai; total copies = 1+2+…+(n-1) = n(n-1)/2 = O(n²); n se divide karne par O(n) milta hai.
Cache line kya hota hai aur arrays ise exploit kyun karte hain?
~64-byte chunk jo CPU ek saath load karta hai; contiguous array elements saath mein aate hain, toh neighbours pre-loaded hote hain → kam slow RAM trips.
64-byte lines aur 4-byte ints ke liye, ek fetch mein kitne elements?
64/4 = 16 elements.
Array ke front mein insert karne ki cost?
O(n) — har element ko ek slot shift karna padta hai.
Static vs dynamic array ka key difference?
Static = allocation par fixed size; dynamic = ek bada block reallocate karke aur copy karke grow kar sakta hai.