Giả sử bạn có hai danh sách các tập hợp số nguyên. Gọi cho họ A và B. Mỗi bộ trong A có thể được chứa trong một trong các bộ trong B. Thuật toán hiệu quả nhất để tìm tất cả các phần tử trong A sao cho không có phần tử nào được chứa trong bộ B?Xóa các tập hợp con là
Trả lời
Để thử và cắt không gian tìm kiếm, chúng tôi có thể thử một số kiểm tra và bộ lọc như một phần của tìm kiếm. Để lấy một ví dụ của bạn trong các ý kiến,
A = [{1,2},{1,4},{3,4,7}]
B = [{2,3,4},{1,2,4},{1,2,5,6}]
bắt đầu với một đếm O (n) của các yếu tố độc đáo trong bộ như phím trỏ đến chỉ số chéo tương quan của các bộ họ thuộc về:
1: A: {0,1}, B: {1,2}
2: A: {0} , B: {0,1,2}
3: A: {2} , B: {0}
4: A: {1,2}, B: {0,1}
5: A: {} , B: {2}
6: A: {} , B: {2}
7: A: {2} , B: {}
Chúng ta có thể ngay lập tức đặt sang một bộ trong A bao gồm một phần tử không tìm thấy trong B, chẳng hạn như tập thứ ba của A.
Bây giờ, chúng ta sẽ đi qua từng bộ trong A chưa được loại trừ và kiểm tra xem có một giao điểm hoàn chỉnh tương ứng của ít nhất một bộ trong B. Vì số lượng chỉ mục trong trường hợp của bạn là trong hàng triệu , thay vì ban đầu vượt qua B toàn bộ, chúng tôi sẽ chia phép kiểm tra B thành các phần, mỗi bộ k
, nói 1024. Hơn nữa, để biểu diễn 1024 chỉ mục này, chúng tôi sẽ chia chúng thành 16 bit 64 bit chúng ta có thể bitwise AND (&) cái này với cái khác.
Tại bất kỳ điểm nào trong traversal này, chúng tôi được hưởng lợi từ một lối ra sớm nếu kết quả AND hoạt động trong điều kiện không:
set A[0] => elements 1,2 => set-index-intersection in B: b110 & b111 => match
set A[1] => elements 1,4 => set-index-intersection in B: b110 & b11 => match
Nhìn chung, phần bởi phần làm việc, chúng tôi đang tìm kiếm khoảng 10 * 16 hoạt động để kiểm tra xem một bộ trong A có được bao gồm trong một trong các bộ trong phần hiện tại của k
bộ B hay không. Nói cách khác, chúng tôi đã giảm số lượng hoạt động từ 10.000.000 xuống 160.000 để kiểm tra toàn bộ một bộ trong A (mỗi một triệu bộ trong B). Đó là một yếu tố của 62.
- 1. Có nghĩa là trên các tập hợp con của một tập hợp con
- 2. Cách xóa một tập hợp con các mục khỏi Bộ sưu tập Khung thực thể
- 3. Tìm tập hợp con của tập hợp các số nguyên có sản phẩm tối đa
- 4. Xóa tệp khỏi tập hợp
- 5. Không gói phải phù hợp với các thư mục con các tập tin java là trong?
- 6. Độ dài của các tập hợp con đã đặt hàng?
- 7. Slick 3.1 - Lấy ra tập con của các cột như là một trường hợp lớp
- 8. Kiểm tra xem các loại bộ dữ liệu là tập hợp con của nhau hay không
- 9. khác biệt giữa mảng con, tập hợp con & dãy
- 10. R tập hợp con theo ngày
- 11. Mảng lệnh PHP theo tập hợp con
- 12. tập hợp con của nhóm với data.table
- 13. R Không có trong tập hợp con
- 14. Tập dữ liệu con bằng nhiều điều kiện lô hàng hợp lý để xóa
- 15. Xóa giá trị NaN khỏi tập hợp
- 16. Tạo tập con của Tập hợp trong Java
- 17. Chỉ tìm nạp một tập hợp con của các nhánh git từ xa hoặc chỉ hiển thị một tập hợp con trong gitk
- 18. Set của tất cả các tập con
- 19. Xóa các nút gốc con trong RABL
- 20. Thuật toán tốt để tìm tập hợp con của tập hợp điểm
- 21. python tất cả các kết hợp của tập hợp con của một chuỗi
- 22. Cách tìm Tập hợp - Tập hợp con của hai tệp từ dòng lệnh?
- 23. $ rootScope là tập hợp sự kiện
- 24. Tất cả N kết hợp của tất cả các tập hợp con
- 25. Tạo tất cả các tập con "độc đáo" của một tập (không phải là một Powerset)
- 26. next_permutation cho các kết hợp hoặc tập hợp con trong powerset
- 27. Chọn một tập hợp con ngẫu nhiên duy nhất từ một tập hợp các giá trị duy nhất
- 28. Tập hợp các phần tử nhóm đã cho có tập hợp các đại diện coset không?
- 29. Hiệu quả nhận được tập hợp con của chuỗi "startingWith" ra khỏi một tập hợp
- 30. Làm thế nào để chuyển một tập hợp con của tập hợp sang phương thức C#?
Sử dụng s.issubset (t), kiểm tra xem mọi phần tử trong s có bằng t hay không. – Aristide
Chắc chắn, nhưng điều đó sẽ yêu cầu | A | * | B | kiểm tra. Tôi nghĩ với việc phân loại thông minh, tốt hơn có thể đạt được. – Student
Bạn có biết gì về kích thước tương đối của danh sách hoặc phạm vi số nguyên không? – nibot