Merge sort uygula
- Algoritmalar kursu
- Orta seviye
- Ders 23/80
- 4 dk
Merge sort ile puanları küçükten büyüğe sıralarsın.
Top N seç
Sıralı diziden en büyük k tanesini seçeceğiz. Sıralı dizi küçükten büyüğe olduğu için, en büyükler dizinin sonundadır ve kolayca alınabilir.
sorted_scores[-k:] bize son k elemanı verir. Bu, en büyük k puandır; sıraları korunur.
Top 3 için [88, 90, 92] bekleriz; yani en yüksek üç puan.
Negatif indeks
Python'da arr[-k:] dizinin son k elemanını verir. [-1] son eleman, [-2:] son iki eleman anlamına gelir.
Bu, arr[len(arr)-k:] yazmaktan daha kısa ve okunaklıdır. Sıralı dizilerde en büyükleri almak için idealdir ve yaygın kullanılır.
En küçük k için arr[:k] kullanılır; bu, baştan dilim alır ve en küçükleri verir.
Uygulama Top N seç
top_k(scores, k) yaz. Önce sırala, sonra en büyük k taneyi döndür. print(top_k(init_scores(), 3)) ile [88, 90, 92] yazdır.
Başlangıç kodu
def init_scores():
# Puan dizisi döndür
return [85, 92, 78, 90, 88]
def merge_sort_scores(scores):
# Skorları sırala
if len(scores) <= 1:
return scores
mid = len(scores) // 2
left = merge_sort_scores(scores[:mid])
right = merge_sort_scores(scores[mid:])
return merge(left, right)
def top_k(scores, k):
# En büyük k taneyi alÖrnek çözüm
def merge(left, right):
result = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i]); i += 1
else:
result.append(right[j]); j += 1
result.extend(left[i:]); result.extend(right[j:])
return result
def init_scores():
# Puan dizisi döndür
return [85, 92, 78, 90, 88]
def merge_sort_scores(scores):
# Skorları sırala
if len(scores) <= 1:
return scores
mid = len(scores) // 2
left = merge_sort_scores(scores[:mid])
right = merge_sort_scores(scores[mid:])
return merge(left, right)
def top_k(scores, k):
# En büyük k taneyi al
sorted_scores = merge_sort_scores(scores)
return sorted_scores[-k:]
print(top_k(init_scores(), 3))Beklenen çıktı
[88, 90, 92]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Dilim
return sorted_scores[____:]
return sorted_scores[-k:]
Açıklama: -k doğru.
2 Merge sort uygula: kavramları eşleştir
| Kavram | Anlamı |
|---|---|
En büyük k |
[-k:] |
En küçük k |
[:k] |
Son eleman |
[-1] |
İlk eleman |
[0] |
3 Top 3 için ne kullanılır?
- sorted_scores[:3]
- sorted_scores[-1]
- sorted_scores[3]
- sorted_scores[-3:] Doğru cevap
Açıklama: sorted_scores[-3:]