Как проверить, корректна ли моя древовидная реализация AVL?

парни. Я думаю, что создал древовидную реализацию AVL, но поскольку Дерево AVL является вполне сложной структурой, я должен протестировать его. Таким образом, вопрос - как я могу протестировать его? Вы получили какие-либо идеи? До этого момента у меня есть следующие тесты:

  1. основная проверка работоспособности - проверяет, что для каждой высоты узла равняется максимум высоте дочерних узлов + 1, баланс находится в [-1, 1], оставлен ключ ребенка <ключ этого узла <ключ правильного ребенка, и нет никаких циклических ссылок (как покинутый ребенок узла, узел сам);

  2. проверьте, что inorder обход на дереве AVL (и на дереве двоичного поиска в целом) будет возвращать значения от приведенного в порядок базового;

  3. проверьте, что высота дерева AVL является строго меньше, чем 1.44*log2 (N+2)-1 (там N, число элементов) - доказанный древовидными создателями AVL;

  4. визуальная проверка - не работает, что хорошо, я пытаюсь потянуть дерево (rootnode в первой строке, его прямых детях на следующей строке, childen прямого childen rootnode на третьей строке и так далее), но это работает только над маленькими деревьями для больших деревьев, это становится полной путаницей;

  5. (?????) Российская Википедия говорит, что это доказано экспериментально, что для двух вставок одно изменение баланса нуждалось и для пяти удалений также одно необходимое изменение баланса, но является им действительно так? Английская Википедия ничего не говорит об этом, и для моего AVL одно изменение баланса, необходимое для двух вставок или для четырех удалений, который является не совсем тем же.

Возможно, эти тесты достаточно, но если больше существуют тесты, не трудные реализовать, почему не сделать это?

9
задан In silico 17 October 2010 в 23:22
поделиться