Tôi quan tâm đến độ phức tạp tiệm cận (lớn O) của hoạt động GroupBy trên các tập dữ liệu chưa được lập chỉ mục. Sự phức tạp của thuật toán được biết đến nhiều nhất và độ phức tạp của thuật toán mà các máy chủ SQL và LINQ đang sử dụng là gì?Sự phức tạp tiệm cận của hoạt động GroupBy là gì?
Trả lời
Bỏ qua SQL cơ sở mà nhóm đang hoạt động, khi được trình bày cho hoạt động GROUP BY, độ phức tạp chỉ là O (n) vì dữ liệu được quét mỗi hàng và được tổng hợp trong một lần truyền. Nó chia tuyến tính thành n (kích thước của tập dữ liệu).
Khi nhóm theo được thêm vào truy vấn phức tạp, phương trình thay đổi, O (n) trở thành giới hạn trên mà nhóm theo thêm vào phương trình tổng thể; nó có thể ít hơn nếu truy vấn phức tạp bên trong là như vậy mà trong độ phân giải của truy vấn cơ sở, dữ liệu đã được sắp xếp.
Và vì không có chỉ mục, khi dữ liệu được sắp xếp, bạn đã dùng O (N log N) để sắp xếp nó. (nitpick: nó tỷ lệ tuyến tính thành n, tức là kích thước của tập dữ liệu, không phải kích thước của n) –
@Martinho - Tôi đã sửa lỗi cú pháp tiếng Anh .. – RichardTheKiwi
Xin lỗi nhưng điều này là sai. Khi bạn đang lặp qua bộ dữ liệu, bạn phải quyết định nhóm nào bạn muốn đặt trong hàng/đối tượng đã cho. Tôi không thể thấy làm thế nào có thể được lựa chọn nhóm thực hiện trong thời gian không đổi. –
Giới thiệu về Linq, tôi đoán bạn muốn biết về nhóm LINQ-to-object theo độ phức tạp (Enumerable.GroupBy
).
Kiểm tra việc triển khai với ILSpy, có vẻ như đó là O (n). (.Net Framework 4 series.)
Nó liệt kê tuyển tập nguồn một lần. Đối với mỗi phần tử, nó tính toán khóa nhóm của nó. Sau đó, nó sẽ kiểm tra nếu nó đã có chìa khóa trong một bản đồ có thể bắt đầu với các danh sách các phần tử, thêm khóa vào hashtable nếu nó bị thiếu. Sau đó, nó thêm phần tử vào danh sách mục nhập tương ứng trong Hashtable.
- 1. phức tạp tiệm cận của printf
- 2. Độ phức tạp của OrderedDictionary là gì?
- 3. hành vi tiệm cận của phương pháp Scala
- 4. Sự phức tạp của Đề án vectơ
- 5. Độ phức tạp của các hoạt động bộ python?
- 6. phân tích tiệm cận của ba lồng cho vòng
- 7. Độ phức tạp của set_intersection trong C++ là gì?
- 8. Độ phức tạp của chức năng nhật ký là gì?
- 9. Sự phức tạp của các phương pháp từ điển này là gì?
- 10. CodeIgniter - kỷ lục hoạt động - sql - phức tạp tham gia
- 11. Cảm biến tiệm cận không hoạt động trong iPhone 4 thiết bị
- 12. Độ phức tạp thời gian tiệm cận của việc chèn phần tử n vào đống nhị phân đã chứa các phần tử n
- 13. Chuỗi C++ :: tìm sự phức tạp
- 14. phức tạp của .NET List.sort()
- 15. Sự phức tạp của việc thay thế Regex
- 16. Ví dụ về Danh sách phức tạp với dữ liệu phức tạp và bố cục phức tạp của mỗi hàng?
- 17. Sự khác nhau giữa "phức tạp" metric và "phức tạp/phương pháp" metric
- 18. Sử dụng cảm biến tiệm cận trong android
- 19. Tính toán phức tạp của các hoạt động TreeSet trong Java?
- 20. Độ phức tạp của thời gian đi qua cây là gì?
- 21. Tính phức tạp của tiêu chuẩn :: find_end là Big-O
- 22. Solr - tiệm cận Tìm kiếm sử dụng cụm từ
- 23. Độ phức tạp của LinkedList.getLast() trong Java là bao nhiêu?
- 24. Trong C + +, là sự phức tạp amortized của std :: string :: push_back() O (1)?
- 25. Độ phức tạp của HashMap.containsValue() trong java là bao nhiêu?
- 26. Độ phức tạp của HashMap.containsKey() trong java là bao nhiêu?
- 27. Độ phức tạp của thuật toán
- 28. Object.keys() phức tạp?
- 29. Độ phức tạp của trường hợp xấu nhất đối với việc sắp xếp nhóm là gì?
- 30. Độ phức tạp nhất của trò chơi N-Queens là gì?
Lưu ý rằng GroupBy trong SQL và LINQ là hai hoạt động rất khác nhau. –