[ Cập nhật mới nhất: chương trình điểm chuẩn và sơ yếu lý lịch có sẵn, xem bên dưới]
Vì vậy, tôi muốn kiểm tra sự đánh đổi tốc độ / độ phức tạp bằng một ứng dụng cổ điển: sắp xếp.
Viết hàm ANSI C sắp xếp một mảng các số dấu phẩy động theo thứ tự tăng dần .
Bạn không thể sử dụng bất kỳ thư viện, cuộc gọi hệ thống, đa luồng hoặc ASM nội tuyến.
Các mục được đánh giá dựa trên hai thành phần: chiều dài mã và hiệu suất. Ghi điểm như sau: các mục nhập sẽ được sắp xếp theo độ dài (nhật ký của #char character không có khoảng trắng, do đó bạn có thể giữ một số định dạng) và theo hiệu suất (nhật ký của #seconds trên điểm chuẩn) và mỗi khoảng [tốt nhất, tệ nhất] được chuẩn hóa tuyến tính thành [ 0,1]. Tổng số điểm của một chương trình sẽ là trung bình của hai điểm số được chuẩn hóa. Điểm số thấp nhất chiến thắng. Một mục nhập cho mỗi người dùng.
Sắp xếp sẽ phải (cuối cùng) được đặt đúng chỗ (tức là mảng đầu vào sẽ phải chứa các giá trị được sắp xếp tại thời điểm trả về) và bạn phải sử dụng chữ ký sau, bao gồm cả tên:
void sort(float* v, int n) {
}
Các ký tự được tính: những ký tự trong sort
hàm, bao gồm chữ ký, cộng với các hàm bổ sung được gọi bởi nó (nhưng không bao gồm mã kiểm tra).
Chương trình phải xử lý bất kỳ giá trị số float
và mảng có độ dài> = 0, tối đa 2 ^ 20.
Tôi sẽ cắm sort
và các phụ thuộc của nó vào một chương trình thử nghiệm và biên dịch trên GCC (không có tùy chọn ưa thích nào). Tôi sẽ cung cấp một loạt các mảng vào nó, xác minh tính chính xác của kết quả và tổng thời gian chạy. Các thử nghiệm sẽ được chạy trên Intel Core i7 740QM (Clarksfield) trong Ubuntu 13.
Độ dài mảng sẽ trải rộng trên toàn phạm vi cho phép, với mật độ mảng ngắn cao hơn. Các giá trị sẽ là ngẫu nhiên, với phân phối đuôi chất béo (cả trong phạm vi tích cực và tiêu cực). Các yếu tố trùng lặp sẽ được bao gồm trong một số thử nghiệm.
Chương trình thử nghiệm có sẵn tại đây: https://gist.github.com/anonymous/82386fa028f6534af263
Nó nhập nội dung gửi dưới dạng user.c
. Số lượng trường hợp kiểm tra ( TEST_COUNT
) trong điểm chuẩn thực tế sẽ là 3000. Vui lòng cung cấp bất kỳ phản hồi nào trong các nhận xét câu hỏi.
Hạn chót: 3 tuần (7 tháng 4 năm 2014, 16:00 GMT). Tôi sẽ đăng điểm chuẩn trong 2 tuần.
Có thể nên đăng gần thời hạn để tránh đưa mã của bạn cho đối thủ cạnh tranh.
Kết quả sơ bộ, như công bố điểm chuẩn:
Dưới đây là một số kết quả. Cột cuối cùng cho thấy điểm số theo tỷ lệ phần trăm, càng cao càng tốt, đưa Johnny Cage lên vị trí đầu tiên. Các thuật toán có độ lớn chậm hơn các thuật toán còn lại được chạy trên một tập hợp các bài kiểm tra và thời gian ngoại suy. Riêng của C qsort
được đưa vào để so sánh (Johnny's nhanh hơn!). Tôi sẽ thực hiện một so sánh cuối cùng vào thời gian đóng cửa.