[ Son güncelleme: kıyaslama programı ve ön sonuçlar mevcut, aşağıya bakınız]
Bu yüzden hız / karmaşıklık dengesini klasik bir uygulama ile test etmek istiyorum: sıralama.
Kayan nokta sayı dizisini artan sırada sıralayan bir ANSI C işlevi yazın .
Hiçbir kitaplığı, sistem çağrısını, çoklu iş parçacığını veya satır içi ASM'yi kullanamazsınız .
Girişler iki bileşene göre değerlendirilir: kod uzunluğu ve performans. Aşağıdaki gibi puanlama: girişler uzunluğa (boşluk içermeyen # karakterlerin günlüğü, böylece bazı biçimlendirmeyi koruyabilmeniz için) ve performansa (bir kıyaslama üzerinde # saniyenin günlüğü) göre ve her aralıkta [en iyi, en kötü] doğrusal olarak [ 0,1]. Bir programın toplam puanı, normalleştirilmiş iki puanın ortalaması olacaktır. En düşük puan kazanır. Kullanıcı başına bir giriş.
Sıralama (sonuçta) yerinde olmalıdır (yani, giriş dizisinin dönüş zamanında sıralı değerler içermesi gerekir) ve adlar dahil olmak üzere aşağıdaki imzayı kullanmanız gerekir:
void sort(float* v, int n) {
}
Sayılacak karakterler: sort
fonksiyondakiler, imza dahil artı çağrılan ek fonksiyonlar (fakat test kodu dahil değil).
Program float
, 2 ^ 20'ye kadar olan herhangi bir sayısal değeri ve uzunluk = = 0 dizilerini işlemelidir.
Ben fiş edeceğiz sort
ve bağımlılıkları bir test programına ve GCC (hiçbir fantezi seçenekleri) üzerine derlemek. Bir dizi diziyi içine aktaracağım, sonuçların doğruluğunu ve toplam çalışma süresini doğrulayacağım. Testler Ubuntu 13 altında bir Intel Core i7 740QM (Clarksfield) üzerinde
yapılacaktır . Dizi uzunlukları, daha yüksek kısa dizi yoğunluğu ile izin verilen tüm aralığı kapsayacaktır. Değerler, yağ kuyruğu dağılımıyla (hem pozitif hem de negatif aralıklarda) rastgele olacaktır. Bazı testlere yinelenen öğeler dahil edilecektir.
Test programına buradan ulaşabilirsiniz: https://gist.github.com/anonymous/82386fa028f6534af263
Gönderimi olarak içe aktarır user.c
. TEST_COUNT
Gerçek kıyaslamadaki test senaryolarının ( ) sayısı 3000 olacaktır. Lütfen soru yorumlarında herhangi bir geri bildirim sağlayın.
Son teslim tarihi: 3 hafta (7 Nisan 2014, 16:00 GMT). Benchmark 2 hafta içinde ilan edeceğim.
Kodunuzu rakiplere vermekten kaçınmak için son başvuru tarihine yakın bir süre göndermeniz tavsiye edilebilir.
Kıyaslama yayını itibariyle ön sonuçlar:
İşte bazı sonuçlar. Son sütun skoru yüzde olarak gösterir, ne kadar yüksek olursa Johnny Cage ilk sırada yer alır. Diğerlerinden daha yavaş büyüklük sırası olan algoritmalar bir test alt kümesinde yürütüldü ve zaman tahmin edildi. C'nin kendi qsort
karşılaştırma için dahil (Johnny's daha hızlı!). Kapanış saatinde son bir karşılaştırma yapacağım.