Okullar için Robotik ve Mühendislik · anaokulundan liseye

Bölüm 9 · Yazılımın içi · Ders 39

Sıralama algoritmaları

Ekleme, birleştirme ve taban sıralaması aynı sonar okumalarında

Veri. Robotun önündeki sonar, bir tarama boyunca 24 mesafe okuması (20–399 cm) verdi. Ortanca mesafeyi ve en yakın 3 engeli bulmak için okumaları sıralamak gerekiyor. Aynı diziyi üç farklı algoritmayla sıralayıp kaç karşılaştırma ve kaç yazma yaptıklarını sayıyoruz.

24 sonar okuması (cm), karışık sırada24 okuma · ekleme sıralaması
1 / 176
siralama.pypython
  1. import numpy as np
  2. rng = np.random.default_rng(5)
  3. a, c = [int(v) for v in rng.integers(20, 400, 24)], [0, 0] # sonar (cm), sayaçlar
  4. def insertion(a):
  5. for i in range(1, len(a)): # a[:i] hep sıralı
  6. for j in range(i, 0, -1):
  7. c[0] += 1 # karşılaştırma
  8. if a[j - 1] <= a[j]: break # yerine oturdu
  9. a[j - 1], a[j] = a[j], a[j - 1] # sola kaydır
  10. return a
  11. def merge(a):
  12. if len(a) < 2: return a
  13. h = len(a) // 2
  14. L, R, out = merge(a[:h]), merge(a[h:]), [] # iki yarıyı sırala
  15. while L and R:
  16. c[1] += 1 # önleri karşılaştır
  17. out.append((L if L[0] <= R[0] else R).pop(0)) # küçüğü al
  18. return out + L + R # artanları ekle
  19. def radix(a):
  20. for d in (1, 10, 100): # birler, onlar, yüzler
  21. a = [v for k in range(10) for v in a if v//d%10==k] # kova k, sıra korunur
  22. return a
  23. print(insertion(a[:]) == merge(a) == radix(a) == sorted(a))
  24. print("ekleme, birleştirme:", c) # karşılaştırma sayıları

Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.

Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.

Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

siralama.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Ekleme: soldaki kısım hep sıralıdır; yeni eleman, kendinden büyük komşusuyla yer değiştirerek yerine kayar. Rastgele dizide yaklaşık n²/4 karşılaştırma; neredeyse sıralı dizide yaklaşık n.
  2. Birleştirme: diziyi ikiye böl, her yarıyı sırala, iki sıralı yarıyı baştan karşılaştırarak birleştir. Her düzeyde en çok n karşılaştırma, log2 n düzey: ~n log2 n.
  3. LSD taban: hiç karşılaştırmaz. Önce birler basamağına, sonra onlar, sonra yüzler basamağına göre kararlı biçimde kovalara dağıtır; 3 geçişte biter (n + aralık işi).
  4. Timsort (Python'un sorted'ı) gerçek veride hazır gelen artan parçaları bulur, kısa parçaları eklemeyle uzatır ve parçaları birleştirmeyle birleştirir: sıralı veride n, en kötü durumda n log n.
  5. Şunu dene: dizi boyunu 12’den 48’e çıkar; ekleme sayacı ~16 kat, birleştirme ~7 kat büyür, taban yalnız 4 kat.

Neden önemli

Sıralama, ortanca süzgeç (sensör gürültüsünü bastırmak), en yakın engelleri seçme, olayları zaman damgasına göre dizme ve ikili aramaya hazırlık için her gün çalışır. Mikrodenetleyicide küçük dizilerde ekleme sıralaması çoğu zaman en hızlısıdır; büyük ve tam sayı verilerde taban sıralaması, genel amaçlı işte ise Timsort ya da birleştirme tercih edilir.

ESOF 323, 11. hafta: robotlarda derin öğrenme →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç