Ampirik algoritmalar - Empirical algorithmics

İçinde bilgisayar Bilimi, ampirik algoritmalar (veya deneysel algoritmalar) kullanma pratiğidir ampirik yöntemler davranışını incelemek algoritmalar. Uygulama, algoritma geliştirme ve denemeyi birleştirir: algoritmalar sadece tasarlanmaz, aynı zamanda çeşitli durumlarda uygulanır ve test edilir. Bu süreçte, algoritmanın adım adım geliştirilebilmesi için bir algoritmanın ilk tasarımı analiz edilir.[1]

Genel Bakış

Ampirik algoritmalardan gelen yöntemler, teorik yöntemleri tamamlar. algoritmaların analizi.[2] Ampirik yöntemlerin ilkeli uygulaması yoluyla, özellikle İstatistik, genellikle yüksek performans gibi algoritmaların davranışına ilişkin içgörüler elde etmek mümkündür. sezgisel algoritmalar zor için kombinatoryal problemler (şu anda) teorik analize erişilemeyen[3] Deneysel yöntemler aynı zamanda önemli iyileştirmeler elde etmek için de kullanılabilir. algoritmik verimlilik.[4]

Amerikalı bilgisayar bilimcisi Catherine McGeoch deneysel algoritmanın iki ana dalını tanımlar: ilki ( deneysel Analiz) davranışının analizi ve karakterizasyonu ile ilgilenir algoritmalar ve ikincisi (olarak bilinir algoritma tasarımı veya algoritma mühendisliği) performansını artırmak için ampirik yöntemlere odaklanmıştır. algoritmalar.[5] Birincisi, genellikle aşağıdaki tekniklere ve araçlara dayanır: İstatistik ikincisi ise İstatistik, makine öğrenme ve optimizasyon. Dinamik analiz araçlar, tipik olarak performans profil oluşturucuları, çeşitli bağlamlarda kullanılmak üzere çeşitli türlerdeki algoritmaların seçimi ve iyileştirilmesi için ampirik yöntemler uygulanırken yaygın olarak kullanılır.[6][7][8]

Ampirik algoritmalarla ilgili araştırmalar, aşağıdakiler de dahil olmak üzere çeşitli dergilerde yayınlanmıştır. ACM Journal on Experimental Algorithmics (JEA) ve Yapay Zeka Araştırmaları Dergisi (JAIR). Catherine McGeoch'un yanı sıra, ampirik algoritmalarda tanınmış araştırmacılar arasında Bernard Moret, Giuseppe F. Italiano, Holger H. Hoos, David S. Johnson, ve Roberto Battiti.[9]

Karmaşık algoritmaların tasarımında performans profili oluşturma

Ampirik algoritmaların yokluğunda, bir algoritmanın karmaşıklığının analiz edilmesi, algoritmanın kullanılabileceği çeşitli durumlara uygulanabilen çeşitli teorik yöntemleri içerebilir.[10] Bellek ve önbellek konuları, genellikle belirli bir amaç için karmaşık bir algoritmanın teorik seçiminde veya optimizasyonuna yaklaşımda dikkate alınması gereken önemli faktörlerdir.[11][12] Verim profil oluşturma bir dinamik program analizi Tipik olarak tüm bir uygulamanın kodundaki darboğazları bulmak ve analiz etmek için kullanılan teknik[13][14][15] veya kötü performans gösteren kodu belirlemek için bir uygulamanın tamamını analiz etmek için.[16] Profil oluşturucu, bir uygulamanın performans sorunlarıyla en alakalı kodu ortaya çıkarabilir.[17]

Profil oluşturucu, belirli bir durumda bir algoritmanın diğerine ne zaman seçileceğini belirlemeye yardımcı olabilir.[18] Karmaşıklık analizinde olduğu gibi, ayrı bir algoritma profili oluşturulduğunda, bellek ve önbellek hususları genellikle komut sayılarından veya saat döngülerinden daha önemlidir; ancak profil oluşturucunun bulguları, algoritmanın verilere nasıl eriştiğinin ışığında, kullandığı talimatların sayısından ziyade değerlendirilebilir.[19]

Profil oluşturma, bir algoritmanın davranışına ilişkin sezgisel içgörü sağlayabilir[20] performans bulgularını görsel bir temsil olarak ortaya koyarak.[21] Performans profili oluşturma, örneğin, algoritmaların geliştirilmesi sırasında uygulanmıştır. eşleşen joker karakterler. Joker karakterleri eşleştirmek için erken algoritmalar, örneğin Zengin Salz ' yabani hayvan algoritma[22] tipik olarak güvenilen özyineleme performans gerekçesiyle eleştirilen bir teknik.[23] Krauss eşleştirme joker karakter algoritması kullanarak yinelemeli olmayan bir alternatif formüle etme girişimine dayanarak geliştirilmiştir. test durumları[24] ardından performans profili oluşturma yoluyla önerilen optimizasyonlar,[25] diğer hususlarla birlikte profil oluşturma ışığında tasarlanan yeni bir algoritmik strateji ile sonuçlanır.[26] Düzeyinde veri toplayan profil oluşturucular temel bloklar[27] veya donanım yardımına dayanan[28] belirli bir bilgisayar veya durum için algoritmaları optimize etmede yazılım geliştiricilerine yardımcı olacak kadar doğru olabilecek sonuçlar sağlar.[29] Performans profili oluşturma, geliştiricinin karmaşık durumlarda uygulanan karmaşık algoritmaların özelliklerini anlamasına yardımcı olabilir. birlikte evrimsel rastgele test tabanlı problemlere uygulanan algoritmalar ve tasarımda iyileştirmeler yapılmasına yardımcı olabilir.[30]

Ayrıca bakınız

Referanslar

  1. ^ Fleischer, Rudolf; ve diğerleri, eds. (2002). Algoritma Tasarımından Sağlam ve Verimli Yazılıma Deneysel Algoritma. Springer International Publishing AG.
  2. ^ Moret, Bernard M. E. (1999). Deneysel Algoritma Disiplinine Doğru. Ayrık Matematik ve Teorik Bilgisayar Bilimlerinde DIMACS Serileri. 59. Ayrık Matematik ve Teorik Bilgisayar Bilimlerinde DIMACS Serileri. s. 197–213. doi:10.1090 / dimacs / 059/10. ISBN  9780821828922. S2CID  2221596.
  3. ^ Hromkovic, Juraj (2004). Zor Problemler için Algoritmalar. Springer International Publishing AG.
  4. ^ Guzman, John Paul; Limuzin, Teresita (2017). "Büyük Teta Zamanı Karmaşıklığına Yaklaşımlarla Sonuçlanan Algoritma Analizine Ampirik Bir Yaklaşım" (PDF). Yazılım Dergisi. 12 (12).
  5. ^ McGeoch Catherine (2012). Deneysel Algoritma Rehberi. Cambridge University Press. ISBN  978-1-107-00173-2.
  6. ^ Coppa, Emilio; Demetrescu, Camil; Finocchi, Irene (2014). "Girişe Duyarlı Profil Oluşturma". Yazılım Mühendisliğinde IEEE İşlemleri. 40 (12): 1185–1205. doi:10.1109 / TSE.2014.2339825.
  7. ^ Moret, Bernard M. E .; Bader, David A .; Warnow, Tandy (2002). "Hesaplamalı Filogenetik için Yüksek Performanslı Algoritma Mühendisliği" (PDF). Süper Hesaplama Dergisi. 22 (1): 99–111. doi:10.1023 / a: 1014362705613.
  8. ^ Zaparanuks, Dmitrijs; Hauswirth, Matthias (2012). Algoritmik Profil Oluşturma. 33rd ACM SIGPLAN Programlama Dili Tasarımı ve Uygulaması Konferansı. ACM Dijital Kitaplığı. sayfa 67–76. CiteSeerX  10.1.1.459.4913.
  9. ^ "Deneysel algoritmalar üzerine: Catherine McGeoch ve Bernard Moret ile röportaj". Ubiquity. ACM Dijital Kitaplığı. 2011 (Ağustos). 2011.
  10. ^ Grzegorz, Mirek (2018). "Büyük-O Belirsizliği". performans kodu_.
  11. ^ Kölker, Jonas (2009). "Big-O notasyonu ne zaman başarısız olur?". Yığın Taşması.
  12. ^ Lemire Daniel (2013). "Big-O notasyonu ve gerçek dünya performansı". WordPress.
  13. ^ "Uygulama Darboğazlarını Bulma". dotTrace 2018.1 Yardımı. JetBrains. 2018.
  14. ^ Shmeltzer Shay (2005). "Olay Profilcisi ile Kodunuzdaki Darboğazları Bulma". Oracle Technology Network JDeveloper belgeleri. Oracle Corp.
  15. ^ Shen, Du; Poshyvanyk, Denys; Luo, Qi; Grechanik, Mark (2015). "Arama tabanlı uygulama profili oluşturmayı kullanarak performans darboğazı algılamayı otomatikleştirme" (PDF). ISSTA 2015 Uluslararası Yazılım Test ve Analizi Sempozyumu 2015 Bildirileri. ACM Dijital Kitaplığı: 270–281. doi:10.1145/2771783.2771816. ISBN  9781450336208.
  16. ^ "Performans ve Bellek Profili Oluşturma ve Kod Kapsamı". Profil Öğrenim Merkezi. SmartBear Yazılımı. 2018.
  17. ^ Janssen, Thorben (2017). "11 Basit Java Performans Ayarlama İpucu". Geliştirici İpuçları, Püf Noktaları ve Kaynakları Stackify.
  18. ^ O'Sullivan, Bryan; Stewart, Don; Goerzen, John (2008). "25. Profil oluşturma ve optimizasyon". Gerçek Dünya Haskell. O'Reilly Media.
  19. ^ Ihlamur, Doug (2007). "Profil Oluşturma ve Optimizasyon". Second Life Wiki.
  20. ^ Pattis, Richard E. (2007). "Algoritma Analizi, İleri Programlama / Uygulama, 15-200". Bilgisayar Bilimleri Fakültesi, Carnegie Mellon Üniversitesi.
  21. ^ Wickham Hadley (2014). "Kodu optimize etme". Gelişmiş R. Chapman ve Hall / CRC.
  22. ^ Salz, Zengin (1991). "wildmat.c". GitHub.
  23. ^ Cantatore, Alessandro (2003). "Joker karakter eşleme algoritmaları".
  24. ^ Krauss, Kirk (2008). "Eşleşen Joker Karakterler: Bir Algoritma". Dr. Dobb's Journal.
  25. ^ Krauss, Kirk (2014). "Joker Karakterleri Eşleştirme: Bir Algoritmayı Ehlileştirmenin Ampirik Bir Yolu". Dr. Dobb's Journal.
  26. ^ Krauss, Kirk (2018). "Eşleşen Joker Karakterler: Büyük Veriler için Geliştirilmiş Algoritma". Performans için Geliştirme.
  27. ^ Grehan, Rick (2005). "Kod Profilcileri: Performansı Analiz Etmek İçin Bir Araç Seçme" (PDF). Freescale Semiconductor. Öte yandan, kodunuzda mikroskobik doğrulukla adım adım ilerlemeniz, makine talimatlarının ince ayarını yapmanız gerekiyorsa, döngü sayma özelliğine sahip aktif bir profil oluşturucu yenilemez.
  28. ^ Hough, Richard; et al. (2006). "Döngü-Doğru Mikro Mimari Performans Değerlendirmesi". Introspektif Mimari Çalıştayı Bildirileri. Gürcistan Teknoloji Enstitüsü. CiteSeerX  10.1.1.395.9306.
  29. ^ Khamparia, Aditya; Banu, Saira (2013). Dinamik Enstrümantasyon Pimi ve Performans Araçları ile Program Analizi. IEEE Uluslararası Bilgisayar, İletişim ve Nanoteknolojide Yükselen Trendler Konferansı. IEEE Xplore Dijital Kitaplığı.
  30. ^ Jaskowski, Wojciech; Liskowski, Pawel; Szubert, Marcin Grzegorz; Krawiec, Krzysztof (2016). "Performans profili: Test tabanlı problemler için çok kriterli bir performans değerlendirme yöntemi" (PDF). Uygulamalı Matematik ve Bilgisayar Bilimleri. De Gruyter. 26: 216.