Jump to content
  • entries
    33
  • comments
    0
  • views
    69,722

Dinamik Bir Dizi Tanımlama


Doğuhan ELMA

221 views

Python'da, listeler zaten dinamik bir dizi olarak uygulanır, bu nedenle Python'da bir dinamik dizi uygulamanın pek bir anlamı yoktur. Ancak, eğitim amaçlı, Python'da bir liste kullanarak basit bir dinamik dizi uygulaması aşağıdaki gibidir.

class DynamicArray:
    def __init__(self):
        self._n = 0  # Dizideki eleman sayısı
        self._capacity = 1  # Ayrılan kapasite
        self._A = self._make_array(self._capacity)  # Dizi

    def __len__(self):
        return self._n

    def __getitem__(self, k):
        if not 0 <= k < self._n:
            raise IndexError('Invalid index')
        return self._A[k]

    def append(self, obj):
        if self._n == self._capacity:  # Kapasite doluysa genişlet
            self._resize(2 * self._capacity)
        self._A[self._n] = obj
        self._n += 1

    def _resize(self, c):
        B = self._make_array(c)
        for k in range(self._n):
            B[k] = self._A[k]
        self._A = B
        self._capacity = c

    def _make_array(self, c):
        return (c * ctypes.py_object)()

Bu kod bir dinamik dizi oluşturur. Başlangıçta, kapasite 1 olan bir dizi oluşturulur. append() işlevi çağrıldığında, dizide yeterli alan olup olmadığı kontrol edilir. Eğer yeterli alan yoksa, dizinin kapasitesi iki katına çıkarılır. Bu, _resize() işlevi tarafından yapılır.

Bu, çok büyük olmayan bir liste için etkili bir yöntemdir, çünkü liste büyüdükçe her bir yeniden boyutlandırma daha az sıklıkla gerçekleşir. Her yeniden boyutlandırmada, önceki tüm öğeler yeni listeye kopyalanır, bu nedenle bu işlem O(n) zaman alır. Ancak, eğer listemiz çift hızda büyürse, toplamda O(n) zaman gerektirecek şekilde amortize edilmiş zaman karmaşıklığımız O(1) olacaktır.

Lütfen dikkat: Bu kodu çalıştırmadan önce import ctypes eklemeyi unutmayın. Bu modül, Python nesneleri için düşük seviye bir dizi oluşturmak için gereklidir.

Not: Bu kod, bir dinamik dizinin nasıl çalıştığını anlamanıza yardımcı olmak için bir örnektir ve gerçek bir uygulamada kullanılmamalıdır. Python'daki listeler zaten dinamik bir dizi olarak uygulanmıştır ve bu işlemleri sizin için otomatik olarak gerçekleştirirler.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...