Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708

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

15.01.2020, 18:10. Показов 10498. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, правильно ли я понял алгоритм бинарного поиска?

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
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-
# author: ALEX MARKOV
"""Модуль бинарного поиска заданных целочисленных значений
"""
def binary_search(my_list, item):
    """ Функция бинарного поиска заданного числа в заданной последовательности целых чисел от 0 до n
 
    >>>import search_binary as sb
    >>>n = 1000
    >>>my_list = range(n) # или my_list = [0,1,2,3,4,5,6,7,8,9,10...n]
    >>>item = 77
    >>>sb.binary_search(my_list, item)
    ('Число = 77', 'Кол-во итераций = 9') ,где переменная my_list - любая последовательность положительных целочисленных значений, а переменная item - искомое целое положительное число
    """
    
    low = 0 
    high = len(my_list)-1
    score = 0
    while low <= high:
        mid = int((low + high)/2) # int(...)/2
        guess = my_list[mid]
        if guess == item:
            return "Загаданное число = " + str(mid), "Кол-во итераций = " + str(score)
        if guess > item:
            high = mid - 1
            score += 1
        else:
            low = mid + 1
            score += 1
    return None
 
 
if __name__ == "__main__":
    my_list = range(999999999)
    item = 998
    #print(list(my_list)) # если у Вас есть время можете удалить коммент данной инструкции
    print (binary_search(my_list, item))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2020, 18:10
Ответы с готовыми решениями:

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

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

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

7
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 18:28
Вроде, правильно, если работает. Деление нацело можно так:
Python
1
2
3
4
>>> 3//2
1
>>> 3/2
1.5
Правда, вызывают подозрения строки
Цитата Сообщение от AlexMarkov Посмотреть сообщение
mid - 1
Цитата Сообщение от AlexMarkov Посмотреть сообщение
mid + 1
Добавлено через 2 минуты
Не работает:
Python
1
2
print(binary_search([1,2,3,5,6], 5))
# ('Загаданное число = 3', 'Кол-во итераций = 1')
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
15.01.2020, 18:52  [ТС]
я так понял что mid - 1 и mid - 2 позволяют избежать зацикливания при значениях от 0 до 2.
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Не работает:
В принципе и не должно таким боком работать, так как я хотел использовать данный модуль вот так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import search_binary as sb
import time
 
print("АЛГОРИТМ БИНАРНОГО ПОИСКА!!!\n")
print("Alex Markov\n")
print(sb.binary_search.__doc__)
 
 
while True:
    n = input("Пожалуйста введите количество целочисленных значений от 2 до 999999999:")
    if n == "exit": break    
    if not n.isdigit (): print ("Упс!Это что-то другое!!!"); continue
    n = int(n)  
    if n > 999999999: print ("Это слишком большое значение! Попробуйте еще раз!"); continue
    item = input("Пожалуйста загадайте число в диапазоне от 1" + " до " + str(n)     + ":")
    if item == "exit": break
    if not item.isdigit(): print ("Упс!Это что-то другое!!!!!!"); continue
    item = int(item)
    start = time.clock()
    print(sb.binary_search(range(n), item))
    print(str(time.clock()-start) + " секунд на выполнение итераций")
 
input('Нажми Enter...')
В определении двоичного(бинарного) поиска говорится о поиске в отсортированном двоичном векторе???
Замечание в тему, наверно, надо подумать!

Добавлено через 2 минуты
т.е. поиска элемента в отсортированном массиве (векторе)!!!

Добавлено через 1 минуту
или так, бинарный поиск - это алгоритм; на входе он получает отсортированный
список элементов
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 19:00
Лучший ответ Сообщение было отмечено AlexMarkov как решение

Решение

Цитата Сообщение от AlexMarkov Посмотреть сообщение
В принципе и не должно таким боком работать,
Должно. Во входных данных могут быть "дырки".

Цитата Сообщение от AlexMarkov Посмотреть сообщение
В определении двоичного(бинарного) поиска говорится о поиске в отсортированном
Хм… да:
Двоичный (бинарный) поиск (также известен как метод деления пополам или дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Используется в информатике, вычислительной математике и математическом программировании.
Добавлено через 7 минут
Рассматривай двоичный поиск, как быстрый способ проверить наличие числа в отсортированном массиве.

Наивный способ:
Python
1
2
3
4
5
6
7
8
9
10
11
def search(my_list, item):
    is_found = False
    steps = 0
    for i in my_list:
        if item == i:
            is_found = True
        steps += 1
    print(f'Кол-во итераций = {steps}')
    return is_found
 
print(search([1,2,3,5,6], 5))
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
15.01.2020, 19:13  [ТС]
спасибо за ответРыжий Лис, а то обычно тишина
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Наивный способ:
прикольно! то что надо!
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
15.01.2020, 22:38
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)
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
30.03.2020, 11:20  [ТС]
Реализация алгоритма двоичного(бинарного) поиска на python c использованием библиотеки PyQt5:

- "https://cloud.mail.ru/public/3YdL/Cf4kKHk3E"
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
30.03.2020, 11:26
https://docs.python.org/3/library/bisect.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2020, 11:26
Помогаю со студенческими работами здесь

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

Бинарный поиск
Здравствуйте! Есть алгоритм бинарного поиска, но он ищет только первое вхождение нужного элемента и выводит первый необходимый индекс. А...

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

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

Бинарный и последовательный поиск
Бинарный поиск. Найдите значения N, для которых бинарный поиск в массиве целых чисел размером N становится в 10, 100 и 1000 раз быстрее...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru