2015-04-25 12 views
7

Với mảng giá trị Boolean 2D, tôi muốn tìm tất cả các mẫu bao gồm ít nhất 2 cột và ít nhất 2 hàng. Vấn đề là hơi gần với việc tìm kiếm cliques in a graph.Cách tìm các nhóm mẫu trong mảng boolean?

Trong ví dụ bên dưới, các ô màu xanh lá cây đại diện cho các bit "đúng", màu xám là "sai". Mẫu 1 chứa cols 1,3,4 và 5 và hàng 1 và 2. Mẫu 2 chỉ chứa các cột 2 và 4 và các hàng 2,3,4.

Ý tưởng kinh doanh đằng sau điều này là tìm mẫu tương tự giữa các nhóm người dùng mạng xã hội khác nhau. Trong số hàng thực tế có thể lên đến 3E7 và số lượng cột tối đa 300.

Không thể thực sự tìm ra giải pháp khác ngoài kết hợp lực lượng vũ phu.

Vui lòng tư vấn tên riêng của sự cố, vì vậy tôi có thể đọc thêm hoặc tư vấn giải pháp thanh lịch.

+1

Trong trường hợp mảng là đối xứng, và tất cả các mục chéo là đúng, bạn phải tìm các mảng phụ hoàn toàn đối xứng tương ứng với các dòng trong biểu đồ, trong số các mảng khác. Kể từ khi xác định các clique lớn nhất (hoặc tập độc lập lớn nhất trong bổ sung) là NP-cứng, do đó, là vấn đề này. Điều đó không có nghĩa là nó không thể được thực hiện trong thực tế, nhưng nó cho thấy rằng bạn nên cung cấp thêm thông tin về các chi tiết cụ thể của các mảng thay vì hy vọng cho một thuật toán nhanh, nói chung. –

+0

Chính xác một mẫu là gì? Nó vẫn không rõ ràng với tôi. –

+0

@DouglasZare, cảm ơn bạn đã nhận xét. Mảng không đối xứng. Hàng đại diện cho người dùng và các bit được bật cho các thuộc tính độc lập thay đổi từ nghiên cứu đến nghiên cứu. I E. b1 "Có giáo dục đại học", b2 "Đã thích trang X", b3: trang ưa thích Y "v.v. JuanLopes theo" mẫu "tôi muốn đặt cột" trên ", nhiều hơn 2, áp dụng cho hơn 2 người dùng – Serge

Trả lời

4

Đây là (tương đương) yêu cầu tất cả bicliques (đồ thị con đa hướng hoàn chỉnh) lớn hơn một kích thước nhất định trong biểu đồ hai chân. Ở đây các hàng là các đỉnh của một phần A của biểu đồ, và các cột là đỉnh của phần B khác, và có một cạnh giữa u \ trong A và v \ trong B bất cứ khi nào ô ở hàng u, cột v có màu xanh lá cây.

Mặc dù bạn nói rằng bạn muốn tìm tất cả các mẫu, bạn có thể chỉ muốn tìm các mẫu tối đa - đó là các mẫu không thể mở rộng để trở thành các mẫu lớn hơn bằng cách thêm nhiều hàng hoặc cột hơn. (Nếu không, đối với bất kỳ mẫu nào có c> = 2 cột và r> = 3 hàng, bạn cũng sẽ lấy lại nhiều hơn 2^(c-2) * 2^(r-3) mẫu không tối đa có thể được tạo thành bằng cách xóa một số hàng hoặc cột.)

Nhưng thậm chí chỉ liệt kê các mẫu tối đa có thể mất thời gian theo số mũ của hàng và cột, giả sử rằng P! = NP. Đó là vì vấn đề tìm kiếm mẫu tối đa (tức là lớn nhất có thể), về tổng số ô xanh, has been proven to be NP-complete: nếu có thể liệt kê tất cả các mẫu tối đa trong thời gian đa thức, thì chúng ta có thể làm như vậy, và chọn lớn nhất, do đó giải quyết vấn đề NP-hoàn chỉnh này trong thời gian đa thức.

+0

Cảm ơn bạn, @j_random_hacker, vì câu trả lời của chuyên gia. Xem xét các thuật toán ngay bây giờ: [Khám phá các phân loại gen trong các chủng cúm bằng cách liệt kê các xe đạp tối đa - Nagarajan, Kingsford] (http://www.cbcb.umd.edu/~niranjan/papers/NagarajanKingsfordBIBM08.pdf) và [Khi tìm thấy các xe đạp trong bipartite đồ thị - Zhang, Phillips, Rogers, Baker, Chesler, Langston] (http://www.biomedcentral.com/1471-2105/15/110) – Serge

+0

Vui vì tôi có thể giúp @Serge :) –

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