Что быстрее на практике: Treap или Splay tree?

Я выучил как Treap, так и Splay tree и решил несколько проблем, используя их.
Теоретически, их сложность в среднем равна O(log n), но в худшем случае сложность Treap равна O(n), а у Splay Tree амортизируется O(log n).

В каком случае наихудший случай возникает в Treap (поскольку его приоритеты выбираются случайным образом), и действительно ли Treap медленнее, чем Splay- дерево? Я решил некоторые задачи в SPOJ как с Splay- деревом, так и с Treap, и решения, использующие Treap, были немного быстрее (около 0,2 с), чем решения, использующие Splay- дерево. Так какой из них на самом деле быстрее, и какой я должен в основном использовать и когда?

1 ответ

Решение

На практике ни один из них действительно не используется. Они часто намного сложнее, чем необходимо. Они в основном интересны академически и для соревнований по программированию. Я действительно только сталкивался с красно-черными деревьями и B-деревьями в производственном коде, другие типы сбалансированных деревьев встречаются крайне редко.

Если вы обнаружите, что ловушки быстрее, то просто используйте их, так как производительность в худшем случае O(n) обусловлена ​​неудачей, а не состязательным вводом. Splay-деревья немного медленнее, потому что на практике приходится "платить" за амортизацию, чтобы получить наихудший случай до O(log n).

Другие вопросы по тегам