16.08.2024 Егор Винников 2743
Алгоритм бинарного поиска в 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С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

ООО ХДМ Рус
ООО ХДМ Рус

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

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

Управление цепочками поставок Оптовая торговля ...

ООО "АСК ИНЖИНИРИНГ"
ООО "АСК ИНЖИНИРИНГ"

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

Внедренное типовое решение:
1С:Документооборот ПРОФ

Делопроизводство
Учет и хранение документов
Ведение номенклатуры дел
...

Фармацевтическое предприятие «Оболенское»
АО «Фармацевтическое предприятие «Оболенское»

Отрасль:
Фармацевтическая промышленность

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

- Адаптации блоков/подсистем планирования продаж, закупок и казначейства. ...

Фирма 1С
Фирма 1С

Отрасль:

Внедренное типовое решение:
1С:Документооборот

- Подготовка функциональной модели прикладного решения «1С:Документооборот...

ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)
ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)

Отрасль:
Оптовая торговля транспортными средствами и оборудованием

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

- Финансы, управленческий учет, мониторинг показателей
- Бухгалтерский уче...

ООО “РТИТС”
ООО “РТИТС”

Отрасль:
Транспортные системы

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

Блок регламентированного кадрового учета и расчета заработной платы в 1С:ERP;...

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО "ДЕКОР"
ООО «ДЕКОР»

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

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

Управление персоналом и кадровый учет (HRM):
- Кадровый учет
- Расчет зарпл...

ООО «ТейблТок»
ООО «ТейблТок»

Отрасль:
Общественное питание и рестораны

Внедренное типовое решение:
1С:ТОИР Управление ремонтами и обслуживанием оборудования

Мониторинг и анализ ключевых показателей деятельности предприятия Управле...

ООО ХДМ Рус
ООО ХДМ Рус

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

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

Бухгалтерский учет Банк и касса Расчеты с контрагентами Торговые операции ...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

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

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

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

АО "Нижегородский водоканал"
АО "Нижегородский водоканал"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

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

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

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

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

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