Nếu tôi muốn xóa mục nhập cao nhất trong thời gian log(n)
trong Java TreeSet
, tôi sử dụng treeSet.pollFirst()
- điểm tương đương với lớp học mutable.TreeSet
của Scala là gì?TreeSet của Scala so với TreeSet của Java - cuộc thăm dò ý kiến?
Dù sao, những gì tôi thực sự muốn là cấu trúc dữ liệu xếp hàng ưu tiên giống như heap cho phép tôi removeMax
, add
và updatePriority
trong thời gian logarit. Tôi nhìn vào thư viện bộ sưu tập Scala và tôi bối rối - trong khi mutable.PriorityQueue
cho phép tôi deque
(tức là removeMax
) trong thời gian logarit - nó không cung cấp cách nào để cập nhật ưu tiên trong thời gian đăng nhập (tôi sẽ phải quét và xóa mục một cách dễ dàng và thêm lại thời gian tuyến tính). Tương tự, mutable.TreeSet
sẽ cho phép tôi cập nhật ưu tiên trong thời gian logarit (bằng cách xóa và thêm lại), nhưng nó không có hoạt động removeMax
(tức là pollFirst
). Tôi nên sử dụng bộ sưu tập nào? Vui lòng không giới thiệu tôi với các phụ thuộc bên ngoài.
Bạn nghĩ 'updatePriority' sẽ hoạt động như thế nào với' TreeSet' của Java? – sharakan
Dễ dàng (giả sử bạn đã xác định một bộ so sánh bên ngoài bằng cách ghi đè TreeSet bằng một lớp ẩn danh). Bạn chỉ cần xóa và thêm nút. Nhìn vào ví dụ của tôi. Nhìn vào dòng 19 và dòng 33-36 ở đây: https://github.com/pathikrit/scalgos/blob/master/temp/SandBox/AStar.java – pathikrit
Đúng, có ý nghĩa. Bạn nên loại bỏ các nút trước khi bạn cập nhật nó mặc dù. – sharakan