CodeBlanks Logo Icon CodeBlanks

Sayma mantığı

Her değerin sayısını sayıp kümülatif toplamla diziyi sıralamayı öğrenirsin.

Sayma mantığı

Counting sort, karşılaştırma yapmadan sıralar. Her elemanın kaç kez geçtiğini sayar, sonra sıralı çıktıyı bu sayılardan üretir.

Anahtarlar küçük tamsayı aralığında olduğunda O(n + k) çalışır; k anahtar aralığıdır. Karşılaştırmalı sıralamalardan hızlıdır.

Ancak aralık büyükse k belleği patlar. Bu yüzden yalnızca küçük aralıklı tamsayı anahtarlar için uygundur.

Aralık maliyeti

Counting sort, 0'dan max(arr)'a kadar bir sayı dizisi oluşturur. Aralık k = max - min + 1.

Bellek O(k). Eğer k çok büyükse (ör. 0'dan milyona), bu diziyi tutmak pahalıdır.

Bu yüzden counting sort, anahtarların yoğun olduğu dar aralıklarda en iyisidir. Negatif sayılar için kaydırma (offset) gerekir.

Uygulama Eleman say

count_value(arr, v) yaz. arr içinde v'nin kaç kez geçtiğini say. print(count_value([3, 1, 4, 1, 5, 1], 1)) ile 3 yazdır.

Başlangıç kodu

solution.py
def count_value(arr, v):
    # v'yi say

Örnek çözüm

solution.py
def count_value(arr, v):
    # v'yi say
    count = 0
    for x in arr:
        if x == v:
            count += 1
    return count
print(count_value([3, 1, 4, 1, 5, 1], 1))

Beklenen çıktı

3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Counting sort ne zaman verimlidir?

  • Her zaman
  • Küçük tamsayı aralığında Doğru cevap
  • Sadece büyük dizilerde
  • Sadece metinde

Açıklama: Küçük tamsayı aralığında

2 Aralık boyutu

Soru
k = max(arr) - min(arr) + ____
Cevap
k = max(arr) - min(arr) + 1

Açıklama: 1 doğru.

3 Sayma mantığı: kavramları eşleştir

Kavram Anlamı
Counting sort Karşılaştırmaz
Maliyet O(n+k)
Bellek O(k)
Aralık Dar olmalı

Orta seviye bölümündeki tüm dersler