[ Najnowsza aktualizacja: dostępny program testów porównawczych i wstępne wyniki, patrz poniżej]
Dlatego chcę przetestować kompromis prędkości / złożoności za pomocą klasycznej aplikacji: sortowania.
Napisz funkcję ANSI C, która sortuje tablicę liczb zmiennoprzecinkowych w kolejności rosnącej .
Nie można korzystać z żadnych bibliotek, wywołania systemowe, wielowątkowość lub inline ASM.
Wpisy oceniane na podstawie dwóch składników: długości kodu i wydajności. Punktacja będzie następująca: wpisy zostaną posortowane według długości (log # znaków bez spacji, dzięki czemu można zachować pewne formatowanie) i według wydajności (log # sekund ponad testem porównawczym), a każdy przedział [najlepszy, najgorszy] liniowo znormalizowany do [ 0,1]. Całkowity wynik programu będzie średnią z dwóch znormalizowanych wyników. Najniższy wynik wygrywa. Jeden wpis na użytkownika.
Sortowanie będzie musiało (ewentualnie) być na miejscu (tj. Tablica wejściowa będzie musiała zawierać posortowane wartości w czasie powrotu) i musisz użyć następującej sygnatury, w tym nazw:
void sort(float* v, int n) {
}
Znaki, które należy policzyć: te w sort
funkcji, w tym podpis, plus dodatkowe funkcje przez niego wywoływane (ale bez kodu testowego).
Program musi obsługiwać dowolne wartości liczbowe float
i tablice o długości> = 0, do 2 ^ 20.
Włożę wtyczkę sort
i jej zależności do programu testującego i skompiluję na GCC (żadnych fantazyjnych opcji). Wprowadzę do niego kilka tablic, zweryfikuję poprawność wyników i całkowity czas działania. Testy będą przeprowadzane na procesorze Intel Core i7 740QM (Clarksfield) pod Ubuntu 13.
Długości tablicy obejmą cały dozwolony zakres, z większą gęstością krótkich tablic. Wartości będą losowe, z rozkładem grubych ogonów (zarówno w zakresie dodatnim, jak i ujemnym). W niektórych testach zostaną uwzględnione powielone elementy.
Program testowy jest dostępny tutaj: https://gist.github.com/anonymous/82386fa028f6534af263
Importuje zgłoszenie jako user.c
. Liczba przypadków testowych ( TEST_COUNT
) w rzeczywistym teście będzie wynosić 3000. W komentarzach do pytania proszę podać wszelkie uwagi.
Termin: 3 tygodnie (7 kwietnia 2014, 16:00 GMT). Opublikuję test za 2 tygodnie.
Wskazane może być opublikowanie posta blisko terminu, aby uniknąć przekazywania kodu konkurentom.
Wstępne wyniki w momencie publikacji testu porównawczego:
Oto kilka wyników. Ostatnia kolumna pokazuje wynik w procentach, im wyższy, tym lepiej, stawiając Johnny'ego Cage'a na pierwszym miejscu. Algorytmy, które były o rząd wielkości wolniejsze niż reszta, były uruchamiane w podzbiorze testów i ekstrapolowane w czasie. Własność C qsort
jest dołączona do porównania (Johnny's jest szybszy!). Przeprowadzę końcowe porównanie w czasie zamknięcia.