Алгоритм бинарного поиска в 1С
-

Алгоритм бинарного поиска в 1С

0
3120
16.08.2024 Егор Винников

Содержание:

1.    Основные особенности алгоритмов

2.    Описание алгоритма бинарного поиска

3.    Алгоритм бинарного поиска на встроенном языке 1С

   

Написание собственных алгоритмов и понимание их работы – один из важнейших навыков, который должен быть у любого программиста. Хороший навык построения алгоритмов позволит программисту быстро решать любые задачи и сделает его гораздо эффективнее. За последние 30 лет произошёл очень сильный скачок в развитии технологий и за это время было написано большое количество различных алгоритмов. Но для начинающего программиста может быть достаточно сложно вникнуть в работу большого и комплексного алгоритма. Цель данной статьи, взять один из самых популярных алгоритмов и разобрать каждую его строчку. Но прежде чем переходить к алгоритму бинарного поиска, следует разъяснить что такое алгоритмы.  

 

1.    Основные особенности алгоритмов

 

Алгоритм – набор инструкций для выполнения некоторой задачи и получения какого-то результата в итоге. С алгоритмами можно встретится во всех сферах жизни. Например, разберём какие действия нужно сделать, чтобы включить компьютер:

1.    Подойти к столу с компьютером;

2.    Сесть на стул;

3.    Подвинутся к столу;

4.    Нажать на кнопку включения компьютера;

5.    Если компьютер не подключён к электричеству, вставляем провод от блока питания в розетку;

6.    Ещё раз нажимаем на кнопку включения компьютера.

 

Список, который описан выше и есть алгоритм. При помощи этих действий можно получить конечный результат в виде того, что компьютер включится. Конечно, то, как описан этот алгоритм, не соответствует реальности, так как в реальности алгоритм нужно прописать гораздо детальнее и продумать все сценарии, которые могут возникнуть при его работе. Теперь, после того как читатель знает что такое алгоритм, можно переходить к главной теме этой статьи.


2. Описание алгоритма бинарного поиска


Как можно понять из названия, алгоритм бинарного поиска используется при поиске какого-то значения. Предположим, что нужно в массиве, который заполнен числами от 0 до 100 вам нужно получить число 64. Конечно можно пройтись по каждому числу от 0 до 99, но для этого потребуется 99 шагов. Может показаться что это не очень много, но тогда можно привести ситуацию в которой массив заполнен до миллионов или сотен миллионов чисел и вам нужно получить какое-то число из середины этого массива. В такой ситуации проходить по каждому числу уже не кажется такой хорошей идеей. Именно для таких ситуаций и существует алгоритм бинарного поиска.


Бинарный поиск – алгоритм, который на входе получает отсортированный список элементов (например массив). Если элемент который нужно найти, есть в списке, бинарный поиск вернёт позицию(индекс элемента если говорить о массивах), в которой он был найден. Иначе бинарный поиск вернёт нам сообщение о том, что этого элемента нет в массиве.

 

В отличие от прохождения каждый раз по всем элементам массива заполненного числами от 0 до 100, с бинарным поиском мы каждый раз загадываем число в середине диапазона (то есть во время первой итерации мы получим число 50, так изначально диапазон поиска от 0 до 100) и исключаем половину оставшихся чисел.


Пример работы бинарного поиска.png

Пример работы бинарного поиска  

   

3. Алгоритм бинарного поиска на встроенном языке 1С


Сейчас будет приведён и подробно разобран алгоритм бинарного поиска, написанный на встроенном языке 1С:Предприятие. Входные данные будут: массив который заполнен числами от 0 до 100 и загаданное число: 43

 

Функция БинарныйПоиск(Массив, ЗагаданноеЧисло)

 

    Меньшее = 0;

    Большее = Массив.Количество()-1;

 

    Пока Меньшее <= Большее Цикл

        Среднее = (Меньшее + Большее) / 2;

        ПредположительноеЧисло = Массив[Среднее];

        Если ПредположительноеЧисло = ЗагаданноеЧисло Тогда

            Возврат Среднее;

        ИначеЕсли ПредположительноеЧисло > ЗагаданноеЧисло Тогда

            Большее = Среднее - 1;

        Иначе

            Меньшее = Среднее + 1;                                   

        КонецЕсли;

       

    КонецЦикла;

   

    Сообщение = Новый СообщениеПользователю;

    Сообщение.Текст = "Число:" + ЗагаданноеЧисло + " " + "нет в списке";

    Сообщение.Сообщить();

 

КонецФункции       

 

Листинг алгоритма бинарного поиска на языке 1С


Давайте разберём каждую строку которая есть.

«Меньшее = 0» - эта строка используется для обозначения границ списка который будет передаваться в наш алгоритм. При первой итерации эта переменная будет равна первому элементу списка (в данном случае 0)

 

«Большее = Массив.Количество()-1» - эта строка также используется для обозначения списка, но она используется для обозначения последнего элемента списка (в данном случае это 100)

 

«Пока Меньшее <= Большее Цикл» - эта строка используется для того, чтобы алгоритм работал, пока не останется один элемент списка.

 

«Среднее = (Меньшее + Большее) / 2» - эта строка используется для того, чтобы найти средний элемент списка. Например если передаётся список в котором 100 элементов, средний элемент будет 50.

 

«ПредположительноеЧисло = Массив[Среднее]» - при помощи этой строки, алгоритм создаёт предположительное число, при помощи которого, он будет искать число, которое было загадано.

«Если ПредположительноеЧисло = ЗагаданноеЧисло Тогда

Возврат Среднее» - с этой строки начинается условие, которое будет искать загаданное число. В этом случае, если предположительное число равно числу которое мы загадали, система вернёт его.

 

«ИначеЕсли ПредположительноеЧисло > ЗагаданноеЧисло Тогда

Большее = Среднее – 1» - строка с этим условием, подразумевает, что если предположительное число будет больше чем загаданное число, переменная которая хранит в себе наибольший элемент, станет хранить Среднее число массива – 1. То есть в первой итерации, система перейдёт по этому условию, среднее число будет 50 и в итоге получается, что переменная «Больше» будет хранить в себе 49. Таким образом мы сокращаем интервал поиска загаданного числа.

 

«Иначе

Меньшее = Среднее + 1» - эта строка будет отрабатывать в случае, если предположительное число меньше загаданного числа. Смысл этой строки в том, что если предположительное число меньше загаданного, переменная «Меньше», которая хранит в себе первый элемент списка, после этой строки станет хранить значение среднего числа списка + 1. Это делается для того, чтобы сузить интервал в котором происходит поиск числа. То есть во второй итерации (в случае когда на вход даётся список заполненный элементами от 0 до 100), система перейдёт по этому условию. Среднее число будет 24( Меньшее = 0, Большее = 49 (0+49)/2 = 24,5). В итоге получается, что теперь система будет искать загаданное число в диапазоне между 24 и 49.

    

«Сообщение = Новый СообщениеПользователю

Сообщение.Текст = "Число:" + ЗагаданноеЧисло + " " + "нет в списке"

Сообщение.Сообщить()» - эти строки используются в том случае, если переменная «Меньшее» становится больше переменной «Большее» и мы выходим из цикла «Пока». Строки эти нужны для того, чтобы уведомить пользователя, что в передаваемом списке нет элемента который он ищет.

 

Подводя итоги, можно сказать, что была разобрана каждая строка алгоритма бинарного поиска. Теперь у начинающего программиста есть понимание его работы, но теории недостаточно и автор настоятельно рекомендует повторить этот пример у себя и посмотреть в отладчике, как будет работать этот алгоритм. Если у читателя возникнет желание подробнее разобраться в алгоритмах и изучить новые, тогда можно обратится к книге "Грокаем алгоритмы" за авторством Адитьи Бхаргавы. В этой книге доступно объясняется что такое О-большое, рекурсия и другие термины, которые нужно знать программисту чтобы разбираться в алгоритмах.

 

    Специалист компании "Кодерлайн"

 Егор Винников

Обсудить статью в Telegram Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.