Tôi đã tìm thấy một cách cải thiện (theo như tôi đã thử nghiệm) khi thuật toán quicksort vượt quá những gì đã được thực hiện. Tôi đang làm việc để thử nghiệm nó và sau đó tôi muốn nhận được từ ra về nó. Tuy nhiên, tôi sẽ đánh giá cao một số trợ giúp với một số điều. Vì vậy, đây là những câu hỏi của tôi. Tất cả các mã của tôi là trong C + + bằng cách này.Một vài câu hỏi sắp xếp
Một trong những loại tôi đã so sánh với quicksort của tôi là tiêu chuẩn :: sắp xếp từ Thư viện chuẩn C++. Tuy nhiên, nó có vẻ rất chậm. Tôi chỉ phân loại các mảng ints và longs, nhưng nó có vẻ chậm hơn khoảng 8-10 lần so với quicksort của tôi và quicksort tiêu chuẩn của Bentley và McIlroy (và có thể là Sedgewick). Có ai có bất kỳ ý tưởng nào về lý do tại sao nó quá chậm? Mã tôi sử dụng cho loại này chỉ là std :: sort (a, a + numelem); trong đó a là một mảng dài hoặc int và numelem là số phần tử trong mảng. Các con số này rất ngẫu nhiên và tôi đã thử các kích thước khác nhau cũng như số lượng các yếu tố lặp lại khác nhau. Tôi cũng đã thử qsort, nhưng nó thậm chí còn tồi tệ hơn như tôi mong đợi. Chỉnh sửa: Bỏ qua câu hỏi đầu tiên này - câu hỏi đã được giải quyết.
Tôi muốn tìm thêm các triển khai nhanh khác để so sánh với quicksort của tôi. Cho đến nay tôi có một chiếc Bentley-McIlroy và tôi cũng đã so sánh với phiên bản đầu tiên của chiếc tua nhanh hai trục của Vladimir Yaroslavskiy. Ngoài ra, tôi dự định chuyển đổi timsort (đây là một loại hợp nhất mà tôi tin) và các quicksort hai trục được tối ưu hóa từ nguồn jdk 7. Bạn biết gì về những triển khai quicksorts tốt khác? Nếu chúng không có trong C hoặc C++ thì có thể không sao vì tôi khá giỏi trong việc chuyển, nhưng tôi thích C hoặc C++ nếu bạn biết chúng.
Bạn khuyên bạn nên tìm hiểu thêm về các bổ sung của tôi cho quicksort như thế nào? Cho đến nay quicksort của tôi dường như nhanh hơn đáng kể so với tất cả các quicksorts khác mà tôi đã thử nghiệm nó chống lại. Nguồn chính của tốc độ của nó là nó xử lý các yếu tố lặp đi lặp lại hiệu quả hơn nhiều so với các phương pháp khác mà tôi đã tìm thấy. Nó gần như hoàn toàn loại trừ hành vi trường hợp xấu nhất mà không cần thêm nhiều thời gian trong việc kiểm tra các yếu tố lặp đi lặp lại. Tôi đăng về nó trên các diễn đàn Java, nhưng không có phản hồi. Tôi cũng đã cố gắng viết thư cho Jon Bentley bởi vì anh ấy đã làm việc với Vladimir về cuộc đua nhanh hai trục của mình và không nhận được phản hồi nào (mặc dù tôi không ngạc nhiên bởi điều này). Tôi có nên viết một bài báo về nó và đặt nó trên arxiv.org không? Tôi có nên đăng bài trên một số diễn đàn không? Có một số danh sách gửi thư mà tôi nên đăng không? Tôi đã làm việc này một thời gian và phương pháp của tôi là hợp pháp. Tôi có một số kinh nghiệm với nghiên cứu xuất bản bởi vì tôi là một ứng cử viên tiến sĩ trong vật lý tính toán. Tôi có nên thử tiếp cận một người nào đó trong khoa Khoa học Máy tính của trường đại học của tôi không? Nhân tiện, tôi cũng đã phát triển một chế độ nhanh hai trục khác, nhưng nó không tốt hơn so với quicksort trục đơn của tôi (mặc dù nó tốt hơn so với quicksort dual-pivot của Vladimir với một số bộ dữ liệu).
Tôi thực sự đánh giá cao sự trợ giúp của bạn. Tôi chỉ muốn thêm những gì tôi có thể vào thế giới điện toán. Tôi không quan tâm đến việc sáng chế điều này hay bất cứ điều gì vô lý như thế.
Vui lòng cho tôi biết bạn đã biên dịch và lược tả bằng cách bật tối ưu hóa. – GManNickG
Điều này có vẻ thực sự rõ ràng, nhưng khi sử dụng 'std :: sort' bạn đã bật tối ưu hóa đầy đủ? Nếu không có chúng - phụ thuộc thực hiện' - có thể có phí gọi điện đáng kể. Nếu không, nó có thể sẽ giúp nếu bạn đăng mã của bạn và thời gian tương đối. Hiệu suất thực tế của 'qsort' và' std :: sort' sẽ được thực thi phụ thuộc. –
câu hỏi ngu ngốc (chỉ vì tôi đã bị cắn bởi nó trước đây): bạn có một bộ thử nghiệm của ngày? Và không đủ để kiểm tra xem đầu ra có được sắp xếp hay không. Đồng thời kiểm tra xem mọi mục nhập có xuất hiện trong đầu ra hay không. –