Pull to refresh

Comments 10

Да, я тоже очень вдохновилась после этой лекции. Ощутила, что я на самом деле вообще нифига не шарю в структурах и деревьях (хотя до этого была другого мнения) (=

А других источников кроме e-maxx'а нет? А про КД-дерево и иже с ними? (=
В Кормене очень подробно описываются хеши и деревья (особенно красно-черные). А по поводу КД-дерева, думаю в сборнике будет хорошо все описано =) А, да, вот сборники с видео-лекциями за прошлые года (есть почти все =) )
Ну Кормена уже до дыр зачитали. И все эти красно-черные деревья — баян (= А вот квадро-деревья и т.п. — это новенькое (=
А вообще, как выяснилось, на английской Вики деревьев на любой вкус сколько хочешь! (=
В начале поста упомянута некая «идея, применимая к задачам другого типа». А, собственно, что за идея?
Хотел расписать одну задачу с которой недавно столкнулся, но статья затянулась…
Если я не ошибаюсь, такая статья уже была. Именно особенность с предварительным подсчётом сумм и квадратный корень мне запомнились.

Тем не менее, хорошо написано и +1.
Возможно Вашь алгоритм можно улучшить, в случае если L>=R. В случае если это условие выплняется, то sqrt суммы для R частично считать не нужно, они уже посчитаны для L.
Кроме того, если бы в статье были приведены примеры Unit тестов то материал был бы более усваиваем.
Алгоритм, как минимум, можно улучшить (в среднем) за счет того что, мы будем просто считать сумму не как разность частичных сумм, а «подъемами» снизу (как в дереве отрезков).
Да, я не учел, что можно считать кумулятивную сумму.
Вот моя реализация на Java на github.
Та же идея применима к спискам с пропусками, если ограничить высоту списка двойкой. В этом случае легко показать, что оптимальным является расстановка узлов высоты два как раз через n1/2 узлов нижнего уровня. Это гарантирует время поиска в списке порядка O(n1/2). Более точно это время оценивается, как 2n1/2. Идею можно развить, если ввести не два уровня, а например, три. Тогда оптимальным будет расположение «высоких» узлов через n1/3 узлов каждого уровня. Этот даст нам время поиска порядка 3n1/3. Если довести эти рассуждения до логического конца, то при k=log2n уровнях (в этом случае получаются минимально возможные подмассивы длины два) получим время поиска равное 2log2n — это кмк оптимальный результат полноценного списка с пропусками. И подозреваю, что такое же время будет у нормального дерева отрезков…
Sign up to leave a comment.

Articles