2016-01-09 17 views
6

Tôi có bộ 'n' (n < 10). Mỗi bộ có thể cho phép nói, 1000 yếu tố. Tôi muốn tìm tất cả các bộ phân chia cho các bộ này. Ví dụ: tôi có các bộThuật toán có thể tìm tất cả các tập phân tách từ tập hợp các bộ là gì?

A = {2,5,6,7}, B = {5,1} and C = {5,7}. 

Sau đó, đầu ra sẽ là {{5}, {2,6}, {1}, {7}}. Thuật toán này có thể là gì? Tôi nghĩ về việc tìm các bộ phân tách cặp đôi và sau đó sử dụng các bộ mới (phân tách) này để tìm lại các bộ phân tách khỏi các tập hợp còn lại. Nhưng điều này sẽ không quy mô tốt. Hy vọng điều này sẽ giúp: Diagram Example

+0

Bạn có thể nói một vài từ về các thuộc tính của đầu ra, hoặc tốt hơn những gì bạn làm để có được nó? Ví dụ: tại sao {2} và {6} không được bao gồm? – davidhigh

+0

@davidhigh Hãy xem xét nó như thế này: Bạn có 2 bộ A và B. Các bộ phân chia sẽ là A-B, A giao lộ B và B-A. Hy vọng điều này sẽ giúp: https://doc-0c-a4-docs.googleusercontent.com/docs/securesc/i4h2cehd386i3qiqgfp2t1a9r0fu5o6m/qhu2v38hp0h1pdvvehj9vgmdsctujsbt/1452340800000/02075453514295040169/02075453514295040169/0BzbXcZ2xK6JrZ1NiblVXeGpMYms?h=07006165945320890235&nonce=89dl1pkjorq58&user=02075453514295040169&hash=7is7r402mkd2ag6amo4l23vn1bp5cqfd – aceBox

+0

không thể kết nối với bạn link: /. Một giải pháp có thể được xem xét vấn đề của bạn như là một bản đồ nhập đôi: hàng sẽ là các phần tử và cột. Tôi sẽ cố viết một bản nháp. – 88877

Trả lời

3

Bạn có thể xem xét vấn đề của mình dưới dạng bản đồ hai boolean, các phần tử là các hàng, bộ là cột và boolean là câu trả lời của câu hỏi là phần tử được bao gồm trong bộ này. Ví dụ: ví dụ của bạn sẽ là:

t A B C 
2 1 0 0 
5 1 1 1 
6 1 0 0 
7 1 0 1 
1 0 1 0 

Sau đó tạo khóa cho mỗi phần tử mô tả các điểm khác biệt đặt trong và đăng ký phần tử này trên bản đồ.

Ví dụ nếu chúng ta xem xét các chức năng then chốt tạo ra như một cái gì đó như thế này:

int keyFunction(bool Xa, bool Xb, bool Xc) { 
    int key =0; 
    if (Xa) {key+=4;} 
    if (Xb) {key+=2;} 
    if (Xc) {key+=1;} 
    return key; 
} 

Sau đó chúng tôi có thể tạo ra bản đồ:

Key ElementsQueue 
0 [] 
1 [] 
2 [1] 
3 [] 
4 [2,6] 
5 [7] 
6 [] 
7 [5] 

và gửi lại các yếu tố của bản đồ này.

+0

Tôi sẽ cố gắng thực hiện dự thảo triển khai nếu giải pháp này có vẻ tốt cho bạn – 88877

+0

Bạn đã đạt đến các giá trị khóa như thế nào là 4,2,1? – aceBox

+0

@aceBox Chúng ta có thể xem danh sách boolean là các bit của một số nhị phân. Vì vậy, [x, y, z] là x * 2^2 + y * 2^1 + z * 2^0. – 88877

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