Đối với các thùng chứa C++ STL như vector
và list
, sự phức tạp của việc tìm kiếm các yếu tố và chèn hoặc loại bỏ chúng là tự giải thích. Tuy nhiên, đối với các container map
, mặc dù tôi biết từ đọc của tôi rằng truy cập và chèn phức tạp/hiệu suất là O (log (n)), tôi không thể làm việc ra lý do tại sao. Tôi rõ ràng không hiểu bản đồ nhiều như tôi cần, vì vậy một số giác ngộ về chủ đề này sẽ được rất nhiều đánh giá cao.Tại sao độ phức tạp của container bản đồ C++ STL O (log (n))?
Trả lời
Các yếu tố của bản đồ hoặc tập hợp được chứa trong cấu trúc cây; mỗi lần bạn kiểm tra một nút của cây, bạn xác định xem phần tử bạn đang cố gắng tìm/chèn có nhỏ hơn hoặc lớn hơn nút hay không. Số lần bạn cần thực hiện điều này (đối với cây cân đối đúng) là log2 (N) vì mỗi lần so sánh sẽ loại bỏ một nửa khả năng.
Cảm ơn bạn, Mark, câu trả lời của bạn chỉ là những gì tôi cần. –
@EdKing, hãy xem [cây đỏ đen] (http://en.wikipedia.org/wiki/Red_black_tree). Chúng thường được sử dụng để triển khai std :: map. –
Khi slavik262 điểm, bản đồ thường được thực hiện với các cây đỏ đen, tự cân bằng. Kiểm tra độ phức tạp của cây đỏ-đen chẳng hạn như trong wikipedia Tôi không biết bất kỳ việc triển khai bản đồ nào với cây nhị phân; nếu Mark Ransom biết một, tôi sẽ rất vui khi biết cái nào.
Tôi nghĩ rằng thật công bằng khi nói rằng một cây đỏ đen * là * một cây nhị phân, chỉ với một số bất biến trên hình dạng của cây và cân bằng lại các hoạt động để duy trì chúng trong quá trình chèn và xóa. –
- 1. Ví dụ về các thuật toán có các phức tạp O (1), O (n log n) và O (log n)
- 2. Tại sao độ phức tạp của BFS O (V + E) thay vì O (V * E)?
- 3. O (log n) luôn luôn nhanh hơn O (n)
- 4. Tại sao độ phức tạp của thuật toán này là O (1)
- 5. Độ phức tạp của ưu tiênQueue addAll()
- 6. độ phức tạp của Morris Traversal o (n) như thế nào?
- 7. Độ phức tạp thời gian của random.sample
- 8. Big O, độ phức tạp của việc tổng hợp một chuỗi số n là bao nhiêu?
- 9. O (log (log (n)))) có nghĩa là gì?
- 10. Độ phức tạp của thuật toán
- 11. f (n) = n^log (n) phức tạp đa thức hoặc mũ số
- 12. Cosine tương đồng của Vectors, với <O (n^2) phức tạp
- 13. Ký hiệu Big Oh O ((log n)^k) = O (log n)?
- 14. Chuỗi C++ :: tìm sự phức tạp
- 15. Big-O phức tạp của lồng cho vòng
- 16. Tính phức tạp của tiêu chuẩn :: find_end là Big-O
- 17. Độ phức tạp của OrderedDictionary là gì?
- 18. Độ phức tạp của thuật toán nhân ma trận
- 19. Mức độ phức tạp của std :: list :: splice và các container danh sách khác
- 20. Độ phức tạp về thời gian đếm
- 21. Làm thế nào để bạn hình dung sự khác biệt giữa O (log n) và O (n log n)?
- 22. Đơn giản hóa độ phức tạp Big-O của thuật toán số mũ này
- 23. Automapper lập bản đồ phức tạp
- 24. Độ phức tạp về thời gian của erlang dict
- 25. C++ STL container
- 26. Độ phức tạp của thuật toán (Big-O) của trình giải Sudoku
- 27. Quy ước đặt tên khi bản đồ STL phức tạp typdef là gì?
- 28. Tránh O (n^2) phức tạp cho phát hiện va chạm
- 29. phức tạp của .NET List.sort()
- 30. Độ phức tạp của thời gian nguyên trong Haskell
bạn đã thấy điều này chưa? http://stackoverflow.com/a/222674/1025391 – moooeeeep