QuickSort, TimSort hay Insertion Sort? Đâu là thuật toán sắp xếp nhanh nhất

4 8 0
QuickSort, TimSort hay Insertion Sort? Đâu là thuật toán sắp xếp nhanh nhất

Đang tải... (xem toàn văn)

Thông tin tài liệu

QuickSort, TimSort hay Insertion Sort? Đâu thuật toán xếp nhanh Lời nói đầu Thuở cịn ngồi ghế trường học đại học, học môn “Cấu trúc Dữ liệu & Giải thuật” lúc vấn cơng ty ABC, XYZ đó, mà đến tận lúc ngồi trà đá bàn luận với anh em đồng nghiệp chuyện nghề, chuyện nghiệp … hẳn có lần anh em Dev hỏi nghe thấy câu hỏi: “Thuật toán xếp nhanh nhất?” Và viết phần giúp bạn tìm đáp án cho câu hỏi Câu trả lời QuickSort, TimSort hay Insertion Sort nhỉ? Xem nào, nghe câu chữ thấy thằng Quick Sort nhanh (Quick nhanh mà), thực tế, Quick Sort đáp án nhiều người lựa chọn hỏi câu hỏi Nhưng thực tế, lại khơng phải vậy, phần lớn người sai lựa chọn Quick Sort câu trả lời Vậy đáp án Tim Sort ư? hay Insertion Sort Cùng nhìn vào bảng thống kê độ phức tạp trung bình thuật tốn xếp Nhìn vào bảng rõ ràng Quick Sort có độ phức tạp trung bình O(n log(n)), dựa vào kết Quick Sort nhanh cịn nữa? Chậm lại chút, thử đặt câu hỏi ngược lại xem nhé: “Nếu QuickSort nhanh lại cịn phải đẻ ti tỉ loại thuật toán xếp khác làm lề nhỉ?” Tiếp theo, xem tốc độ xếp thuật toán dựa theo liệu đầu vào, liệu có case từ liệu Random đến Nearly Sorted hay việc Reversed Dữ liệu Nhìn vào thống kê phía trên, thấy với kiểu liệu khác lại có kiểu xếp chiếm ưu riêng, ví dụ với liệu Nearly Sorted Insertion Sort nhanh với kiểu liệu phức tạp Insertion Sort lại khơng phải nhanh Như vậy, từ thống kê hình dung đáp án cho câu hỏi “Thuật toán xếp nhanh nhất” Vậy câu trả lời gì? => “Khơng có thuật tốn xếp cụ thể cả, cịn phụ thuộc vào nhiều yếu tố” Và “phụ thuộc vào nhiều yếu tố” lý mà có nhiều loại thuật tốn xếp khác đời Chúng ta nhìn vào vài ví dụ cụ thể để thấy yếu tố ảnh hưởng việc lựa chọn thuật tốn • Quick Sort tốt … Không lo lắng case đầu vào kể trường hợp xấu (trật tự nói chung ngẫu nhiên) Không quan tâm đến dung lượng nhớ, nhớ hoàn toàn lý tưởng phù hợp • Nếu liệu xếp sẵn, nên chọn Insertion Sort Shell Sort tốt • Nếu thực phải loại bỏ case xấu nhất, sử dụng Heap (hoặc Quick3) với độ phức tạp NlogN • Tim Sort có độ phức tạp thấp Quick Sort Best Case lẫn Worse Case, Tim Sort kết hợp Merge Sort Insertion Sort Python sử dụng thuật toán xếp mặc định họ • Trong trường hợp, liệu phần tử (10-20 phần tử), lựa chọn Selection Sort nhanh Quick SortTóm lại lần , lý thuyết Quick Sort thật thuật toán xếp nhanh phần lớn trường hợp Tuy nhiên, thực tế, việc lựa chọn thuật toán xếp dựa vào nhiều yếu tố liệu đầu vào số lượng nào, có xếp sẵn hay khơng, dung lượng nhớ sao, tốc độ xử lý CPU… Thuật toán học sống Mình thường hay nói đùa rằng: “Code không lừa dối cả” Và thực Code chiêm nghiệm nhiều học sống cho ln Ở đây, từ câu hỏi thuật toán xếp vơ đơn giản rút nhiều học thực tế: • Hãy học cách đặt lại câu hỏi cho vấn để hỏi, để từ phân tích tìm câu trả lời xác Đơi làm dự án thực tế, khách hàng đưa yêu cầu mơ hồ, thay cắp đầu vào tìm giải pháp, hay code hỏi rõ khách hàng, làm rõ vấn đề trước • Trong sống, khơng có hồn hảo nhìn đặt vấn đề gặp phải nhiều góc nhìn khác nhau, để cân nhắc lựa chọn giải pháp cho hợp lý

Ngày đăng: 05/01/2023, 22:59

Tài liệu cùng người dùng

Tài liệu liên quan