Neden iki algoritmayı karşılaştırmak için çalışma zamanı yerine karşılaştırmalar kullanılır?


19

Birkaç CS araştırma makalesinde, iki algoritmanın verimliliğini karşılaştırmak için, gerçek hesaplama sürelerinin kendisinden ziyade algoritmalardaki toplam anahtar karşılaştırmanın kullanıldığını fark ettim. Neden her iki programı çalıştırarak ve algoritmaları çalıştırmak için gereken toplam süreyi sayarak hangisinin daha iyi olduğunu karşılaştıramıyoruz?


Hoşgeldiniz! Umarım bu yazıların çoğunda çalışma zamanı kullanılmaz. Bununla birlikte, bazılarının özellikle daha uygulamalı topluluklarda ve dikkate alınan sistemlerin çok karmaşık olduğunu biliyorum.
Raphael

Yanıtlar:


14

Bu aslında bazı metodik ve pragmatik cevapları olan derin bir konudur. Eldeki algoritma (lar) hakkında bir şeyler bilmek istediğinizi varsayıyorum . Belirli girdilerde belirli bir makinede hangi algoritmanın daha iyi çalıştığını bilmek istiyorsanız, devam edin ve çalışma zamanlarını ölçün. Belirli bir algoritma için bir derleyicinin kalitesini karşılaştırmak istiyorsanız, devam edin ve çalışma zamanlarını ölçün. Algoritma hakkında bir şeyler öğrenmek için yapma.

Önce çalışma zamanlarının kullanılmasının iyi bir fikir olmadığına dair bazı nedenler vereyim.

  1. Genel
    Bir makinede bir dil ve bir derleyici kullanılarak ölçülen çalışma zamanlarının herhangi bir bileşeni değiştirirseniz çok az anlamı vardır. Aynı algoritmanın biraz farklı uygulamaları bile farklı performans gösterebilir, çünkü durumda derleyici optimizasyonunu tetiklersiniz, diğerinde değil.
  2. Tahmin
    Bazı girdiler için birkaç çalışma süreniz var. Bu, başka bir girdinin çalışma zamanı hakkında ne anlatıyor? Genel olarak, hiçbir şey.
  3. Önem
    Genellikle, tüm girişleri (bazı boyutlarda) karşılaştırmazsınız, böylece algoritmaları karşılaştırma yeteneğinizi hemen kısıtlar: belki test setiniz birindeki en kötü durumu ve diğer algoritmada en iyi durumu tetikledi? Veya girişleriniz çalışma zamanı davranışını gösteremeyecek kadar küçük olabilir .
  4. Ölçüm
    Ölçüm runtimes iyi önemsiz değil. JIT var mı? Çekişme oldu mu, yani algoritmanın çalışmadığı zamanı sayıyor musunuz? Aynı makine durumunu başka bir çalışma için (diğer algoritmanın), özellikle de eşzamanlı işlemler ve önbellekler için çoğaltabilir misiniz? Bellek gecikmesi nasıl ele alınır?

Umarım bunlar sizi çalışma zamanlarının algoritmaları karşılaştırmak için korkunç bir ölçü olduğuna ve algoritma çalışma zamanını araştırmak için bazı genel, soyut bir yönteme ihtiyaç olduğuna ikna etti.

Sorunun ikinci kısmına geçelim. Neden karşılaştırmaları veya benzer temel işlemleri kullanıyoruz?

  1. Analitik
    izlenebilirlik Resmi analiz yapmak istediğinizi varsayarsak, bunu yapabilmeniz gerekir. Bireysel ifadelerin sayılması çok teknik, hatta bazen zor; yine de bazı insanlar bunu yapar (örneğin Knuth). Sadece bazı ifadeleri saymak - çalışma zamanına hâkim olanlar - daha kolaydır. Aynı nedenden ötürü, en kötü durum çalışma zamanını genellikle "sadece" araştırıyoruz (üst sınırlar açık).

  2. Hakimiyet
    Seçilen işlem , çalışma zamanına hakimdir . Bu, en fazla çalışma süresine katkıda bulunduğu anlamına gelmez - karşılaştırmalar, örneğin kelime boyutlu tamsayıları sıralarken Quicksort'ta açıkça görülmez. Ancak bunlar en sık yürütülür , bu nedenle onları sayarak algoritmanın en çok çalıştırılan bölümlerinin ne sıklıkta çalıştırıldığını sayarsınız. Sonuç olarak, asimptotik çalışma süreniz baskın temel işlemlerin sayısı ile orantılıdır. Bu yüzden sadece karşılaştırmaları saymamıza rağmen Landau notasyonunu ve "çalışma zamanı" kelimesini kullanmakta rahatız.

Birden fazla işlem saymanın yararlı olabileceğini unutmayın. Örneğin, bazı Quicksort varyantları diğerlerinden daha fazla karşılaştırma yapar, ancak daha az takas alır (ortalama olarak).

Değer için, tüm teoriyi yaptıktan sonra, teorinizin yaptığı tahminlerin doğru olduğunu doğrulamak için çalışma zamanlarını tekrar gözden geçirmek isteyebilirsiniz. Eğer değillerse, teoriniz yararlı değildir (uygulamada) ve genişletilmesi gerekir. Bellek hiyerarşisi, temel analizlerde önemli ancak eksik olduğunu fark ettiğiniz ilk şeylerden biridir.


1
Resmi analizin de sınırları olduğunu unutmayın. Örneğin, muntazam olmayan girdi dağılımları için ortalama bir durum çoğu zaman inatçıdır.
Raphael

10

Bunun nedeni algoritmaları çalıştırmak için gereken toplam sürenin diğer faktörlerle birlikte çalıştığı donanıma bağımlı olmasıdır. Biri bir Pentium 4 üzerinde ve diğeri üzerinde çalışıyorsa, bir Core i7 diyelim, iki algoritmayı karşılaştırmak güvenilir değildir. Sadece bu değil, diyelim ki ikisini de aynı bilgisayarda çalıştırdınız. Her ikisinin de aynı işlemci süresine sahip olduğunu söylemek gerekir? Başka bir işlemin algoritmalardan birinin işleminden daha yüksek önceliği varsa ne olur?

Bunu aşmak için, tamamlamak için bu genel zamandan ayrılıyoruz ve bunun yerine algoritmanın ne kadar iyi ölçeklendiğine göre karşılaştırıyoruz. Araştırma makalelerinde O (1) veya O (n ^ 2) gibi gösterimler fark etmiş olabilirsiniz. Bu biraz daha fazla okuma gerektirebilir, eğer ilgileniyorsanız Big O notasyonu bakın .


1
Ayrıca gerçek çalışma süresi, algoritmaları çalıştırmak için kullanılan gerçek girişin boyutuna ve içeriğine bağlıdır!
Tsuyoshi Ito

7

Diğer cevaplar, çalışma zamanını neden temel işlem sayısı açısından analiz ettiğimizi açıkladığından, karşılaştırmaların nedenleri için birkaç neden sunmama izin verin birçok (hepsi değil) sıralama algoritmasının doğru metriği :

  • birçok sıralama algoritması için karşılaştırma sayısı çalışma süresine hakim olur, yani en azından diğer temel işlemler kadar karşılaştırma yapılır
  • karşılaştırmalar pahalı işlemdir; bir sıralama yordamının kitaplıkta nasıl uygulandığını düşünün: sıralama işlevi bir öğe dizisini ve iki öğeyi karşılaştıran bir işleve bir işaretçi iletilir; genel olarak karşılaştırma işlevinin yürütülmesini beklemek ve beklemek "dahili" işlemlerden daha pahalıdır; bu işlev kullanıcı tarafından sağlandığından, onu optimize etmek daha zordur
  • (bu, bazıları için iyi bir neden olabilir veya olmayabilir), bir diziyi sıralamak için yeterli ve gerekli olan karşılaştırmaların sayısı hakkında ilginç bir şey söyleyebiliriz ; bunun en kötü durumda ve ortalama olarak çeşitli dağıtımlar için nasıl yapılacağını biliyoruz, hatta bilinmeyen bir dağıtımdan ( Kendini Geliştiren Algoritmalar ) örneklenen öğeler üzerinde çalıştırıldığı için optimal olan bir algoritmanın nasıl tasarlanacağını biliyoruz ; bazı karşılaştırmalar ücretsiz verildiğinde bunu nasıl yapacağımızı biliyoruz ( Kısmi Bilgiyle Sıralama )

1) "en azından diğer temel işlemler kadar karşılaştırma yapılır" - yalnızca sabit bir faktöre kadar. 2) "karşılaştırmalar pahalı bir işlemdir" - genel bir ayar olduğunu varsayar. Tamsayı sıralama için (genellikle analiz edilir) takaslar genellikle daha pahalıdır.
Raphael

Elbette. op genel olarak algoritmaların analizi konusunda karışık görünüyordu, sabit faktörler getirmek istemiyordu. umarım genel bir ayar hakkında konuşuyorum aslında açıklamasından açık - standart bir kütüphanede sıralama rutin tamsayı sıralama değil
Sasho Nikolov

artı op gördüm kağıtları kesinlikle özel tamsayı sıralama algoritmaları ile ilgili değildir, kimse karşılaştırma sayısı saymaz
Sasho Nikolov

@ Raphael Küçük tam sayıları sıralamak pratikte yaygın bir konu değildir. Bahse girerim dünyada devam eden en çok sıralama iplerde ( bazı uzunluklarda ya da diğerlerinde ). Tamsayı sıralama için bile, takasların daha pahalı olduğundan emin değilim - dallanma, modern bir üst düzey işlemcide nispeten pahalı bir işlemdir ve sıralamada dal tahmininin çoğunlukla işe yaramayacağını görmektedir.
Gilles 'SO- kötü olmayı bırak'

@Gilles Kendi aralarında takaslar, bildiğim herhangi bir platformdan tamsayı karşılaştırmalarından daha pahalıdır. Örneğin, şube yanlış tahminleri gibi "ikincil" maliyetler, kesinlikle devam eden araştırmalara konu olan bir faktördür. (Uygulamada kullanıma ilişkin olarak, nitelikli bir açıklama yapamıyorum. Ancak, standart kütüphane sahiplerinin ilkel veri türleri için kullandıkları sıralama algoritmalarını geliştirmeye devam ettiklerini gözlemliyorum, bu yüzden çok fazla (ab) kullanımı gördüklerini varsayıyorum.)
Raphael
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.