Re: Бинарный поиск с дубликатами
От: Аноним  
Дата: 09.07.14 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте коллеги, такая задача

А>есть отсортированная последовательность типа

А>0,1,5,6,6,6,6,6,7

А>нужно за логарифмическое время найти первый элемент равный либо 6 (то есть после 5 — кой) и последний (перед 7 — кой)

А>я попробовал реализовать так бинарно ищу последний меньший/больший если он не равен искомому ключу то возвращаю его, если но равен ключу, то запускаю снова бинарный "подпоиск" на интервале от начало/конца массива до этого элемента если "под поиск" больше не нашел ключей то возвращаю первое найденное значение иначе повторяю рекурсивно.

А>Но не нравиться сам реализация с под. поисками, возможно есть другие решения.

А ничего и не надо делать
На каждом шаге алгоритма мы должны сузить интервал, так?
Мы взяли какой-то элемент внутри существующего интервала, и если он меньше искомого, то берем правую часть.
А вот если меньше или равен искомому — то левую. Таким образом — если мы попадаем на 6-ку и ищем 6, то всегда будем двигаться к самой левой шестерке, ведь 6 <= 6, а значит мы выбираем левый интервал, пока не дойдем до самой левой 6-ки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.