Union-Find-Grundlagen

I. Konzept und Einführung

Union-Find ist eine baumförmige Datenstruktur, die zum Zusammenführen und Abfragen einiger disjunkter Mengen verwendet wird.

Die Idee von Union-Find besteht darin, ein Array zu verwenden, um einen gesamten Wald (parent) darzustellen. Der Wurzelknoten eines Baums identifiziert eine Menge eindeutig; solange wir die Baumwurzel eines Elements finden, können wir bestimmen, zu welcher Menge es gehört.

II. Hinweise zur Anwendbarkeit

Union-Find-Mengen werden in einigenNBei Mengenanwendungsproblemen mit Elementen lassen wir üblicherweise jedes Element am Anfang eine einelementige Menge bilden, dann vereinigen wir die Mengen, die Elemente derselben Gruppe enthalten, in einer bestimmten Reihenfolge und finden während des Prozesses wiederholt heraus, zu welcher Menge ein Element gehört. Dieser Prozess mag einfach erscheinen, aber wenn die Datenmenge extrem groß ist, wenn andere Datenstrukturen verwendet werden, um sie zu beschreiben, ist der benötigte Speicherplatz oft zu groß, als dass der Computer ihn bewältigen könnte, und das Ergebnis kann nicht in kurzer Zeit berechnet werden. Daher kann nur die Union-Find-Menge verwendet werden, um damit umzugehen.

III. Grundlegende Datendarstellung der Union-Find-Menge

Wie oben gezeigt0-4Die folgenden sind alle0,5-9Die folgenden sind alle1, was bedeutet0、1、2、3、4Diese fünf Elemente sind verbunden,5、6、7、8、9Diese fünf Elemente sind verbunden.

Wie oben erneut gezeigt0、2、4、6、8Die folgenden sind alle0Diese Menge repräsentiert0、2、4、6、8Diese fünf Elemente sind verbunden,1、3、5、7、9Die folgenden sind alle1Diese Menge repräsentiert0,1、3、5、7、9Diese fünf Elemente sind verbunden.

Erstellen Sie eine Klasse UnionFind, initialisieren Sie sie so, dass jedes id[i] auf sich selbst zeigt, ohne zusammengeführte Elemente:

...
public UnionFind1(int n) {
        count = n;
        id = new int[n];
        // Initialisierung: Jedes id[i] zeigt auf sich selbst, keine zusammengeführten Elemente
        for (int i = 0; i < n; i++)
            id[i] = i;
    }
...

Java-Beispielcode

Quellcode-Paket-Download:Herunterladen

Code der Datei UnionFind.java:

package example.union;

public class UnionFind{
    private int[] id;
    // Anzahl der Datenelemente
    private int count;

    public UnionFind1(int n) {
        count = n;
        id = new int[n];
        for (int i = 0; i < n; i++)
            id[i] = i;
    }

}  
Weitere Erweiterungen