In einem 2D-Zahlenfeld Cluster finden

8

Gegeben ein 2D-Array, zum Beispiel:

%Vor%

Die Ausgabe sollte Gruppen von Clustern sein:

Cluster 1: <2,3,8,5,7>

Cluster 2: <1,7,4>

    
dimple 29.12.2011, 06:49
quelle

5 Antworten

3

Ihr Problem scheint verbundene Komponenten zu finden. Sie sollten eine Traversierungsmethode verwenden (entweder BFS oder DFS werden die Arbeit tun). Iteriere über alle Elemente, starte für jedes Element, das nicht Null ist, einen Polygonzug und zeichne alle Elemente auf, die du in diesem Polygonzug siehst, und mache jedes besuchte Element zu Null. So etwas wie der folgende Code:

%Vor%     
saeedn 29.12.2011 07:03
quelle
2

Eine Möglichkeit, dies zu tun, ist ein Graph. Durchquere die Matrix in einer bestimmten Reihenfolge (ich gehe von links nach rechts, von oben nach unten). Wenn Sie auf ein Element stoßen, das nicht Null ist, fügen Sie es dem Diagramm hinzu. Überprüfen Sie dann alle seine Nachbarn (es sieht so aus, als ob Sie 8-verbundene Nachbarn wollen), und für jeden, der nicht Null ist, fügen Sie seinen Knoten dem Graphen hinzu und verbinden Sie ihn mit dem aktuellen Element. Die Elemente im Diagramm müssen wahrscheinlich ihre Koordinaten verfolgen, damit Sie sehen können, ob Sie ein Duplikat hinzufügen oder nicht. Wenn Sie die Matrix durchlaufen haben, haben Sie einen Graphen, der eine Gruppe von Clustern enthält. Cluster sollten Untergraphen von verbundenen Elementen sein.

    
user1118321 29.12.2011 06:56
quelle
2

Sie möchten Kennzeichnung für verbundene Komponenten durchführen. Dies wird normalerweise als Bildverarbeitungsalgorithmus betrachtet, entspricht jedoch dem, was Sie beschreiben.

Sie erhalten auch Empfehlungen von K-means, weil Sie ein 2D-Zahlenfeld angegeben haben und es leicht ist, das als Array von 2D-Zahlen zu interpretieren . K-means findet Cluster von Punkten in einer Ebene, nicht verbundene Gruppen in einem 2D-Array, wie Sie es wünschen.

    
Ben Jackson 29.12.2011 08:56
quelle
0

Wenn Sie die Anzahl der Gruppen kennen oder Ihre Daten an eine statische Anzahl von Gruppen anpassen möchten, können Sie k-means verwenden.

Ссылка

    
nmjohn 29.12.2011 07:14
quelle
0

Codebeispiel:

%Vor%

Algorithmus Erklärung:

  • Für jede Zeile:
    • Für jede Spalte in dieser Zeile:
      • Wenn der Artikel nicht besucht wird und nicht Null ist:
        1. Speichern Sie das gefundene Cluster-Mitglied;
        2. Markieren Sie den Ort in [Zeile, Spalte] als besucht;
        3. Überprüfen Sie alle nicht besuchten Nachbarn, die nicht Null sind, während Sie in der Matrix bleiben:
          • [Zeile - 1, Spalte - 1];
          • [Zeile - 1, Spalte];
          • [Zeile - 1, Spalte + 1];
          • [Zeile, Spalte - 1];
          • [Zeile, Spalte + 1];
          • [Zeile + 1, Spalte - 1];
          • [Zeile + 1, Spalte];
          • [Zeile + 1, Spalte + 1].
        4. Wenn ein Nachbar eine nicht besuchte Nicht-Null ist, wiederholen Sie die Schritte 1-4 rekursiv, bis alle Nachbarn Nullen sind (alle Cluster-Mitglieder wurden gefunden).
MechStar 06.03.2017 21:51
quelle

Tags und Links