Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 27.04.2018
Сообщений: 26

Бинарный поиск

19.05.2021, 23:01. Показов 5990. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть алгоритм бинарного поиска, но он ищет только первое вхождение нужного элемента и выводит первый необходимый индекс. А если нужных элементов больше, чем один, то остальные он не замечает и их индексы не выводит. Помогите сделать так, чтобы программа выводила индексы вхождения всех нужных элементов, а не только первого (с использованием бинарного поиска).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
k = int(input('Ключ поиска ')) 
mid = len(arr) // 2 # центр. элемент
low = 0 # первый элемент массива
high = len(arr) - 1 # последний элемент массива
 
while arr[mid] != k and low <= high:
    if k > arr[mid]: # сравнение значения среднего элемента с ключом поиска
        # сдвиг границ просматриваемой последовательности
        low = mid + 1
    else:
        high = mid - 1
    mid = (low + high) // 2
 
if low > high:
    print("Такого элемента нет ")
else:
    print("Элемент имеет индекс", mid)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2021, 23:01
Ответы с готовыми решениями:

Двоичный поиск. Бинарный поиск
Двоичный поиск В данной задаче можно пользоваться встроенными функциями. Входные данные В первой строке входных данных...

Бинарный поиск
Бинарный поиск. Дан упорядоченный массив длиной N. Задано число Х. Требуется найти позицию этого числа в заданном массиве. Для поиска...

Бинарный поиск
Здравствуйте мне срочно нужен код бинарного поиска и можно с подробным обуснением Заранее спасибо))

4
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
19.05.2021, 23:11
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from random import randint
 
# Создание списка,
# его сортировка по возрастанию
# и вывод на экран
a = []
for i in range(15):
    a.append(randint(1, 50))
a.sort()
print(a)
 
# искомое число
value = int(input())
 
mid = len(a) // 2
low = 0
high = len(a) - 1
 
while a[mid] != value and low <= high:
    if value > a[mid]:
        low = mid + 1
    else:
        high = mid - 1
    mid = (low + high) // 2
 
if low > high:
    print("No value")
else:
    print("ID =", mid)
0
0 / 0 / 0
Регистрация: 27.04.2018
Сообщений: 26
19.05.2021, 23:16  [ТС]
Эта программа выводит индекс только одного из повторяющихся элементов. А мне нужно чтобы выводило несколько индексов, если в массиве есть несколько одинаковых элементов.
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
19.05.2021, 23:19
be happy, use poisk
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
20.05.2021, 12:00
Лучший ответ Сообщение было отмечено Mergich как решение

Решение

Вот. Если элемента нет - вернет пустой список. Если есть - вернет все индексы вхождения

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def bin_search(arr,k):
    mid = len(arr) // 2 # центр. элемент
    low = 0 # первый элемент массива
    high = len(arr) - 1 # последний элемент массива
 
    while arr[mid] != k and low <= high:
        if k > arr[mid]: # сравнение значения среднего элемента с ключом поиска
            # сдвиг границ просматриваемой последовательности
            low = mid + 1
        else:
            high = mid - 1
        mid = (low + high) // 2
 
    if low > high:
        return []
    else:
        r=[]
        i=mid
        while(arr[i]==k and i>=0):
            r=[i]+r
            i-=1
        i=mid+1    
        while(arr[i]==k and i<len(arr)):
            r=r+[i]
            i+=1
        return r
        
x=[1,2,5,7,11,11,11,23,23,23,46,47,48]   
 
print(bin_search(x,23))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2021, 12:00
Помогаю со студенческими работами здесь

Бинарный поиск
Написать программу извлечения корня из 2 с помощью бинарного поиска с заданной точностью. Ребят, приходит в голову только если вводить...

Бинарный поиск
Двум студентам нужно напечатать N листов. Принтер студента А печатает один лист за X секунд, а студента В — за Y секунд. За какое...

Бинарный поиск
Уважаемые форумчане, правильно ли я понял алгоритм бинарного поиска? # -*- coding: utf-8 -*- # author: ALEX MARKOV ...

Бинарный поиск
Реализуйте алгоритм бинарного поиска. Входные данные В первой строке входных данных содержатся натуральные числа N и K ...

Бинарный поиск рекурсивно
Здравствуйте мне нужно написать бинарный поиск только в массиве не числа ,а словами и все это приправить рекурсией у меня есть какой...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru