Алгоритмы запроса диапазона на целые потоки

Я получаю поток положительных целых чисел в моей программе. Я должен хранить их по мере их получения и иметь возможность отвечать на запросы, находящиеся между ними.

Простое решение, которое пришло мне в голову, - хранить целые числа в хеш-таблице, где ключи являются символьным представлением целых чисел (ключи должны быть строками в моей хеш-таблице). Затем, всякий раз, когда приходит запрос диапазона [a, b], я могу просто перейти от a к b, проверить, существует ли ключ, и получить значение, если оно есть. Тем не менее, я не уверен, что это хороший подход.

Какие другие альтернативные решения существуют для этой проблемы?

1 ответ

Если вы сохранили упорядоченный список целых чисел из потока, считанного до сих пор, то запрос диапазона можно выполнить, найдя a (с использованием бинарного поиска) и итерации с этого момента, пока вы не пройдете b, так что время, потраченное на запрос, будет пропорционально фактическому размеру результата, независимо от того, насколько разреженным заполнен диапазон.

Другие вопросы по тегам