[ Pembaruan terbaru: program benchmark dan resul pendahuluan tersedia, lihat di bawah ini]
Jadi saya ingin menguji tradeoff kecepatan / kompleksitas dengan aplikasi klasik: sorting.
Tulis fungsi ANSI C yang mengurutkan susunan angka floating point dalam urutan yang meningkat .
Anda tidak dapat menggunakan setiap perpustakaan, sistem panggilan, multithreading atau ASM inline.
Entri dinilai berdasarkan dua komponen: panjang kode dan kinerja. Mencetak sebagai berikut: entri akan diurutkan berdasarkan panjang (log karakter # tanpa spasi, sehingga Anda dapat menyimpan beberapa format) dan berdasarkan kinerja (log # detik di atas tolok ukur), dan setiap interval [terbaik, terburuk] dinormalisasi secara linear ke [ 0,1]. Skor total suatu program akan menjadi rata-rata dari dua skor yang dinormalisasi. Skor terendah menang. Satu entri per pengguna.
Penyortiran harus (akhirnya) ada di tempatnya (yaitu larik input harus berisi nilai yang diurutkan pada waktu kembali), dan Anda harus menggunakan tanda tangan berikut, termasuk nama:
void sort(float* v, int n) {
}
Karakter yang akan dihitung: yang ada dalam sort
fungsi, termasuk tanda tangan, ditambah fungsi tambahan yang dipanggil (tetapi tidak termasuk kode pengujian).
Program harus menangani nilai numerik float
dan panjang array apa pun> = 0, hingga 2 ^ 20.
Saya akan pasang sort
dan dependensinya ke dalam program pengujian dan kompilasi pada GCC (tidak ada opsi mewah). Saya akan memberi makan banyak array ke dalamnya, memverifikasi kebenaran hasil dan total jangka waktu. Pengujian akan dijalankan pada Intel Core i7 740QM (Clarksfield) di bawah Ubuntu 13.
Panjang array akan menjangkau seluruh rentang yang diizinkan, dengan kepadatan array pendek yang lebih tinggi. Nilai akan acak, dengan distribusi lemak-ekor (baik dalam rentang positif dan negatif). Elemen duplikat akan dimasukkan dalam beberapa tes.
Program pengujian tersedia di sini: https://gist.github.com/anonymous/82386fa028f6534af263
Ia mengimpor pengiriman sebagai user.c
. Jumlah kasus uji ( TEST_COUNT
) dalam tolok ukur yang sebenarnya adalah 3000. Harap berikan umpan balik dalam komentar pertanyaan.
Batas waktu: 3 minggu (7 April 2014, 16:00 GMT). Saya akan memposting patokan dalam 2 minggu.
Mungkin disarankan untuk memposting di dekat tenggat waktu untuk menghindari pemberian kode Anda kepada pesaing.
Hasil pendahuluan, seperti publikasi patokan:
Berikut adalah beberapa hasil. Kolom terakhir menunjukkan skor sebagai persentase, semakin tinggi semakin baik, menempatkan Johnny Cage di tempat pertama. Algoritma yang perintah besarnya lebih lambat dari yang lain dijalankan pada subset tes, dan waktu diekstrapolasi. C sendiri qsort
dimasukkan untuk perbandingan (Johnny lebih cepat!). Saya akan melakukan perbandingan akhir pada waktu penutupan.