2012-04-21 34 views
5

Tôi đã đọc rất nhiều bài viết về việc chọn bộ sưu tập chính xác để thực hiện cụ thể, và tôi hiểu rằng cuối cùng sẽ giảm xuống để đánh giá dữ liệu thực, nhưng trong khi tôi bận làm việc đó:Bộ sưu tập sửa đổi mục

  • Bộ sưu tập được sắp xếp nào trong C# cho phép sửa đổi một mục chứa? Tôi dường như không tìm thấy gì?

  • Đây có phải là do sửa đổi có thể sẽ được thực hiện dưới dạng xóa sau đó chèn lại, do đó thực hiện chức năng 'Sửa đổi' rõ ràng vô nghĩa?

Tôi cần bộ sưu tập (thư viện tùy chỉnh hoặc tiêu chuẩn), với các hoạt động sau được thực hiện trên đó.

  • Insert - thường
  • Remove - thường
  • Sửa - rất thường xuyên
  • yếu tố Chọn Lên trên X - mỗi khi bất kỳ ở trên xảy ra, và nhiều hơn nữa, đồng thời.

Hiện tại tôi đang sử dụng một SortedSet, vì nó cung cấp O (logn) chèn, nhưng tôi không rõ ràng về hiệu suất loại bỏ và cách sửa đổi tốt nhất một mục.

+0

Bộ sưu tập có cần được sắp xếp mọi lúc không? Bạn sẽ đạt được một lợi ích hiệu suất rất lớn nếu bạn có thể áp dụng nhiều sửa đổi và sau đó sắp xếp một lần sau đó. –

+0

@Evenhuis Thật không may, bởi vì nhiều 'khách hàng' sẽ yêu cầu danh sách này, và họ cần nó theo thứ tự sắp xếp mỗi lần thay đổi được thực hiện cho danh sách này. Hoặc ít nhất là yếu tố hàng đầu. – Vort3x

+0

Chúng tôi đã sử dụng BST cân bằng trong khóa học cấu trúc dữ liệu của chúng tôi. Nó đã được khá nhanh, nhưng chúng tôi thực hiện nó trong C + +. Bạn có thể xem xét nó có thể. Đây là một nguồn thông tin tốt: http: //www.codeproject.com/Bài viết/68500/Cân bằng-nhị phân-Tìm kiếm-Cây-BST-Tìm kiếm-Xóa-Prin –

Trả lời

1

Trước tiên, chúng tôi cần làm rõ ý nghĩa của việc sửa đổi bộ sưu tập.

Nói chung, thao tác thu thập đề cập đến việc chèn/xóa các mục khỏi danh sách. Để sửa đổi một mục riêng lẻ, về cơ bản nó truy cập vào mục và sửa đổi các thuộc tính của nó. Chi phí truy cập một mục phụ thuộc vào việc thực hiện bộ sưu tập, nhưng việc sửa đổi mục propertis không phụ thuộc vào bộ sưu tập. Cũng lưu ý, bạn không thể sửa đổi mục bộ sưu tập nếu nó không thể thay đổi được.

Nếu bạn chỉ tìm kiếm các bộ sưu tập tích hợp tốt nhất, về cơ bản bạn chọn giữa SortedList và SortedSet (SortedDictionary giống như SortedSet).

SortedList lưu trữ dữ liệu nội bộ dưới dạng mảng, do đó, nó có quyền truy cập hiệu quả theo chỉ mục (để nhận được các mục X hàng đầu); SortedSet có chèn và loại bỏ nhanh hơn (theo yếu tố không đổi), truy cập được lập chỉ mục sẽ yêu cầu tìm kiếm thông qua cây cho mục tiếp theo trong trường hợp xấu nhất là O (log n) và ca tốt nhất O (1).

Bên cạnh đó, sự khác biệt giữa hai là khá nhỏ, vì cả hai đều triển khai Red Black Tree, chỉ khác nhau trong chi tiết triển khai.

Hiệu suất thực tế sẽ phải được đo lường cho các trường hợp người dùng của bạn. Nhưng bạn đã biết rằng.

Các vấn đề liên quan