у меня есть BST, где я вставляю ключи от 1 до n случайным образом (каждая перестановка выполняется с вероятностью 1/n!). мой вопрос: почему результирующие деревья не равномерны, даже если перестановка однородна?
Случайное двоичное дерево поиска
Ответы (2)
Многое зависит от реализации дерева. Это самобалансировка? Рассмотрим простые деревья 1 2 3 и 3 2 1
Very simple tree:
add 1
1
add 2
1
\
2
add 3
1
\
2
\
3
тогда 3 2 1
добавить 3
3
add 2
3
/
2
add 1
3
/
2
/
1
Теперь сделайте 2 3 1
2
2
\
3
2
/ \
1 3
бинарное дерево поиска - это не просто однородное дерево поиска... дерево строится в том порядке, в котором в нем сохраняются новые значения. как уже показал глоукодер, это не гарантирует однородности...
наличие равномерного распределения случайных чисел не гарантирует порядок значений, оптимальный для построения бинарного дерева
чтобы с минимальными усилиями выполнять поиск по бинарному дереву, дерево необходимо регулярно перестраивать. Обычно это происходит в нерабочее время, когда алгоритм может прочитать все дерево в связанный список, а затем из этого списка построить новое дерево с оптимальной однородностью.