2015-04-25 5 views
7

Bei einem 2D-Array von booleschen Werten möchte ich alle Muster finden, die aus mindestens 2 Spalten und mindestens 2 Zeilen bestehen. Das Problem liegt nahe bei cliques in a graph.Wie finde ich Mustergruppen im booleschen Array?

Im Beispiel unten stellen grüne Zellen "echte" Bits dar, Graustufen sind "falsch". Muster 1 enthält Spalten 1, 3, 4 und 5 und Zeilen 1 und 2. Muster 2 enthält nur Spalten 2 und 4 und Zeilen 2, 3, 4.

Geschäftsidee dahinter findet Ähnlichkeit Muster unter den verschiedenen Gruppen von Nutzern sozialer Netzwerke. In der realen Welt kann die Anzahl der Zeilen bis zu 3E7 und die Anzahl der Spalten bis zu 300 reichen.

Kann nicht wirklich eine Lösung außer Brute-Force-Matching herausfinden.

Bitte geben Sie den richtigen Namen des Problems an, damit ich mehr lesen oder eine elegante Lösung empfehlen kann.

+1

Wenn das Array symmetrisch ist und alle Diagonaleinträge true sind, müssen Sie symmetrische All-True-Sub-Arrays finden, die unter anderem den Cliquen in einem Diagramm entsprechen. Da das Bestimmen der größten Clique (oder der größten unabhängigen Menge im Komplement) NP-schwer ist, ist dieses Problem ebenfalls vorhanden. Das bedeutet nicht, dass es in der Praxis nicht möglich ist, aber es legt nahe, dass Sie mehr Informationen über die Besonderheiten der Arrays bereitstellen sollten, anstatt auf einen schnellen, allgemeinen Algorithmus zu hoffen. –

+0

Was ist genau ein Muster? Es ist mir immer noch nicht klar. –

+0

@DouglasZare, danke für den Kommentar. Array ist nicht symmetrisch. Zeile repräsentiert einen Benutzer, und die Bits sind für unabhängige Eigenschaften aktiviert, die von Forschung zu Forschung variieren. I.e. b1 "Hat eine höhere Bildung", b2 "Liked Seite X", b3: gemocht Seite Y "etc. JuanLopes von einem" Muster "meine ich Satz von" an "Spalten, mehr als 2, die für mehr als 2 Benutzer gelten – Serge

Antwort

4

Dies ist (äquivalent) für alle bicliques (komplette zweiteilige Teilgraphen) größer als eine bestimmte Größe in einem zweiteiligen Graphen. Hier sind die Zeilen die Eckpunkte von einem Teil A des Graphen, und die Spalten sind die Eckpunkte des anderen Teils B, und es gibt eine Kante zwischen u \ in A und v \ in B immer dann, wenn die Zelle in Zeile u, Spalte v ist grün.

Obwohl Sie sagen, dass Sie alle Muster finden möchten, möchten Sie wahrscheinlich nur maximale diejenigen finden, die nicht erweitert werden können, um größere Muster durch Hinzufügen von mehr Zeilen oder Spalten zu werden. (Andernfalls erhalten Sie für jedes Muster mit c> = 2 Spalten und r> = 3 Zeilen auch die mehr als 2^(c-2) * 2^(r-3) nicht-maximalen Muster, die gebildet werden können durch Löschen einiger Zeilen oder Spalten.)

Aber selbst die Auflistung nur der maximalen Muster kann exponentiell in der Anzahl der Zeilen und Spalten sein, unter der Annahme, dass P! = NP. Das ist, weil das Problem der Suche nach einem Maximum (dh größtmöglichen) Muster, in Bezug auf die Gesamtzahl der grünen Zellen, has been proven to be NP-complete: wenn es möglich wäre, alle maximalen Muster in polynomieller Zeit aufzulisten, dann könnten wir es einfach tun, und wähle den größten und lösche damit dieses NP-vollständige Problem in Polynomialzeit.

+0

Danke, @j_random_hacker, für die Expertenantwort. Jetzt durch Algorithmen schauen: [Genomische Rückfälle unter Influenza-Stämmen aufdecken, indem man maximale Bicliques aufzählt - Nagarajan, Kingsford] (http://www.cbcb.umd.edu/~niranjan/papers/NagarajanKingsfordBIBM08.pdf) und [Auf dem Finden von bicliques in bipartite Graphen - Zhang, Phillips, Rogers, Bäcker, Chesler, Langston] (http://www.biomedcentral.com/1471-2105/15/110) – Serge

+0

Ich bin froh, dass ich helfen konnte @Serge :) –

Verwandte Themen