Точная точка, в которой карты хеширования быстрее, будет зависеть от машины.
Это правда, что для прохождения карты требуется всего лишь O (log n) «шагов».Но, посмотрев на постоянный фактор на мгновение, обратите внимание, что основание для этого журнала - 2, а не 10;и бинарное дерево, вероятно, реализовано как красно-черное дерево, которое в целом не идеально сбалансировано.(Если память служит, она может быть в 2 раза глубже, чем log2 (n).)
Однако на самом деле разница заключается в плохом расположении упорядоченной карты.Каждый из этих шагов O (log n) включает ветвь, которую невозможно предсказать, что плохо для конвейера команд.Хуже того, это связано с погоней случайного указателя на память.Основное правило современных процессоров: «Математика - это быстро, память - медленно».Это хорошее правило, чтобы помнить, потому что оно становится более верным с каждым поколением.Скорости ядра процессора обычно улучшаются быстрее, чем скорости памяти.
Так что, если ваша карта не достаточно мала, чтобы поместиться в кэш, эти случайные разыменования указателей очень плохи для общей производительности.Вычисление хэша - это просто математика (и, следовательно, быстрая), и погоня за O (1) указателями лучше, чем погоня за O (log n);обычно гораздо лучше для больших n.
Но, опять же, точная точка доминирования хеш-таблицы будет зависеть от конкретной системы.