Сегодня я слушал лекцию о ветвях деревьев (двоичные индексированные деревья), и учитель говорит, что это дерево является обобщением деревьев интервалов и сегментов, но мои реализации этих трех структур данных различны. Это правда? и почему?
Являются ли интервалы, сегменты, веткистые деревья одинаковыми?
Ответ 1
Я никогда не слышал двоичные индексированные деревья, называемые обобщением чего-либо. Это, конечно, не обобщение интервальных деревьев и сегментных деревьев. Я предлагаю вам следовать ссылкам, чтобы убедить себя в этом.
чем это дерево является обобщением деревьев интервалов и сегментов
Если "этим деревом" ваш учитель имел в виду "двоичное индексированное дерево", то он ошибается.
но мои реализации этих трех структур данных отличаются друг от друга
Конечно, они разные, ваш учитель никогда не говорил, что их не должно быть. Он просто сказал, что один из них является обобщением другого (что неверно, но все же). В любом случае, реализации должны быть разными.
Что бы такая же реализация была двоичным индексированным деревом и fenwick tree, потому что те одно и то же.
Ответ 2
Следующая классификация кажется разумной, хотя разные люди обязаны смешивать эти термины.
Дерево Fenwick/Дерево с индексом двоичной привязки ссылка
Тот, где вы используете один массив и операции над двоичным представлением для хранения префиксных сумм (также называемых суммируемыми суммами). Элементы могут быть членами моноида.
Дерево диапазонов ссылка
Семейство деревьев, где каждый node представляет собой поддиапазон заданного диапазона, например [0, N]. Используется для вычисления ассоциативных операций с интервалами.
Дерево интервала ссылка
Деревья, где вы храните фактические интервалы. Чаще всего вы берете среднюю точку, сохраняете пересекающиеся интервалы в node и повторяете процесс для интервалов слева и справа от точки.
Дерево сегментов ссылка
Подобно дереву диапазонов, где листья являются элементарными интервалами в возможно непрерывном пространстве, а не дискретными и более высокими узлами, являются объединениями элементарных интервалов. Используется для проверки включения точки.