Một thay thế cho phương pháp HashSet sẽ được:
Sắp xếp các mảng đầu vào
Đếm số o f giá trị không trùng lặp trong mảng được sắp xếp
Phân bổ mảng đầu ra
lặp qua mảng được sắp xếp, sao chép các giá trị không trùng lặp với nó.
Cách tiếp cận HashSet là O(N)
bình quân giả định rằng 1) bạn preallocate HashSet với kích thước phù hợp và 2) (không trùng lặp) giá trị trong mảng băm đầu vào khá đồng đều. (Nhưng nếu giá trị băm là bệnh lý, trường hợp xấu nhất là O(N**2)
!)
Phương pháp sắp xếp là trung bình O(NlogN)
.
Phương pháp tiếp cận HashSet chiếm nhiều bộ nhớ hơn.
Nếu bạn đang làm điều này thường xuyên HOẶC cho "cư xử rất tốt" mảng đầu vào thực sự lớn, cách tiếp cận HashSet có lẽ tốt hơn. Nếu không, nó có thể là một toss-up mà cách tiếp cận là tốt hơn.
Nguồn
2009-12-08 01:41:55
Sử dụng sửa đổi Mergesort, xóa các từ khóa trùng lặp hen gặp phải, thay vì thêm cả hai bản sao vào danh sách. Chạy trong ** 'O (N * logN)' ** –