Форум программистов, компьютерный форум CyberForum.ru

Двоичный(бинарный) поиск - C++

Восстановить пароль Регистрация
 
Starfalll
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 32
17.03.2013, 15:27     Двоичный(бинарный) поиск #1
Столкнулся с такой проблемой. использую бинарный поиск в упорядоченном массиве чисел для поиска количества повторений нужного мне числа
К примеру , есть массив чисел
C++
1
0 1 2 2 2 3
Ищу сколько 2 в нем есть.
Используя стандартный бинарный поиск мы находим 2 на 4 позиции и делим массив или на
C++
1
0 1 2
или на
C++
1
2 3
То есть и так и так в конце выдает что в массиве находится 2 двойки , что не есть правдой.
Все что я надумал , при нахождении нужного числа идем с помощью for в обе стороны пока находим нужное нам число.

Но ведь должно быть какое-то лучшее решение...или нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 15:27     Двоичный(бинарный) поиск
Посмотрите здесь:

Двоичный поиск C++
Двоичный поиск C++
C++ Двоичный (бинарный) поиск
двоичный поиск C++
двоичный поиск C++
Двоичный поиск C++
Поиск числа в двумерном массиве (бинарный поиск) C++
C++ Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.03.2013, 16:40     Двоичный(бинарный) поиск #2
Пишите бинарный поиск, манипулирующий границами интервалов. Граница — это нечто между элементами массива. Тогда у вас будет три интервала: слева, справа, и найденная двойка.

Или просто прибавьте единицу к тому, что получили, пройдя влево и вправо от найденного элемента. Всё равно он один.

Лучшее решение... Возможно, будет эффективнее использовать два подвида бинарного поиска: находящий самое левое вхождение и самое правое. Потом просто по разнице индексов определить количество. Но предпочтение этого метода простому линейному просмотру зависит от среднего количества повторений искомого элемента: при малом количестве повторений и большом массиве глянуть влево-вправо быстрее, чем делать ещё один поиск (а ещё поиск первого попавшегося элемента тоже чуть быстрее, чем поиск крайних).
Yandex
Объявления
17.03.2013, 16:40     Двоичный(бинарный) поиск
Ответ Создать тему
Опции темы

Текущее время: 23:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru