Dinamik Bir Dizi Tanımlama
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.