Sobes.tech
Middle

Goда sliceдин өлчөмүн көбөйтүү алгоритми кандай?

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() функциясы жаңы негизги массивге ишара кылган жаңы кесимди кайтарат.

Мындан тышкары, эски кесим жана анын негизги массиви, эгер алардын үстүнө башка шилтемелер жок болсо, garbage collector тарабынан өчүрүлүшү мүмкүн.