Меня озадачивает следующий вопрос о домашнем задании для класса алгоритмов:
Предположим, что нам задана последовательность из n значений x 1, x 2... x n и искать быстро отвечать на повторяющиеся запросы form: данные я и j, найдите наименьший значение в x i... x j
Создайте структуру данных, которая использует O (n) пространство и ответы на запросы в O (log n) время.
Во-первых, я не уверен, относится ли последовательность к отсортированному набору или к несортированному множеству, но, поскольку он не говорит об этом, я буду считать, что средства последовательности несортированы.
Итак, я понимаю, что это, очевидно, должно включать двоичное дерево, если мы говорим о времени поиска O (log N). В принципе, я полагаю, у вас есть набор S
, и вы вставляете каждый элемент в S
в двоичное дерево. Проблема в том, что вопрос в основном требует, чтобы я придумал способ ответа на запросы, где мне задан диапазон индексов в несортированный набор, - и затем определите самое низкое значение в этом диапазоне в O (log N) времени. Как это возможно? Даже если каждый номер набора вставляется в дерево, лучше всего я могу найти любое конкретное число в O (log N) времени. Это не позволяет мне найти наименьшее значение в несортированном диапазоне чисел в S
.
Любые предложения?