Python

Python Block Sort Algoritması

Herkese merhaba, Python yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda sıralama algoritmalarından biri olan Block Sort Algoritması’nı anlatacağım. Hadi başlayalım !

Block Sort Algoritması

Block sort algoritması, önce dosyayı sabit boyutlu bloklara bölerek işlemi gerçekleştirir. Daha sonra, her blok ayrı ayrı sıralanır ve ardından birleştirilerek tam sıralama gerçekleştirilir. Bu işlem, bir dizi harici bellek bloğu kullanılarak gerçekleştirilir.

Block sort algoritmasının çalışma prensibi şu adımları içerir:

  1. Dosya sabit boyutlu bloklara bölünür.
  2. Her blok ayrı ayrı sıralanır.
  3. Sıralanmış bloklar, harici bellek blokları aracılığıyla birleştirilir.
  4. İşlem, tüm blokların birleştirilmesiyle tamamlanır.

Bu algoritmanın avantajlarından biri, sıralama işleminin harici bellekte gerçekleştirilmesidir. Bu nedenle, daha büyük dosyaların sıralanması için kullanılabilir.

Block sort algoritmasının dezavantajlarından biri ise, birleştirme işleminin zaman alabilmesidir. Bu nedenle, sıralama işlemi büyük dosyalar için daha uzun sürebilir.

Python Kodu

Şimdi, block sort algoritmasını Python kodu kullanarak nasıl uygulayabileceğimizi inceleyelim.

Adım 1: Dosyayı Bloklara Bölme

Öncelikle, dosyayı belirli boyutlu bloklara bölmek için bir fonksiyon yazalım. Bu örnekte, bloklar 5 eleman içerecek şekilde ayarlanmıştır. Bu fonksiyon, belirli bir dosyayı bloklara ayırmak için kullanılabilir.

def create_blocks(file_path, block_size):
    with open(file_path, 'r') as f:
        while True:
            block = f.read(block_size)
            if not block:
                break
            yield block.splitlines()

Adım 2: Her Bloğu Ayrı Ayrı Sıralama

Şimdi, her bloğu ayrı ayrı sıralamak için bir fonksiyon yazalım. Bu örnekte, blokların elemanları alfabetik olarak sıralanmıştır. Bu fonksiyon, sıralama işlemi için kullanılabilir.

def sort_blocks(blocks):
    return [sorted(block) for block in blocks]

Adım 3: Sıralanmış Blokları Birleştirme

Sıralanmış blokları birleştirmek için merge() adlı bir fonksiyon yazabiliriz. Bu fonksiyon, iki sıralanmış bloğu birleştirir.

def merge(block1, block2):
    result = []
    i, j = 0, 0
    while i < len(block1) and j < len(block2):
        if block1[i] < block2[j]:
            result.append(block1[i])
            i += 1
        else:
            result.append(block2[j])
            j += 1
    result.extend(block1[i:])
    result.extend(block2[j:])
    return result

Bu fonksiyon, iki bloku birleştirir ve sonuç bloğunu döndürür. İki blok da sıralı olduğundan, birleştirme işlemi sıralı bir şekilde gerçekleştirilir.

Adım 4: Blokları Birleştirme

Sıralanmış blokları birleştirmek için merge_blocks() adlı bir fonksiyon yazabiliriz. Bu fonksiyon, birleştirme işlemini gerçekleştirir ve son sıralı bloğu döndürür.

def merge_blocks(blocks):
    while len(blocks) > 1:
        merged_blocks = []
        for i in range(0, len(blocks), 2):
            if i + 1 < len(blocks):
                merged_block = merge(blocks[i], blocks[i + 1])
            else:
                merged_block = blocks[i]
            merged_blocks.append(merged_block)
        blocks = merged_blocks
    return blocks[0]

Bu fonksiyon, blokları birleştirerek son sıralı bloğu döndürür. Bloklar, çift sayıda eleman içerdiği sürece birleştirme işlemi devam eder.

Adım 5: Block Sort Algoritmasını Uygulama

Şimdi, yukarıdaki fonksiyonları kullanarak block sort algoritmasını uygulayabiliriz.

def block_sort(file_path, block_size):
    blocks = create_blocks(file_path, block_size)
    sorted_blocks = sort_blocks(blocks)
    sorted_file = merge_blocks(sorted_blocks)
    return sorted_file

Bu fonksiyon, bir dosya ve blok boyutunu alır ve sıralanmış dosyayı döndürür. Fonksiyon, yukarıdaki diğer fonksiyonları kullanarak block sort algoritmasını uygular.

Örnek olarak, bir dosyanın block sort algoritması ile sıralanması aşağıdaki gibi uygulanabilir:

file_path = "example.txt"
block_size = 5

sorted_file = block_sort(file_path, block_size)

print(sorted_file)

Bu örnekte, “example.txt” adlı bir dosya sıralanır ve bloklar 5 eleman içerecek şekilde ayarlanır. Daha sonra, blocksort() fonksiyonu ile sıralanır ve son sıralı dosya döndürülür.

Tamamlayıcı Fonksiyonlar

Yukarıdaki adımlarda kullanılan tamamlayıcı fonksiyonlar şunlardır:

  • read_file(file_path): Bir dosyayı okur ve içeriğini bir liste olarak döndürür.
  • create_blocks(file_path, block_size): Bir dosyayı okur, belirtilen blok boyutunda bloklara ayırır ve blokları bir liste olarak döndürür.
  • sort_blocks(blocks): Bir blok listesi alır ve her bloğu ayrı ayrı sıralar, sıralanmış blokları bir liste olarak döndürür.
  • merge(block1, block2): İki sıralanmış bloğu birleştirir ve sonuç bloğunu döndürür.
  • merge_blocks(blocks): Sıralanmış blokları birleştirir ve son sıralı bloğu döndürür.

Örnek Uygulama

Block sort algoritmasını gerçek bir dosyada deneyelim. “example.txt” adlı bir dosya oluşturup içine rastgele sayılar yazalım.

import random

file_path = "example.txt"

with open(file_path, "w") as f:
    for i in range(50):
        f.write(str(random.randint(0, 99)) + "\n")

Bu kod, “example.txt” adlı bir dosya oluşturur ve içine 50 tane rastgele sayı yazar.

Şimdi, block sort algoritmasını bu dosya için uygulayalım.

sorted_file = block_sort(file_path, block_size=10)

print(sorted_file)

Bu kod, “example.txt” adlı dosyayı okur, bloklara ayırır, her bloğu ayrı ayrı sıralar, blokları birleştirir ve son sıralı dosyayı döndürür.

Görüldüğü gibi, dosyadaki sayılar sıralı bir şekilde listelendi. Block sort algoritması, büyük dosyaları daha hızlı sıralamak için kullanılabilir.

Evet Python’da Block Sort Algoritması bu şekilde yazılmakta. Tüm Python yazılarımıza buraya, diğer sıralama algoritmaları ile ilgili yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu