Sobes.tech
Middle

Барномаи алгоритми афзоиши андозаи срез (slice) дар Go чист?

sobes.tech AI

Ҷавоб аз AI

Даромади андозаи қисм дар Go мувофиқи алгоритми зерин ҳангоми истифодаи функсияи append() ба амал меояд:

  1. Қобилияти талабшуда (capacity) барои қисми нав муайян карда мешавад.
  2. Агар қобилияти ҳозира барои ҷойгир кардани унсурҳои нав кофӣ бошад (cap(s) >= len(s) + len(elements)), унсурҳо ба осонӣ ба охири массиви асосии ҳозира илова мешаванд ва қисм нав ба он минтақа ишора мекунад.
  3. Агар қобилияти ҳозира кофӣ набошад, массиви асосии нав бо қобилияти калонтар таъин карда мешавад. Алгоритми муайян кардани қобилияти нав чунин аст:
    • Агар қобилияти талабшуда аз ду баробар қобилияти кӯҳна зиёд бошад (requiredCap > 2 * oldCap), қобилияти нав баробар бо талабшуда аст.
    • Агар қобилияти кӯҳна аз 1024 камтар бошад (oldCap < 1024), қобилияти нав ду баробар мешавад (newCap = oldCap * 2).
    • Агар қобилияти кӯҳна аз 1024 ё баробар бошад (oldCap >= 1024), қобилияти нав ба андозаи 25% зиёд мешавад (newCap = oldCap + oldCap/4) то он ки аз талабот зиёд ё баробар шавад.
  4. Унсурҳои массиви кӯҳна ба массиви нав кӯчонида мешаванд.
  5. Унсурҳои нав ба охири массиви нав илова мешаванд.
  6. Қобилияти нав метавонад каме аз арзиши ҳисобшуда калонтар бошад, бо сабаби ҳамоҳангсозии хотира.
  7. Функсияи append() қисми навро, ки ба массиви нав ишора мекунад, бармегардонад.

Илова бар ин, қисми кӯҳна ва массиви асосии он метавонанд аз ҷониби ҷамъкунандаи партовҳо тоза карда шаванд, агар ба онҳо дигар истинодҳо набошад.