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

Resizing the Queue (Kuyruğun Yeniden Boyutlandırılması)


Doğuhan ELMA

209 views

Resizing the Queue (Kuyruğun Yeniden Boyutlandırılması), bir kuyruk veri yapısının kapasitesinin dinamik olarak değiştirilmesi işlemidir. Bu, bir kuyruğun içeriğinin yeterince büyük veya küçük olmaması durumunda, kuyruğun verimli bir şekilde çalışmasını sağlamak için gereklidir.

Neden Gerekli?

Performans İyileştirmesi: Kapasitesi dolmuş bir kuyruğa yeni öğeler eklemek istediğinizde, yeni bir kapasiteyle kuyruğu yeniden boyutlandırmak gerekir.

Alan Kullanımı: Eğer kuyruğunuz çok büyük bir kapasiteye sahip ancak yalnızca küçük bir bölümü kullanılıyorsa, daha küçük bir kapasiteye yeniden boyutlandırmak, kullanılmayan alanı serbest bırakabilir.

Nasıl Çalışır?

Yeniden boyutlandırma işlemi, genellikle kuyruk dolu olduğunda veya belirli bir kullanım oranının altına düştüğünde gerçekleşir. Bu, yeni bir dizi oluşturmayı, eski dizi içeriğini yeni diziye kopyalamayı ve eski diziyi yeni diziyle değiştirmeyi içerir.

Örnek:

Yeniden boyutlandırma işlemini içeren bir kuyruk sınıfı oluşturalım:

class ResizableQueue:
    def __init__(self, capacity=10):
        self.queue = [None] * capacity
        self.front = self.size = 0
        self.rear = -1
        self.capacity = capacity

    def enqueue(self, item):
        if self.size == self.capacity:
            self.resize(2 * self.capacity) # Kapasite dolu, 2 katına çıkar
        self.rear = (self.rear + 1) % self.capacity
        self.queue[self.rear] = item
        self.size += 1

    def dequeue(self):
        if self.is_empty():
            return "Kuyruk boş."
        removed_item = self.queue[self.front]
        self.front = (self.front + 1) % self.capacity
        self.size -= 1
        if 0 < self.size == self.capacity // 4: # Kullanım oranı %25 ise
            self.resize(self.capacity // 2) # Kapasiteyi yarıya indir
        return removed_item

    def is_empty(self):
        return self.size == 0

    def resize(self, new_capacity):
        new_queue = [None] * new_capacity
        for i in range(self.size):
            new_queue[i] = self.queue[(self.front + i) % self.capacity]
        self.queue = new_queue
        self.front = 0
        self.rear = self.size - 1
        self.capacity = new_capacity

Bu kod, kuyruğun dolu olduğunda kapasiteyi iki katına çıkarır ve kullanım oranı %25'in altına düştüğünde kapasiteyi yarıya indirir. resize metodu, yeni bir dizi oluşturur ve eski dizinin içeriğini kopyalar, böylece kuyruğun dinamik olarak yeniden boyutlandırılmasını sağlar.

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...