Bosh sahifa Wiki Array

Array

Array — bir xil turdagi yoki umumiy modelga mos elementlarni indeks bo‘yicha tartibli saqlaydigan ma’lumotlar tuzilmasi. Ko‘p tillarda elementlar xotirada ketma-ket joylashadi va indeks orqali o‘qish doimiy vaqtga yaqin bajariladi. Array uzunligi fixed bo‘lishi yoki dynamic array kapasitetni zaruratga ko‘ra kengaytirishi mumkin.

Indeks va xotira

Ko‘p dasturlash tillarida birinchi indeks 0. a[i] manzili boshlang‘ich pointerga i * element_size qo‘shish orqali topiladi. Ketma-ket xotira CPU cache uchun qulay: elementlar navbat bilan o‘qilganda cache line samarali ishlatiladi. Linked list bilan solishtirganda pointer overhead kam.

Bounds check indeks 0 <= i < length ekanini tekshiradi. Xavfsiz tilda xato exception yoki trap beradi. C kabi tilda chegaradan tashqari kirish undefined behavior, ma’lumot buzilishi yoki zaiflikka olib kelishi mumkin. Ishonchsiz inputdan olingan indeks va uzunlik arifmetik overflow bilan birga tekshiriladi.

Fixed va dynamic array

Fixed array uzunligi yaratilganda belgilanadi. Stack’da kichik fixed array tez, lekin juda katta allocation stack overflow keltirishi mumkin. Dynamic array alohida length va capacity saqlaydi. Joy tugaganda kattaroq buffer ajratilib, eski elementlar ko‘chiriladi. Bitta kengayish qimmat bo‘lsa-da, geometrik o‘sish append operatsiyasiga amortized doimiy vaqt beradi.

Array o‘rtasiga element qo‘shish keyingi elementlarni siljitadi va O(n) xarajat qiladi. Tartib muhim bo‘lmasa, o‘chiriladigan element o‘rniga oxirgisini qo‘yish tezroq. Queue uchun boshidan doimiy o‘chirish o‘rniga ring buffer yoki deque tanlanadi.

Ko‘p o‘lchamli ko‘rinish

Matrix rectangular multidimensional array yoki array of arrays bilan ifodalanadi. Row-major tartibda bir qator elementlari yonma-yon, column-major’da ustunlar yonma-yon turadi. Loop tartibi memory layoutga mos bo‘lsa cache samarasi oshadi. Jagged array har qator uzunligi boshqacha bo‘lishiga imkon beradi.

Image pixel array, tensor va audio sample katta numeric array misollaridir. SIMD va GPU ketma-ket bloklarda parallel hisoblashdan foydalanadi. Alignment, stride va element type foreign library bilan almashuvda muhim. View yoki slice buffer nusxasini yaratmasdan ma’lum oraliqni ko‘rsatadi, ammo asosiy bufferning hayot sikliga bog‘liq.

Nusxalash va tenglik

Shallow copy element reference’larini ko‘chiradi; ichki mutable obyekt ikki array orasida umumiy qoladi. Deep copy har elementning mustaqil nusxasini yaratadi, lekin cycle va katta xarajatni hisobga oladi. Value type elementlari odatda bayt yoki qiymat sifatida ko‘chiriladi.

Array tengligi tilga qarab reference identity yoki element-by-element taqqoslash bo‘lishi mumkin. Hash key sifatida mutable array ishlatish xavfli: element o‘zgarsa hash invariant buziladi. Immutable tuple yoki byte string ko‘proq mos. Sorting in-place bo‘lsa boshqa reference’lar ham yangi tartibni ko‘radi.

Xavfsiz foydalanish

Tashqi uzunlik asosida allocation qilganda maksimal limit qo‘yiladi. count * element_size overflow qilmasligi tekshiriladi. Serializer nested va juda uzun array uchun resurs limitiga ega. Sensitive byte array ishlatilgach tozalanishi mumkin, ammo runtime nusxa yaratgan bo‘lsa barcha copy’ni nazorat qilish qiyin.

Algoritmik qo‘llanish

Binary search faqat tartiblangan array’da O(log n) qidiruv beradi. Ikki pointer usuli segment yoki juftlik masalalarida ketma-ket xotiradan samarali foydalanadi. Prefix sum array’i oraliq yig‘indini tez hisoblaydi, ammo update qimmat; tez-tez o‘zgaradigan data uchun Fenwick tree yoki segment tree tanlanishi mumkin.

Sparse ma’lumotni to‘liq array’da saqlash katta bo‘sh joy sarflaydi. Hash map yoki compressed sparse representation faqat mavjud elementlarni saqlaydi. Tanlov access pattern, density va iteration talabiga asoslanadi. “Array eng tez” degan umumiy hukm workloadni o‘lchamasdan to‘g‘ri emas.

Bog‘liq tushunchalar

Dynamic array, Index, List, Slice, Matrix, Buffer, Data structure