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

Содержание:

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.

    

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

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

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

 

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

 

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

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

Наши проекты

ЗАО «Инвестгеосервис»
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Объемно-календарное планирование производства Автоматизация бизнес-проце...

ПАО «АрселорМиттал Кривой Рог»
ПАО «АрселорМиттал Кривой Рог»

Отрасль:
Металлургическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием для Украины

- Кадровый учет
- Расчет зарплаты
- Регламентированная отчетность
- Уч...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Уче...

Апгрейд 1С:Бухгалтерия 8 ПРОФ (USB) до версии 1С:Бухгалтерия 8 КОРП (USB)
ООО «Ява Строй»

Отрасль:
Строительство

Внедренное типовое решение:
1С:Бухгалтерия 8 КОРП (USB)

- Создание чистых конфигураций. Внесение изменений в БД ЗУП и новая расчетна...

Группа компаний АО «Киномакс»
Группа компаний АО «Киномакс»

Отрасль:
Культура, шоу-бизнес

Внедренное типовое решение:
БИТ.Финанс

- Разработка Положения о Казначействе группы компаний
- Разработка Положе...

Автоматизация торгового учета на базе "1С:Управление торговлей"
ООО «ТЕЛЕВЕС РУСС»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Управление торговлей

- Управление складскими запасами;
- Оформление заказов покупателей;
- Пла...

Внедрение системы финансового учета БИТ:Финанс
ООО «Алькор и Ко» (Л’Этуаль)

Отрасль:
Торговля

Внедренное типовое решение:
БИТ.Финанс

- Финансовый учет;
- Поддержка проекта внедрения МСФО;
- Регламентные рабо...

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

Внедренное типовое решение:
1С:Управление холдингом 8

Бухгалтерский учет;
Расчет зарплаты и кадровый учет;...

ООО «ДАФ Тракс Рус» (DAF Trucks Rus)
ООО «ДАФ Тракс Рус» (DAF Trucks Rus)

Отрасль:
Машиностроение

Внедренное типовое решение:
«1С:Управление корпоративными финансами»

- Осуществлена разработка матрицы прав и ролей для финансового подразделени...

Внедрение 1С:Управление торговлей в оптово-розничной компании «Много Плитки»
ООО «Много Плитки»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Управление торговлей

Закупки (снабжение) и управление отношениями с поставщиками:
- Оформление ...

ООО "ОМЗ"
ООО "ОМЗ"

Отрасль:
Металлургическая промышленность, металлообработка

Внедренное типовое решение:
1С:Управление производственным предприятием

Автоматизация бизнес-процессов...

Автоматизация подсистемы учета взаиморасчетов с агентами и интернет-магазинами на базе «1С:Управление холдингом 8»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

– Оформление заказов поставщикам;
– Управление отношениями с поставщика...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение