Кіріспе

Компьютерлік бағдарламалауда, кейкешті инициализация – объектіні құруды, мәнді есептеуді немесе басқа да шығынды процестерді олар алғаш рет қажет болғанға дейін ықпалдау тактикасы. Бұл нысандар немесе басқа ресурстарды жасауға қатысты жалқау бағалаудың бір түрі. Әдетте, бұл жеке мүшенің кэш ретінде жұмыс істейтініне, оның бастамаланғанын тексеру үшін аксессор әдісін (немесе property getter) толықтыру арқылы іске асырылады. Егер ол бастамаланған болса, дереу қайтарылады. Әйтпесе, жаңа экземпляр құрылып, мүшелік айнымалыға орналастырылып, алғашқы пайдалануға уақытында шақырушыға қайтарылады. Егер нысандарда сирек қолданылатын қасиеттер болса, бұл жүйе бастау жылдамдығын жақсарта алады. Бағдарламаның орташа өнімділігі жад (шартты айнымалылар үшін) және орындалу циклдары (оларды тексеру үшін) тұрғысынан сәл нашарлауы мүмкін, бірақ объектіні жасаудың әсері жүйе бастау кезеңінде шоғырланбай, уақыт бойынша ("амортизацияланады") таратылады, сондықтан жауап берудің медианалық уақытын едәуір жақсартуға болады. Көп тірісті кодта, жарыс жағдайларын болдырмау үшін кейкешті инициализацияланған нысандарға/күйге қол жеткізу синхрондалуы тиіс.

Теориялық информатика

Теориялық компьютерлік ғылым саласында жалқау инициализация (немесе жалқау массив) – инициализациялау қажеттілігін тудырмайтын жадпен жұмыс істей алатын дерек құрылымдарын жобалау әдісі. Нақтырақ айтқанда, бізде n инициализацияланбаған жад жасушаларынан (1-ден n-ге дейін нөмірленген) тұратын T кестесіне қол жеткізілім бар делік, және осы массивтің m жасушасын тағайындағымыз келеді, мысалы, (k1, v1), ..., (km, vm) жұптары үшін T[ki] := vi тағайындағымыз келеді, мұнда барлық ki әртүрлі. Жалқау инициализация техникасы бұл шаруаны тек O(m) операцияда орындауға мүмкіндік береді, ал барлық массив жасушаларын алдымен инициализациялауға O(m+n) операция жұмсалады. Бұл техника қарапайым: V кестесін бөліп, (ki, vi) жұптарын кез келген тәртіппен сақтаймыз, содан кейін T[ki] жасушасындағы әр i үшін V кестесіндегі ki кілті сақталған орнын жазамыз, ал T кестесінің қалған жасушаларын инициализацияланбаған күйде қалдырамыз. Бұл сұраныстарды келесідей өңдеуге болады: T[k] жасушасын іздегенде, k {1, ..., m} диапазонында екенін тексереміз: егер болмаса, T[k] инициализацияланбаған. Әйтпесе, V[T[k]] тексеріп, бұл жұптың бірінші компоненті k-ға тең екенін растаймыз. Егер тең болмаса, T[k] инициализацияланбаған (және кездейсоқ түрде {1, ..., m} диапазонына түскен). Әйтпесе, T[k] инициализацияланған жасушалардың бірі екенін білеміз, ал сәйкес мән – жұптың екінші компоненті.