Python'da Selection (Seçim Algoritması) Detaylı Anlatım
Selection (seçim) algoritması, bir dizideki en küçük (veya en büyük) elemanı bulmaya yarayan basit bir algoritmadır. Aynı zamanda selection sort (seçerek sıralama) algoritmasının da temelini oluşturur.
Selection Algoritmasının Temel Mantığı
Selection algoritmasının temel adımları:
Dizinin ilk elemanını minimum (veya maksimum) olarak işaretle
Dizinin kalan elemanlarını tarayarak daha küçük (veya büyük) bir eleman bul
Bulunan yeni minimum (veya maksimum) elemanı başlangıçtaki elemanla yer değiştir
Bu işlemi dizinin sıralanmış kısmına ekleyerek tekrarla
Python'da Selection Algoritması Uygulaması
1. Minimum Elemanı Bulma
def find_min(arr): min_index = 0 for i in range(1, len(arr)): if arr[i] < arr[min_index]: min_index = i return min_index # Örnek kullanım numbers = [64, 25, 12, 22, 11] min_idx = find_min(numbers) print(f"En küçük eleman: {numbers[min_idx]}, indeksi: {min_idx}")
2. Maximum Elemanı Bulma
def find_max(arr): max_index = 0 for i in range(1, len(arr)): if arr[i] > arr[max_index]: max_index = i return max_index # Örnek kullanım numbers = [64, 25, 12, 22, 11] max_idx = find_max(numbers) print(f"En büyük eleman: {numbers[max_idx]}, indeksi: {max_idx}")
3. Selection Sort (Seçerek Sıralama)
def selection_sort(arr): n = len(arr) for i in range(n): # Minimum elemanın indeksini bul min_idx = i for j in range(i+1, n): if arr[j] < arr[min_idx]: min_idx = j # Bulunan minimum elemanı mevcut pozisyona yerleştir arr[i], arr[min_idx] = arr[min_idx], arr[i] return arr # Örnek kullanım numbers = [64, 25, 12, 22, 11] sorted_numbers = selection_sort(numbers) print("Sıralanmış dizi:", sorted_numbers)
Algoritmanın Karmaşıklığı
Zaman Karmaşıklığı: O(n²) - İç içe iki döngü olduğu için
Uzay Karmaşıklığı: O(1) - Yerinde sıralama yaptığı için ekstra bellek kullanımı yok
Avantajları ve Dezavantajları
Avantajları:
Basit ve anlaşılır bir algoritma
Küçük veri setleri için kullanılabilir
Yerinde sıralama yapar (ek bellek gerektirmez)
Dezavantajları:
Büyük veri setleri için verimsiz
O(n²) zaman karmaşıklığına sahip
Diğer O(n²) algoritmalara göre (örneğin bubble sort) genellikle daha yavaş
Pratik Uygulama Örneği
def selection_algorithm(arr, k): """ Dizideki k. en küçük elemanı bulma (0-based index) """ for i in range(k+1): min_idx = i for j in range(i+1, len(arr)): if arr[j] < arr[min_idx]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] return arr[k] # Örnek kullanım data = [7, 10, 4, 3, 20, 15] k = 3 # 4. en küçük eleman (0-based index) result = selection_algorithm(data, k) print(f"{k}. en küçük eleman: {result}")
Selection algoritması, basitliği nedeniyle öğrenme amaçlı iyi bir başlangıç noktasıdır, ancak pratik uygulamalarda daha verimli algoritmalar (quicksort, mergesort vb.) tercih edilir.
Hiç yorum yok:
Yorum Gönder