Кружок 1С #2. Двоичный поиск (бинарный, дихотомия) в 1С.
Разберем кейс поиска в упорядоченном массиве по алгоритму двоичного поиска в упорядоченном массиве, в нашем случае файле.
Статья на нашем сайте:
Условие задачи
Нужна возможность осуществлять анализ введенного пароля на то, что он скомпрометирован путем анализа файлов часто используемых паролей.
Итого: у нас есть введенный пользователем пароль, и нам необходимо путем перебора нескольких макетов с часто используемыми паролями, в которых на каждой строке введен пароль в нижнем регистре определить совпадает ли введенный пароль с тем, который ввел пользователь с теми паролями, которые есть в файле. Если он найден, надо написать, что пароль скомпрометирован. Обращаю внимание, что мы опускаем то, что регистр может быть другим. Будем введенную строку пользователя переводить в нижний регистр и проверять только маленькие буквы. Это упрощает задачу.
Первый вариант решения “в лоб“
В самом начале, я попытался использовать поиск “в лоб“. Т.е. берем по очереди макеты с паролями и строчка, за строчкой сравниваем с тем, что ввел пользователь. Нашли - отлично, пароль скомпрометирован, если не нашли, то так и напишем.
Проблема оказалось в том, что для ~88000 часто используемых паролей это работает ОЧЕНЬ медленно. На моем компьютере это отрабатывало около 18 секунд. Пользователь не захочет ждать такое время. Значит нам нужен другой алгоритм.
Второй вариант решения: двоичный (бинарный) поиск или дихотомия
Дальше, я начал думать, как же можно было бы улучшить алгоритм. И вспомнил про двоичный поиск. Начнем с определения из вики.
Двоичный (бинарный) поиск (также известен как метод деления пополам или дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Используется в информатике, вычислительной математике и математическом программировании.
Важно, что все слова наших паролей упорядочены по алфавиту. Схематично алгоритм выглядит так:
Схема двоичного поиска
Предположим наше слово начинается на букву F.
1. В самом начале левой точкой мы берем букву A, правой букву Z. Центральная точка у нас M.
2. M нужная нам точка? Если бы это была искомая буква, то мы ее нашли и должны закончить, но нет, это не наша точка, продолжаем алгоритм.
3. В каком отрезке может находится нужная нам точка F в AM или MZ?
4. Наша искомая точка находится в AM, тогда в качестве левой точки выбираем А, в качестве правой, выбираем M и продолжаем, переходя на шаг 1.
Вариантов окончания работы алгоритма всего два: либо мы наткнемся на эту точку на очередном шаге и нужный элемент найден, либо у нас не останется больше точек и это будет означать, что мы ничего не нашли и элемент не найден.
5 views
1027
280
2 months ago 00:17:03 1
Тайное общество Ч. 17 (кратко) новая статья том 1, с. 18-33
2 months ago 00:56:01 1
Кружок 1С #9 Лучший модульный API для 1С
3 months ago 00:24:51 1
Сексуальная сфера и ее искажения в современном обществе | Белый Орион.
3 months ago 00:27:02 1
100% Заселение1970 х! Ответ Матрицы и канализация Нью Йорка!
4 months ago 01:28:51 1
Война 1812. Падение Тартарии. Полная версия фильма
5 months ago 00:13:52 1
Картофельные БЕЛЯШИ с МЯСОМ, цыганка готовит.
5 months ago 03:06:25 1
История русской национальной мысли. Часть 1. С древнейших времен до Николая I
6 months ago 00:19:26 1
ПОРТРЕТНОЕ СЕРЕБРО В КОШЕЛЬКЕ 18 ВЕКА ☾☼ Нашли ценные монеты на панских землях
6 months ago 00:08:17 1
МУКА, ВОДА и любая НАЧИНКА! Это ВОСХИТИТЕЛЬНО!!! Балкарские ХЫЧИНЫ❤️
8 months ago 00:37:48 1
Разрушение института семьи в современном обществе
8 months ago 00:19:51 1
Школа фашизма? // Злоба Дня
9 months ago 00:17:52 1
Кружок 1С #7 Как разработчику 1С провести свободное время с пользой? “Турнир 1С“
9 months ago 00:30:07 13
Какой идеологии придерживается элита общества на постсоветском пространстве?
9 months ago 00:01:48 1
Обязанности ПрофСоюзов. М.С.Горбачёв 25 февраля 1986 г.
9 months ago 00:07:45 1
Человека воспитывали со школы на ложных понятиях, сделать из него идиота. Евгений Фёдоров
10 months ago 01:17:36 1
Mafia: Definitive Edition. Часть - ❻ (Здесь - С днем рождения!, везет же…, сливки общества)
10 months ago 00:24:16 1
Почему Аргентину ждет смерть? Отвечает Рафаэль Абдулов // Fundamentum #38
11 months ago 00:47:17 5
Кружок 1С #8 Тестирование 1С, с помощью “vanessa-automation“
11 months ago 01:22:40 1
Как организовать складской учет в компании?
11 months ago 01:03:02 22
«Рыночное общество воспитывает коменданта Освенцима». Илья Будрайтскис о том, куда движется Россия
11 months ago 00:51:03 1
Кружок 1С #6 Асинхронность и многопоточность. О чем умалчивает ИТС