Pull to refresh

Comments 11

С поиском-то всё понятно, а как быть с добавлением данных? Повсеместно используемый в СУБД B-tree использует букеты, выстраивая их в самобалансирующееся дерево, что неизбежно приводит к логарифмическому поиску. Причём далеко не бинарному, то есть степень логарифма не 2, а исчисляется десятками, а то и сотнями. Предложенный же тут алгоритм работает лишь на плоских списках. А если его применять к не плоским, то вновь выползет логарифм на доступ к каждому элементу. Для равномерно распределённых данных таким образом лучше подходит какой-нибудь trie, который по префиксу очень быстро скачет по букетам, и поиск в котором для фиксированной длины ключа даёт константную сложность.

Причём далеко не бинарному, то есть степень логарифма не 2, а исчисляется десятками, а то и сотнями.

Так наоборот же — чем больше основание логарифма, тем лучше, быстрее получается. Собственно, основная фишка этих B-tree состоит в том, чтобы сделать деревья пошире и уменьшить глубину.

UFO landed and left these words here

может равномерно?)

Надо полагать, что это не принципиально, коль скоро известен закон распределения (аналитическая запись).

UFO landed and left these words here
UFO landed and left these words here

Датасеты состояли из отсортированных случайных целых чисел, что может служить достаточно точным представлением наших данных.

может служить, а может и нет. помню на это как-то обращал внимание Миловидов, что для тестов базы лучше брать реальные данные, а не рандомные, по крайне мере для строк

Некогда здесь на Хабре была огромная статья с тестом разных алгоритмов сортировок. Вроде бы и разно сгенерированные данные тоже были, чтобы понять, какой алгоритм на (не)случайных данных хорош.

Выше уже писали, что это похоже на интерполяционный поиск. Добавлю:

  • Это старый метод, у Кнута уже был.

  • Асимптотика известна, это не константа, а O(log log N)

  • В чистом виде обычно не применяется, но может быть полезен на первых X шагах, потом уже двоичный.

Sign up to leave a comment.

Articles