Keşfedin, Öğrenin ve Paylaşın
Evrim Ağacı'nda Aradığın Her Şeye Ulaşabilirsin!
Yeni Soru Sor
Paylaşım Yap
Sorulara Dön
Berkay Güler
Berkay Güler
1,707 UP
Üye 2 gün önce
0

En kötü koşulda çalışma süresi O(nk + nlg(n/k)) olan bu algoritmada k değerini "pratikte" nasıl seçmeliyiz?

Insertion ve merge sort algoritmalarının modife edilmesi ile oluşan yeni algoritma O(nk + nlg(n/k)) time complexity değeri ile çalışıyor, "bu durumda hangi k değerini/değer aralığını seçersek algoritma verimli bir şekilde çalışır?" sorusunun cevabı aranıyor
286 görüntülenme
En kötü koşulda çalışma süresi O(nk + nlg(n/k)) olan bu algoritmada k değerini "pratikte" nasıl seçmeliyiz?
En kötü koşulda çalışma süresi O(nk + nlg(n/k)) olan bu algoritmada k değerini "pratikte" nasıl seçmeliyiz?
0
  • Paylaş
  • Alıntıla
  • Alıntıları Göster
  • Dış Sitelerde Paylaş
  • Soruyu Takip Et
  • Raporla
  • Mantık Hatası Bildir
Tüm Reklamları Kapat
1 Cevap
Sena Küçükkıvanç
Bilgisayar Mühendisi 2 gün önce

Pratikte yı seçerken tamamen teorik analizle hareket edilmiyor. Teorik olarak civarına kadar büyütsek de karmaşıklığa hâlâ sadık kalabiliyoruz. Ama işin gerçeğinde tam hangi değerinin "en iyi" olduğunu anlamak için makineye, kod detaylarına ve deneme yanılma testlerine bakmak gerekiyor.

Teori, CPU cache yapısını, bellek bant genişliğini, tahminleme mekanizmalarını filan hesaba katmaz. Insertion sort küçük alt listelerde süper hızlı olabilir çünkü cache dostu ve basit. Nerede daha verimli olduğu, hangi da "patladığı" donanıma göre değişir.

Teorik büyük notasyonunda gizli sabit faktörler pratikte önemli. Örneğin elindeki insertion sort çok iyi optimize edildiyse, biraz daha büyük olsa da sorun olmayabilir. Ya da merge işlemi çok verimliyse belki daha ufak daha iyi olur. Kodun gerçekte nasıl yazıldığı hangi kütüphanelerin kullanıldığı falan fark yaratıyor.

Tüm Reklamları Kapat

Genelde insanlar önce farklı değerlerini (mesela 8, 16, 32, 64) deneyip runtime'ları ölçerler. Sonra hangisi daha hızlıysa onu seçerler. En garanti yol bu: kendi donanımın ve verin üzerinde test etmek yuani.

Python ve Java'daki Timsort gibi yüksek performanslı sortlar genelde 16-64 elemanlık küçük parçalarda insertion sort kullanıyor. Bu aralıklar da tamamen bir sürü testten, deneyimden ve deneme-yanılmadan çıkan sonuçlar tabii.

Bu cevap, soru sahibi tarafından en iyi cevap seçilmiştir. Ancak bu, cevabın doğru olduğunu garanti etmez.
11
0
  • Paylaş
  • Alıntıla
  • Alıntıları Göster
  • Dış Sitelerde Paylaş
  • Raporla
  • Mantık Hatası Bildir
Daha Fazla Cevap Göster
Cevap Ver
Evrim Ağacı Soru & Cevap Platformu, Türkiye'deki bilimseverler tarafından kolektif ve öz denetime dayalı bir şekilde sürdürülen, özgür bir ortamdır. Evrim Ağacı tarafından yayınlanan makalelerin aksine, bu platforma girilen soru ve cevapların içeriği veya gerçek/doğru olup olmadıkları Evrim Ağacı yönetimi tarafından denetlenmemektedir. Evrim Ağacı, bu platformda yayınlanan cevapları herhangi bir şekilde desteklememekte veya doğruluğunu garanti etmemektedir. Doğru olmadığını düşündüğünüz cevapları, size sunulan denetim araçlarıyla işaretleyebilir, daha doğru olan cevapları kaynaklarıyla girebilir ve oylama araçlarıyla platformun daha güvenilir bir ortama evrimleşmesine katkı sağlayabilirsiniz.
Popüler Yazılar
30 gün
90 gün
1 yıl
Evrim Ağacı'na Destek Ol

Evrim Ağacı'nın %100 okur destekli bir bilim platformu olduğunu biliyor muydunuz? Evrim Ağacı'nın maddi destekçileri arasına katılarak Türkiye'de bilimin yayılmasına güç katın.

Evrim Ağacı'nı Takip Et!
Aklımdan Geçen
Komünite Seç
Aklımdan Geçen
Fark Ettim ki...
Bugün Öğrendim ki...
İşe Yarar İpucu
Bilim Haberleri
Hikaye Fikri
Video Konu Önerisi
Başlık
Kafana takılan neler var?
Gündem
Bağlantı
Ekle
Soru Sor
Stiller
Kurallar
Komünite Kuralları
Bu komünite, aklınızdan geçen düşünceleri Evrim Ağacı ailesiyle paylaşabilmeniz içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Bilim kimliğinizi önceleyin.
Evrim Ağacı bir bilim platformudur. Dolayısıyla aklınızdan geçen her şeyden ziyade, bilim veya yaşamla ilgili olabilecek düşüncelerinizle ilgileniyoruz.
2
Propaganda ve baskı amaçlı kullanmayın.
Herkesin aklından her şey geçebilir; fakat bu platformun amacı, insanların belli ideolojiler için propaganda yapmaları veya başkaları üzerinde baskı kurma amacıyla geliştirilmemiştir. Paylaştığınız fikirlerin değer kattığından emin olun.
3
Gerilim yaratmayın.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
4
Değer katın; hassas konulardan ve öznel yoruma açık alanlardan uzak durun.
Bu komünitenin amacı okurlara hayatla ilgili keyifli farkındalıklar yaşatabilmektir. Din, politika, spor, aktüel konular gibi anlık tepkilere neden olabilecek konulardaki tespitlerden kaçının. Ayrıca aklınızdan geçenlerin Türkiye’deki bilim komünitesine değer katması beklenmektedir.
5
Cevap hakkı doğurmayın.
Aklınızdan geçenlerin bu platformda bulunmuyor olabilecek kişilere cevap hakkı doğurmadığından emin olun.
ve seni takip ediyor

Göster

Şifremi unuttum Üyelik Aktivasyonu

Göster

Şifrenizi mi unuttunuz? Lütfen e-posta adresinizi giriniz. E-posta adresinize şifrenizi sıfırlamak için bir bağlantı gönderilecektir.

Geri dön

Eğer aktivasyon kodunu almadıysanız lütfen e-posta adresinizi giriniz. Üyeliğinizi aktive etmek için e-posta adresinize bir bağlantı gönderilecektir.

Geri dön

Close