Sobes.tech
Middle

Go-da dilimin ölçüsünün artırılması üçün hansı algoritm istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da dilim ölçüsünü artırmaq aşağıdakı algoritma ilə baş verir append() funksiyasından istifadə zamanı:

  1. Yeni dilimin tələb olunan tutumu (capacity) müəyyən edilir.
  2. Əgər mövcud tutum yeni elementləri yerləşdirmək üçün kifayət edirsə (cap(s) >= len(s) + len(elements)), elementlər sadəcə mövcud əsas massivinin sonuna əlavə olunur və yeni dilim bu sahəyə işarə edir.
  3. Əgər mövcud tutum kifayət etməzsə, daha böyük tutuma malik yeni əsas massiv ayrılır. Bu yeni tutumu müəyyən edən algoritm aşağıdakı kimidir:
    • Tələb olunan tutum köhnə tutumun iki qatından çoxdursa (requiredCap > 2 * oldCap), yeni tutum tələb olunan olur.
    • Əgər köhnə tutum 1024-dən kiçikdirsə (oldCap < 1024), tutum ikiqat artırılır (newCap = oldCap * 2).
    • Əgər köhnə tutum 1024 və ya daha çoxdursa (oldCap >= 1024), tutum 25% artırılır (newCap = oldCap + oldCap/4) və tələb olunan tutuma çatana qədər davam edir.
  4. Köhnə əsas massivdən yeni əsas massivə elementlər köçürülür.
  5. Yeni elementlər yeni əsas massivə əlavə olunur.
  6. Yeni tutum yaddaşın hizalanması səbəbindən hesablanan dəyərdən bir az böyük ola bilər.
  7. append() funksiyası yeni əsas massivə işarə edən yeni dilim qaytarır.

Bundan başqa, köhnə dilim və onun əsas massivi, əgər onlara artıq istinad yoxdursa, toplayıcı tərəfindən silinə bilər.