Tùy thuộc vào từ điển của bạn trông như thế nào, bạn có thể không cần khóa, nếu bạn có thể nhận từng chuỗi để tạo các subtrees độc lập. Nếu đây không phải là thuật toán trực tuyến, hãy sắp xếp các từ theo tiền tố (chữ cái đầu tiên nếu bạn có < 26 luồng, thứ nhất và thứ hai nếu bạn có nhiều hơn hoặc bạn biết rằng dữ liệu không được cân bằng, ví dụ: 90% từ bắt đầu với A). Về cơ bản, đây sẽ là một hoạt động O (n), nơi bạn thực hiện một lần đếm để đếm có bao nhiêu từ bắt đầu bằng một chữ cái, sau đó một đường để sắp xếp (dọc theo các dòng của một kiểu sắp xếp theo tiền tố bạn chọn). Sau đó, phân chia các tiền tố giữa các luồng và có mỗi luồng xây dựng các cây phụ độc lập này. Cuối cùng, có một chủ đề thêm mỗi subtrees vào thư mục gốc. Tôi sẽ xem qua một ví dụ bên dưới.
từ điển của bạn:
Bark
của Apple
Cookie
Và
bé
ngô
xanh
Bánh
Bacon
Sau khi sắp xếp:
của Apple
Và
Bark
bé
xanh
Bacon
ngô
Cookie
Bánh
Sau đó chúng tôi chia tiền tố giữa các chủ đề.Ví dụ này, chúng ta có 3 chủ đề, trong đó có các tiền tố [A] [B] [C], và xây dựng các cây sau:
A --| B -------| C -------|
P N |-- A ---| L O ---| A
P D R B C U O R K
L K Y O E K N E
E N I
E
Và sau đó bạn có một thread kết hợp các ở thư mục gốc như:
|----------- Root------------------|
A --| B -------| C -------|
P N |-- A ---| L O ---| A
P D R B C U O R K
L K Y O E K N E
E N I
E
Tôi hy vọng điều đó có ý nghĩa.
Ưu điểm của phương pháp này: Các chủ đề hoạt động độc lập về cơ bản và bạn không phải chịu chi phí phải đối phó với việc mua và giải phóng khóa.
Hạn chế đối với phương thức này: Nếu bạn không biết gì về từ điển, có thể mất cân bằng tải công việc nghiêm trọng và trong trường hợp xấu nhất (Nói, tất cả các từ bắt đầu bằng 'A') là một sợi đơn dựng một cái cây. Có một vài cách để làm điều này tốt hơn, ví dụ, bạn có thể thêm một số kiểm tra khi bạn sắp xếp như vậy nếu khối lượng công việc bị mất cân đối nghiêm trọng khi giao dịch với một tiền tố chữ cái duy nhất, để du lịch bằng 2 chữ cái đầu tiên, nhưng thực sự bạn có thể ' t đảm bảo rằng nó sẽ được cân bằng.
Bạn cũng có thể không có chủ đề nhàn rỗi nếu nói bạn có 20 chủ đề và sắp xếp theo chữ cái đầu tiên, sau đó bạn sẽ có một số 6 chủ đề phải làm hai subtrees, trong khi 14 trong số họ ngồi nhàn rỗi trong một nửa thời gian. Bạn có thể chia nhỏ các subtrees để giải quyết vấn đề này, nhưng đó là thêm thời gian cho một bước tiền xử lý.
Dù sao, không đảm bảo rằng điều này nhanh hơn phương pháp của bạn, nhưng nó cần xem xét.
Làm thế nào có bế tắc có liên quan? Không có chuỗi nào cần phải giữ nhiều khóa tại một thời điểm, trừ khi tôi bị nhầm lẫn. – templatetypedef
@templatetypedef: Thực ra - vì bản chất của bộ ba - tôi nghĩ bạn đúng, tôi có một số giao thức khác trong tâm trí (liên quan đến hệ thống tệp), nơi để đảm bảo không có cuộc đua dữ liệu - người ta phải giữ toàn bộ đường dẫn từ một nút nào đó dẫn đầu tại mỗi điểm. Tuy nhiên - nó không phải là trường hợp ở đây. Tôi sẽ chỉnh sửa phần này. – amit