Wie um zu überprüfen, ob meine AVL-Baum Implementierung korrekt ist?

Jungs.
Ich denke, ich habe ein AVL-Baum-Implementierung, aber als AVL-Baum ist eine ziemlich komplexe Struktur, die ich brauche, um es zu testen. Die Frage ist also - wie kann ich es testen? Haben Sie irgendwelche Ideen?
Bis zu diesem moment habe ich die folgenden tests:

  1. basic sanity-check - Prüfungen,
    für jeden Knoten die Höhe entspricht max.
    Höhe der Kind-Knoten + 1, das Gleichgewicht ist in [-1, 1], linken Kindes
    key < dieser Knoten ist die Taste < Recht
    Kind-Schlüssel, und es gibt keine
    zirkuläre Referenzen (wie Links Kind
    ein Knoten ist ein Knoten auf sich selbst);

  2. überprüfen Sie, dass die inorder-Traversierung auf einem AVL-Baum
    (und auf einen binären Suchbaum in das ganze)
    wird die Rückgabe von Werten aus den zugrundeliegenden Satz in Ordnung;

  3. überprüfen Sie, dass ein AVL-Baum der Höhe ist weniger streng als
    1.44*log2(N+2)-1 (gibt N die Anzahl der Elemente) - bewiesen durch die AVL-Baum-Schöpfer;

  4. visuelle Kontrolle - funktioniert nicht gut, ich versuche, den Baum zu zeichnen (Stammknotens in der ersten Zeile, seine direkten Kinder auf die nächste Zeile, Kinder des Stammknotens direkten Kinder in der Dritten Zeile und so weiter), aber das funktioniert nur auf kleine Bäume, große Bäume, es wird ein komplettes Chaos;

  5. (?????) Russische wikipedia sagt, dass es bewiesen experimentell, dass für zwei Einfügungen, eine Neugewichtung erforderlich und für fünf Umzüge auch ein rebalancing nötig ist, aber ist es wirklich so? Die englische wikipedia sagt nichts über es, und für meine AVL einer rebalancing-Bedarf für zwei Insertionen oder vier Umzüge, das ist nicht ganz das gleiche.

Vielleicht diese tests sind genug, aber wenn es noch mehr tests, nicht schwer zu implementieren, weshalb es nicht zu tun?

  • 5 im Allgemeinen nicht wahr ist, so muss es unter einem bestimmten Umstand (im Durchschnitt für zufällige Daten?). Wählen Sie eine ausgewogene Struktur, wenn Sie duplizieren, dass der Baum durch das einfügen der Knoten der Tiefe 1. (wachsen des Baumes von der Wurzel zu den Blättern jeweils eine Ebene), der Baum wird nicht verlangen, ein neues Gleichgewicht.
  • Ich überprüft mit meinem AVL-monte-carlo-test, der das Verhältnis von Einfügungen Einfügungen, die ins Gleichgewicht bringen 2:1 (~10% Fehler) und löscht, löscht, der auszugleichen ist 4:1 (innerhalb von ~5% Fehler) für 5 Millionen zufällige Vorgänge.
InformationsquelleAutor Graf | 2010-10-17
Schreibe einen Kommentar