Полный перебор. Методы оптимизации

Уже в третьем классе учащиеся сталкиваются с разбором всех случаев при решении упражнений. Используя перебор при решении задач, приходится наблюдать, сопоставлять факты и на основании частных выводов делать те или иные общие заключения.

Сущность метода перебора заключается в том, что необходимо:

а) рассматривать все возможные случаи;

б) найти те, которые удовлетворяют условию данной задачи;

в) показать, что других решений нет.

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

Имеются 9 палочек разной длины от 1 см до 9 см. Квадраты, с какими сторонами и сколькими способами можно составить из этих палочек? Способы составления квадрата считаются различ­ными, если использованы разные палочки и не обязательно все.

Решение.

Все стороны квадрата равны. Поэтому для составления данной фигуры можно для каждой стороны использовать либо одну палочку, либо несколько, которые в сумме дали бы туже длину. Таких соотношений должно быть 4. Следовательно, нельзя составить квадраты, длины сторон которых равны 1 см, 2 см, 3 см, 4 см, 5 см и 6 см. (5 = 1 + 4 = 2 + 3 и всё, 6 = 1 + 5 = 2 + 4. Получаем только 3 отрезка.)

Можно составить квадрат, длина стороны которого 7 см, 8 см.

7 = 1 + 6 = 2 + 5 = 3 + 4, 8 = 7 + 1 = 6 + 2 = 5 + 3. Это можно сделать только одним способом.

9 = 8 + 1 = 7 + 2 = 6 + 3 = 5 + 4. Следовательно, квадрат со стороной 9 см можно составить 5 различными способами.

Аналогичные рассуждения будут и для квадрата со стороной 10 см.

10 = 1 + 9 = 2 + 8 = 3 + 7 = 4 + 6. Квадратов со стороной 10 см из данного набора можно составить 1 (палочки 10 см нет в наборе).

Аналогично 11 = 2 + 9 = 3 + 8 = 4 + 7 = 5 + 6. Квадратов со стороной 11 см можно составить 1.

Так как сумма всех чисел от 1 до 9 равна 45. 45: 4 = 11 (ост. 1), то вести речь о существовании квадратов с большими сторонами не имеет смысла.

Ответ: 7 см; 8 см, 9 см; 10 см; 11 см. 9 квадратов.

Пишут одну за другой 4 последовательные цифры, затем первые две меняют местами. Полученное таким образом четырехзначное число является квадратом натурального числа. Найдите его.

Решение.

В задаче фигурируют 3 условия:

1) четырёхзначное число состоит из последовательных цифр;

2) первая и вторая цифры меняются местами;

3) полученное таким образом четырехзначное число является квадратом натурального числа.

Первым двум условиям удовлетворяют числа 2134, 3245, 4356, 5467, 6578, 7689.

Число 5467 отбрасываем сразу. (Квадрат любого числа не оканчивается на 7).

Третьему условию из перечисленных чисел удовлетворяет только число 4356 = 66 2 .

Ответ: 4356.

Двенадцать человек несут 12 хлебов. Каждый мужчина несет по 2 хлеба, женщина – по половине хлеба, а ребенок – по четверти хлеба. Причем в переносе участвуют все 12 человек. Сколько было мужчин, сколько женщин и сколько детей?

Вклад одного мужчины в перенос хлеба равносилен вкладу 4 женщин либо 8 детей. Вклад одной женщины в перенос хлеба равносилен вкладу 2 детей.

Очевидно, что количество мужчин, от 1 до 6.

Число 6 не включается, так как 12: 2 = 6 и тогда женщины и дети отсутствуют.

Возьмем среднее из чисел этого промежутка. Пусть количество мужчин равно 4. Тогда они переносят 4 · 2 = 8 хлебов. Остаётся 8 женщин и детей, которые несут ещё 4 хлеба. Здесь потребуется либо только 8 женщин (но в группе были и дети), либо 7 женщин и 2 детей, либо 6 женщин и 4 детей, либо 5 женщин и 6 детей, и т.д. либо 0 женщин и 16 детей. Эти результаты не соответствуют условию – общее количество женщин и детей 8.

Следовательно, количество мужчин больше 4. (Меньше быть не может, так как тогда общее количество людей необходимых для переноса хлеба будет больше 12). Сделаем проверку, когда количество мужчин 5. Тогда они переносят 5 · 2 = 10 хлебов. Остаётся 7 женщин и детей, которые несут ещё 2 хлеба. Здесь потребуется либо только 4 женщины (но в группе были и дети), либо 3 женщины и 2 детей, либо 2 женщины и 4 детей, либо 1 женщина и 6 детей. Только последний результат соответствуют условию – общее количество женщин и детей 7.

Ответ: 5 мужчин, 1 женщина, 6 детей.

Найти сумму площадей всех различных прямоугольников, которые можно составить из 9 квадратов (не обязательно всех), если сторона каждого квадрата равна 1см.

Решение.

Из 9 одинаковых квадратов можно составить прямоугольники следующих размеров
1 · 1; 1 · 2; 1 · 3; …; 1 · 9; 2 · 2; 2 · 3; 2 · 4; 3 · 3.

Сумма площадей всех прямоугольников с данными измерениями равна 72 см 2 .

Ответ: 72 см 2 .

За 500 рублей куплено несколько пудов сахару. Если бы на те же деньги куплено было пятью пудами больше, то каждый пуд обошёлся бы пятью рублями дешевле. Сколько куплено пудов?

Решение.

В задаче присутствуют 2 условия:

1) сахар стоит 500 рублей;

2) если бы на те же деньги куплено было пятью пудами больше, то каждый пуд обошёлся бы пятью рублями дешевле.

По условию задачи количество купленных пудов и стоимость 1 пуда сахара – числа натуральные. Произведение количества пудов на стоимость 1 пуда равно 500 рублей. Следовательно, эти величины являются делителями числа 500.

Делители числа 500: 1, 2, 4, 5, 10, 20, 25, 100, 125, 250, 500.

Числа 1, 2, 4, 5, 125, 250, 500 сразу отбросим, так как стоимость больше 5 и тогда количество меньше 100. Осталось проверить числа 10, 20, 25.

А) Пусть количество пудов 10, тогда стоимость сахара 50.

Проверим выполнение 2 условия: (10 + 5) · (50 – 5) ≠ 500.

Б) Пусть количество пудов 20, тогда стоимость сахара 25.

Проверим выполнение 2 условия: (20 + 5) · (25 – 5) = 500.

Проверкой установим, что условию задачи не соответствует и число 25.

Ответ: 20 пудов.

Задача 6.

Верно ли следующее утверждение: если число р простое и р – больше 100, но меньше 200, то число 210 – р тоже является простым числом.

Решение.

Решение задачи простое. Используя таблицу простых чисел можно выписать простые числа из промежутка от 100 до 200. Их 19. Найти числа, которые дополняют их до 210. Показать, что они тоже есть в таблице.

blog.сайт, при полном или частичном копировании материала ссылка на первоисточник обязательна.

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

Рассмотрим пару примеров применения метода перебора в решении различных задач.

Перебор последовательности

Допустим, нам встретилась последовательность цифр 141526418, и мы знаем, что в ней зашифровано латинскими буквами некое слово. Какой самый простой способ зашифровать слово? Конечно же, использовать шифр замены ! Число цифр нечётное, значит хотя бы одна буква закодирована всего одной цифрой. Но как отделить буквы первой десятки от последующих, кодируемых двумя цифрами? 14 - это AD или N? Вот тут-то нам и пригодится метод перебора. Переберём все комбинации из одной-двух цифр из диапазона .

В последовательности 141526418 можно выделить следующие удовлетворяющие нашим условиям комбинации: 1,2,4,5,6,8,14,15,18,26. Эти числа соответствуют буквам A,B,D,E,F,H,N,O,R,Z. Комбинации 41, 52 и 64 нам не подходят, так как в латинице всего 26 букв.

Перебирать будем так: сначала возьмём самую развёрнутую последовательность, где все буквы из первого десятка, а затем будем по очереди увеличивать используемые числа, то есть заменять последовательности 1-4 на 14, 1-5 на 15, 1-8 на 18, 2-6 на 26, перебирая все возможные комбинации.

    1-4-1-5-2-6-4-1-8 = ADAEBFDAH

    1-4-1-5-2-6-4-18 = ADAEBFDR

    1-4-1-5-26-4-1-8 = ADAEZDAH

    1-4-1-5-26-4-18 = ADAEZDR

    1-4-15-2-6-4-1-8 = ADOBFDAH

    1-4-15-2-6-4-18 = ADOBFDR

    1-4-15-26-4-1-8 = ADOZDAH

    1-4-15-26-4-18 = ADOZDR

    14-1-5-2-6-4-1-8 = NAEBFDAH

    14-1-5-2-6-4-18 = NAEBFDR

    14-1-5-26-4-1-8 = NAEZDAH

    14-1-5-26-4-18 = NAEZDR

    14-15-2-6-4-1-8 = NOBFDAH

    14-15-2-6-4-18 = NOBFDR

    14-15-26-4-1-8 = NOZDAH

    14-15-26-4-18 = NOZDR

Итого получили 16 вариантов. Единственное читаемое слово NOZDR (кому читаемое, а кому и нет ), получилось в самом конце. Оно и будет ответом. Вот если бы в самом начале была подсказка, что из последовательности 141526418 должно получиться 5 букв, то тогда задача решится однозначно. И перебор будет не нужен, потому что разбить на 5 букв последовательность 141526418 можно только одним единственным способом. Но такой подсказки не было, и метод перебора пригодился.

Перебор решений при недостатке условий

Иногда в математике встречаются такие задачи, которые кажется решить «в лоб» невозможно. Подобные задачки часто дают решать на олимпиадах и конкурсах, а значит они подойдут и нам для квестов. Например, вот такая задачка.

Учитель на уроке математики задал ученикам такую задачу: «У матери три дочери. Произведение возрастов дочерей = 40, сумма возрастов равна числу учеников в классе. Каков возраст каждой из дочерей?» Ну, ученики по-быстрому посчитали, сколько их всего в классе, и стали решать задачу. Решали-решали… Не решается. Попросили у учителя подсказку. Учитель подумал и говорит: «А, точно! У младшенькой голубенькие глазки!» . Ученики обрадовались, и решили задачу. А теперь вопрос вам: сколько же лет каждой из дочерей?

Если решать задачу в лоб (AxBxC=40, A+B+C=D, голубенькие глазки), то сразу наталкиваешься на кучу неизвестных и недостаток условий. 4 неизвестных, два уравнения и ещё голубенькие глазки!!! Как известно, сколько неизвестных, столько должно быть и независимых условий. У нас в задаче два нормальных условия и одно непонятное. Как же её решать?

А методом перебора! Во-первых, такие задачи по умолчанию решаются целочисленно. Найдём все комбинации из трёх целых чисел, произведение которых даёт 40. Заодно посчитаем сумму этих чисел. Оказывается, таких комбинаций не так уж и много - всего шесть.

    1x1x40=40, 1+1+40=42

    1x2x20=40, 1+2+20=23

    1x4x10=40, 1+4+10=15

    1x5x8=40, 1+5+8=14

    2x2x10=40, 2+2+10=14

    2x4x5=40, 2+4+5=11

Если бы учеников в классе было 42, 23, 15 или 11, то они бы сразу решили задачу. Но у них возникло затруднение - их было 14, и они никак не могли выбрать, какой же из вариантов 1-5-8 или 2-2-10 подходит. Но когда учитель сказал про голубые глазки, им это помогло определиться. Голубые глазки были у младшенькой, то есть была самая младшая дочь, а в варианте 2-2-10 младшеньких две. Значит, нам подходит только четвёртый вариант 1-5-8.

Казалось бы, практически нерешаемая задача, но метод перебора позволил её очень быстро решить. Поэтому не надо бояться решать задачи перебором. Довольно часто число возможных вариантов не так велико, как кажется вначале.

В данном разделе мы рассмотрим некоторые задачи, связанные с проблемой поиска информации. Это огромный класс задач, достаточно подробно описанный в классической литературе по программированию (см., например, книги Н.Вирта, Д. Кнута и другие).

Общий смысл задач поиска сводится к следующему: из данной информации, хранящейся в памяти ЭВМ, выбрать нужные сведения, удовлетворяющие определенным условиям (критериям).

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

Полный перебор является «лобовым» способом поиска и, очевидно, не всегда самым лучшим.

Рассмотрим пример. В одномерном массиве X заданы координаты п точек, лежащих на вещественной числовой оси. Точки пронумерованы. Их номера соответствуют последовательности в массиве X. Определить номер первой точки, наиболее удаленной от начала координат.

Легко понять, что это знакомая нам задача определения номера наибольшего по модулю элемента массива X. Она решается путем полного перебора следующим образом:

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

А теперь такая задача: исходные данные - те же, что и в предыдущей; требуется определить пару точек, расстояние между которыми наибольшее.

Применяя метод перебора, эту задачу можно решать так: перебрать все пары точек из Ладанных и определить номера тех, расстояние между которыми наибольшее (наибольший модуль разности координат). Такой полный перебор реализуется через два вложенных цикла:

Очевидно, что такое решение задачи нерационально. Здесь каждая пара точек будет просматриваться дважды, например при i = 1, j = 2 и i = 2, j= 1. Для случая п = 100 циклы повторят выполнение 100 х 100 = 10000 раз.

Выполнение программы ускорится, если исключить повторения. Исключить также следует и случай совпадения значений i и j. Тогда число повторений цикла будет равно

При n = 100 получается 4950.

Для исключения повторений нужно в предыдущей программе изменить начало внутреннего цикла с 1 на i +1. Программа примет вид:

Рассмотренный вариант алгоритма назовем перебором без повторений.

Замечание. Конечно, эту задачу можно было решить и другим способом, но в данном случае нас интересовал именно алгоритм, связанный с перебором. В случае точек, расположенных не на прямой, а на плоскости или в пространстве, поиск альтернативы такому алгоритму становится весьма проблематичным.

В следующей задаче требуется выбрать все тройки чисел без повторений, сумма которых равна десяти, из массива X.

В этом случае алгоритм будет строиться из трех вложенных циклов. Внутренние циклы имеют переменную длину.

For I:=l To N Do

For J:=I+1 To N Do

For K:=J+1 To N Do

If X[I]+X[J]+X[K]=10

Then WriteLn(X[I],X[J],X[K]);

А теперь представьте, что из массива Х требуется выбрать все группы чисел, сумма которых равна десяти. В группах может быть от 1 до п чисел. В этом случае количество вариантов перебора резко возрастает, а сам алгоритм становится нетривиальным.

Казалось бы, ну и что? Машина работает быстро! И все же посчитаем. Число различных групп из п объектов (включая пустую) составляет 2n. При п = 100 это будет 2100 ≈ 1030. Компьютер, работающий со скоростью миллиард операций в секунду, будет осуществлять такой перебор приблизительно 10 лет. Даже исключение перестановочных повторений не сделает такой переборный алгоритм практически осуществимым.

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

Перебор с возвратом. Рассмотрим алгоритм перебора с возвратом на примере задачи о прохождении лабиринта (рис. 52).

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

Для получения программы решения этой задачи нужно решить две проблемы:

Как организовать данные;

Как построить алгоритм.

Информацию о форме лабиринта будем хранить в квадратной матрице LAB символьного типа размером N x N, где N - нечетное число (чтобы была центральная точка). На профиль лабиринта накладывается сетка так, что в каждой ее ячейке находится либо стена, либо проход.

Матрица отражает заполнение сетки: элементы, соответствующие проходу, равны пробелу, а стене - какому-нибудь символу (например, букве М)

Путь движения по лабиринту будет отмечаться символами +.

Например, приведенный выше рисунок (в середине) соответствует следующему заполнению матрицы LAB:

Исходные данные - профиль лабиринта (исходная матрица LAB без крестиков); результат - все возможные траектории выхода из центральной точки лабиринта (для каждого пути выводится матрица LAB с траекторией, отмеченной крестиками).

Алгоритм перебора с возвратом еще называют методом проб.

Суть его в следующем:

1. Из каждой очередной точки траектории просматриваются возможные направления движения в одной и той же последовательности; договоримся, что просмотр будет происходить каждый раз против часовой стрелки - справа-сверху-слева-снизу; шаг производится в первую же обнаруженную свободную соседнюю клетку; клетка, в которую сделан шаг, отмечается крестиком.

3. Если очередная клетка, в которую сделан шаг, оказалась на краю лабиринта (на выходе), то на печать выводится найденный путь.

Программу будем строить методом последовательной детализации. Первый этап детализации:

Процедура GO пытается сделать шаг в клетку с координатами х, у. Если эта клетка оказывается на выходе из лабиринта, то пройденный путь выводится на печать. Если нет, то в соответствии с установленной выше последовательностью делается шаг в соседнюю клетку. Если клетка тупиковая, то выполняется шаг назад. Из сказанного выше следует, что процедура носит рекурсивный характер.

Запишем сначала общую схему процедуры без детализации:

Для вывода найденных траекторий составляется процедура PRINTLAB.

В окончательном виде программа будет выглядеть так:

Еще один пример красивой программы с использованием рекурсивного определения процедуры (вспомните ханойскую башню!).

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

Замечание. Из-за использования массива LAB в качестве параметра-значения в процедуре GO могут возникнуть проблемы с памятью при реализации программы на ЭВМ. В таком случае можно перейти к глобальной передаче массива.

3) Выбор математического аппарата. Математический аппарат, применяемый при построении модели, зависит от типа модели. Так для алгоритмизации расчетных моделей используются аналитические формулы любой сложности, системы линейных или дифференциальных уравнений (законы Кирхгофа, метод узловых токов и контурных напряжений).

Для алгоритмизации прогностических моделей используются известные алгоритмы расчетных моделей, с выделением исходных данных и прогнозируемых параметров системы.

Для математического описания оптимизационных моделей применяются специальные математические методы - методы оптимизации.

3. Третий этап - реализация построенного алгоритма модели на ЭВМ.

4. Исследование результатов численного моделирования, оценка их адекватности, и общей пригодности модели для использования.

5. Интерпретация результатов моделирования и принятие решения об использовании математической модели или необходимости ее развития. Здесь определяется жизненный цикл модели и необходимость актуализаций модели, то есть изменения ее параметров в связи c изменением условия функционирования.

Методы оптимизации

Люди, приступая к осуществлению своих мероприятий, оценивают над их последствия и принимают решения, выбирая тем или другим образом зависящие от них параметры - способы организации мероприятий и процессов. В теории принятия решений используются оптимизационные модели и решаются задачи оптимизации.

Цель оптимизации - улучшение некоторого показателя моделируемой системы или процесса путем подбора условий протекания процесса или выбора некоторых параметров системы.

За критерий оптимальности принимается некоторая функция F(x) , называемая целевой функцией. Целевая функция аналитически выражает зависимость оптимизируемого показателя от некоторых параметров x, значения которых можно изменять, называемых управляемыми параметрами

хi , i = 1,2,...,n.

Управляемые параметры xi являются независимыми друг от друга и в процессе оптимизации могут изменяться в известных пределах (допустимой области) Dx . Аналитически область допустимых значений может задаваться аналитически в виде набора функций

Ψ k (x 1 ,...,x n )= 0

В общем виде математическую задачу оптимизации можно сформулировать следующим образом:

Минимизировать (максимизировать) целевую функцию с учетом ограничений на управляемые переменные.

Под минимизацией (максимизацией) функции n переменных F(x)=F(x1 , ... ,xn ) на заданном множестве Dx понимается определение глобальног минимума (максимума) этой функции на заданном множестве Dx .

Допустимая область изменения управляемых параметров не всегда выпукла и может быть неодносвязанной. Часто невозможно аналитическое решение системы нелинейных ограничений, и аналитическое нахождение точки экстремума сложной нелинейной целевой функций.

Максимизация целевой функции (F(x) -> max) эквивалента минимизации противоположной величины (−F(x) -> min), поэтому можно рассматривать только задачи минимизации.

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

Численные методы решения задач одномерной оптимизации

Задачи одномерной минимизации представляют собой простейшую математическую модель оптимизации, в которой целевая функция зависит от одной переменной, а допустимым множеством является отрезок вещественной оси:

F(x) -> min , x принадлежит .

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

Для решения задачи минимизации функции F(x) на отрезке на практике, как правило, применяют приближенные методы. Они позволяют найти решения этой задачи с необходимой точностью в результате определения конечного числа значений функции F(x) и ее производных в некоторых точках отрезка . Методы, использующие только значения функции и не требующие вычисления ее производных, называются прямыми методами минимизации.

Большим достоинством прямых методов является то, что от целевой функции не требуется дифференцируемости и, более того, она может быть не задана в аналитическом виде. Единственное, на чем основаны алгоритмы прямых методов минимизации, это возможность определения значений F(x) в заданных точках.

Самым слабым требованием на функцию F(x), позволяющим использовать эти методы, является ее унимодальность (наличие одного минимума в области допустимых значений). Поэтому далее будем считать функцию F(x) унимодальной на отрезке .

Метод перебора

Метод перебора или равномерного поиска является простейшим из прямых методов минимизации и состоит в следующем.

Разобьем отрезок на n равных частей точками деления:

xi =A+i·(B − A)/n, i=0,...n

Вычислив значения F(x) в точках xi , путем сравнения найдем точку xm , где m - это число от 0 до n, такую, что

F(xm ) = min F(xi ) для всех i от 0 до n.

Погрешность определения точки минимума xm функции F(x) методом перебора не превосходит величины ε = (B − A)/n.

Метод дихотомии

Метод применяется для нахождения экстремума-максимума или экстре- мума-минимума нелинейных одномерных унимодальных целевых функций.

Суть метода в следующем. Пусть целевая функция F(х) задана на интервале A≤ x ≤ B. Отрезок на каждом этапе делится пополам. За первые две поиско-

чения целевой функции F(x) в точках x1 , x2 уточняется направление поиска. Если отыскивается экстремум-минимум и F(х1 ) < F(х2 ), то смещается правая граница первоначального интервала неопределенности , т.е. полагается В = x2 , если F(х1 ) > F(x2 ) , то смещается левая граница А = x1 . Если новый интервал неопределенности [В−А] больше заданной погрешности решения ε, то де-

ление пополам продолжается. Если B−A ≤ ε, то решение получено x* =A + 2 B , F(x) = F(x*).

Метод Фибоначчи

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

Nn =Nn-1 +Nn-2 , при N1 =N2 =1.

Первоначальный интервал неопределенности [В−А] принимается пропорциональным некоторому числу Фибоначчи Fn , определенному в зависимости

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

Энциклопедичный YouTube

    1 / 5

    ✪ Перебор. Жадные алгоритмы: Полный перебор с использованием циклов. Центр онлайн-обучения «Фоксфорд»

    ✪ #82. Арифметическая прогрессия, делимость и полный перебор вариантов! Теория чисел на ЕГЭ

    ✪ Алгоритмы C++ Перебор (часть 1)

    ✪ #84. Задача про два взвода солдат! Строгое и понятное решение. ЕГЭ по математике (профиль)

    ✪ Перебор. Жадные алгоритмы: Задача о размене монет. Центр онлайн-обучения «Фоксфорд»

    Субтитры

Метод исчерпывания

Терминология

В английском языке рассматриваемый в данной статье термин «brute-force » обычно относится к классу хакерских атак . При этом более общее понятие, математический метод исчерпывания всевозможных вариантов для нахождения решения задачи, соответствует термину «Proof by exhaustion ».

Описание

«Метод исчерпывания» включает в себя целый класс различных методов. Обычно постановка задачи подразумевает рассмотрение конечного числа состояний данной логической системы с целью выявления истинности логического утверждения посредством независимого анализа каждого состояния . Методика доказательства утверждения состоит из двух частей:

  1. Доказательство возможности исчерпания всех состояний системы. Требуется показать, что любое конкретное состояние системы (например, значение доказываемого логического выражения) соответствует хотя бы одному из рассматриваемых кандидатов в решения.
  2. Проверка каждого варианта и доказательство того, что рассматриваемый вариант является или не является решением поставленной задачи.

Характерные задачи, решаемые методом полного перебора

Хотя полный перебор в большинстве прикладных задач (особенно не связанных со взломом шифров) на практике не применяется, есть ряд исключений. В частности, когда полный перебор всё же оказывается оптимальным, либо представляет собой начальный этап в разработке алгоритма, его использование оправдано. Примером оптимальности полного перебора является алгоритм оценки времени вычисления цепочечных произведений матриц, который не удаётся ускорить по сравнению с алгоритмом, основанным на методе «грубой силы» . Этот алгоритм используется для решения классической задачи динамического программирования - определения приоритетов вычислений матричных произведений следующего вида: A 1 A 2 A 3 ⋯ A n {\displaystyle A_{1}A_{2}A_{3}\cdots A_{n}} .

Пример использования полного перебора

Исходная задача заключается в вычислении данной цепочки (матричного произведения) за наименьшее время. Можно реализовать тривиальный последовательный алгоритм, вычисляющий искомое произведение. Поскольку матричное произведение является ассоциативной операцией , можно вычислить цепочечное произведение, произвольно выбирая пару элементов цепочки (A i A i + 1) , i = 1.. n − 1 {\displaystyle (A_{i}A_{i+1}),i=1..n-1} и заменяя её результирующей матрицей A i 1: A i 1 = (A i A i + 1) {\displaystyle A_{i}^{1}\colon A_{i}^{1}=(A_{i}A_{i+1})} . Если повторять описанную процедуру n − 1 {\displaystyle n-1} раз, то оставшаяся результирующая матрица A k n − 1 {\displaystyle A_{k}^{n-1}} и будет ответом: A k n − 1 = (A k n − 2 A k + 1 n − 2) = … = A 1 A 2 A 3 ⋯ A n , k = 1.. n − 1 {\displaystyle A_{k}^{n-1}=(A_{k}^{n-2}A_{k+1}^{n-2})=\ldots =A_{1}A_{2}A_{3}\cdots A_{n},k=1..n-1} . Эта формула может быть проиллюстрирована следующим образом. Рассмотрим матричную цепочку: ⟨ A 1 , A 2 , A 3 , A 4 ⟩ {\displaystyle \left\langle A_{1},A_{2},A_{3},A_{4}\right\rangle } . Существуют следующие 5 способов вычислить соответствующее этой цепочке произведение A 1 A 2 A 3 A 4 {\displaystyle A_{1}A_{2}A_{3}A_{4}} :

(A 1 (A 2 (A 3 A 4))) , {\displaystyle {\color {Violet}(}A_{1}{\color {BurntOrange}(}A_{2}{\color {BrickRed}(}A_{3}A_{4}{\color {BrickRed})}{\color {BurntOrange})}{\color {Violet})},} (A 1 ((A 2 A 3) A 4)) , {\displaystyle {\color {Violet}(}A_{1}{\color {BurntOrange}(}{\color {BrickRed}(}A_{2}A_{3}{\color {BrickRed})}A_{4}{\color {BurntOrange})}{\color {Violet})},} ((A 1 A 2) (A 3 A 4)) , {\displaystyle {\color {Violet}(}{\color {BrickRed}(}A_{1}A_{2}{\color {BrickRed})}{\color {BurntOrange}(}A_{3}A_{4}{\color {BurntOrange})}{\color {Violet})},} ((A 1 (A 2 A 3)) A 4) , {\displaystyle {\color {Violet}(}{\color {BurntOrange}(}A_{1}{\color {BrickRed}(}A_{2}A_{3}{\color {BrickRed})}{\color {BurntOrange})}A_{4}{\color {Violet})},} (((A 1 A 2) A 3) A 4) . {\displaystyle {\color {Violet}(}{\color {BurntOrange}(}{\color {BrickRed}(}A_{1}A_{2}{\color {BrickRed})}A_{3}{\color {BurntOrange})}A_{4}{\color {Violet})}.}

Выбрав правильный порядок вычислений, можно добиться значительного ускорения вычислений. Чтобы убедиться в этом, рассмотрим простой пример цепочки из 3-х матриц. Положим, что их размеры равны соответственно 10 × 100 , 100 × 5 , 5 × 50 {\displaystyle 10\times 100,100\times 5,5\times 50} . Стандартный алгоритм перемножения двух матриц размерами p × q , q × r {\displaystyle p\times q,q\times r} требует время вычисления, пропорциональное числу p q r {\displaystyle pqr} (число вычисляемых скалярных произведений) . Следовательно, вычисляя цепочку в порядке ((A 1 A 2) A 3) {\displaystyle ((A_{1}A_{2})A_{3})} , получаем 10 ⋅ 100 ⋅ 5 = 5000 {\displaystyle 10\cdot 100\cdot 5=5000} скалярных произведений для вычисления (A 1 A 2) {\displaystyle (A_{1}A_{2})} , плюс дополнительно 10 ⋅ 5 ⋅ 50 = 2500 {\displaystyle 10\cdot 5\cdot 50=2500} скалярных произведений, чтобы вычислить второе матричное произведение. Общее число скалярных произведений: 7500. При ином выборе порядка вычислений получаем 100 ⋅ 5 ⋅ 50 = 25000 {\displaystyle 100\cdot 5\cdot 50=25000} плюс 10 ⋅ 100 ⋅ 50 = 50000 {\displaystyle 10\cdot 100\cdot 50=50000} скалярных произведений, то есть 75000 скалярных произведений .

Таким образом, решение данной задачи может существенно сократить временные затраты на вычисление матричной цепочки. Это решение может быть получено полным перебором: необходимо рассмотреть все возможные последовательности вычислений и выбрать из них ту, которая при вычислении цепочки занимает наименьшее число скалярных произведений. Однако надо учитывать, что этот алгоритм сам по себе требует экспоненциальное время вычисления , так что для длинных матричных цепочек выигрыш от вычисления цепочки самым эффективным образом (оптимальная стратегия) может быть полностью потерян временем нахождения этой стратегии .

Связь с концепцией «разделяй и властвуй»

Другим ярким примером фундаментальной концепции теории алгоритмов является принцип «разделяй и властвуй ». Эта концепция применима, когда система поддается разделению на множество подсистем, структура которых аналогична структуре исходной системы . В таких случаях подсистемы также поддаются разделению, либо являются тривиальными . Для таких систем тривиальной является исходно поставленная задача. Таким образом, реализация концепции «разделяй и властвуй» имеет рекурсивный характер.

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

По сравнению с другими примерами полного перебора, особенностью метода рекурсии является то, что конечное решение опирается не на одну-единственную тривиальную подсистему. В общем случае решение формируется на основании целого множества подсистем.

Для следующих примеров классических задач, решаемых методом «разделяй и властвуй», полный перебор является либо единственным известным методом решения, либо изначальной реализацией, которая в дальнейшем была оптимизирована:

Атака методом «грубой силы»

Кол-во знаков Кол-во вариантов Стойкость Время перебора
1 36 5 бит менее секунды
2 1296 10 бит менее секунды
3 46 656 15 бит менее секунды
4 1 679 616 21 бит 17 секунд
5 60 466 176 26 бит 10 минут
6 2 176 782 336 31 бит 6 часов
7 78 364 164 096 36 бит 9 дней
8 2,821 109 9x10 12 41 бит 11 месяцев
9 1,015 599 5x10 14 46 бит 32 года
10 3,656 158 4x10 15 52 бита 1 162 года
11 1,316 217 0x10 17 58 бит 41 823 года
12 4,738 381 3x10 18 62 бита 1 505 615 лет

Таким образом, пароли длиной до 8 символов включительно в общем случае не являются надежными. Для современных компьютеров этот показатель гораздо выше. Так, 64 битный ключ(пароль) перебирается на современном компьютере примерно за 2 года и перебор легко может быть распределен между множеством компьютеров.

Средства проведения атаки

Современные персональные компьютеры позволяют взламывать пароли полным перебором вариантов с эффективностью, проиллюстрированной в таблице выше. Однако, при оптимизации brute force, основанной на параллельных вычислениях , эффективность атаки можно существенно повысить . При этом может потребоваться использование компьютера, адаптированного к многопоточным вычислениям . В последние годы широкое распространение получили вычислительные решения, использующие GPU , такие как Nvidia Tesla . С момента создания компанией Nvidia архитектуры CUDA в 2007 году, появилось множество решений (см., например, Cryptohaze Multiforcer , Pyrit), позволяющих проводить ускоренный подбор ключей благодаря использованию таких технологий, как CUDA, FireStream , OpenCL .

Устойчивость к атаке полного перебора

В процессе улучшения системы информационной безопасности по отношению к атаке полным перебором можно выделить два основных направления:

  1. повышение требований к ключам доступа от защищаемой информации;
  2. повышение надежности всех узлов системы безопасности.

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

Методы оптимизации полного перебора

Метод ветвей и границ

Распараллеливание вычислений

Одним из методов увеличения скорости подбора ключа является распараллеливание вычислений . Существует два подхода к распараллеливанию :

  • Первый подход - построение конвейера . Пусть алгоритм соотношения E k (x) = y {\displaystyle E_{k}\ (x)=y} можно представить в виде цепочки простейших действий (операций): O 1 , O 2 , . . . , O N {\displaystyle {O_{1}\ ,O_{2},...,O_{N}}} . Возьмём N {\displaystyle N\ } процессоров A 1 , A 2 , . . . , A N {\displaystyle {A_{1}\ ,A_{2},...,A_{N}}} , зададим их порядок и положим, что i {\displaystyle i\ } - ый процессор выполняет три одинаковые по времени операции: Тогда конвейер из N {\displaystyle N\ } последовательно соединённых, параллельно и синхронно работающих процессоров работает со скоростью v / 3 {\displaystyle v/3\ } , где v {\displaystyle v\ } - скорость выполнения одной операции одним процессором.
  • Второй подход состоит в том, что множество K {\displaystyle K\ } всех возможных ключей разбивается на непересекающиеся подмножества K 1 K 2 , . . . , K N {\displaystyle {K_{1}\,K_{2},...,K_{N}}} . Система из Q {\displaystyle Q\ } машин перебирает ключи так, что i {\displaystyle i\ } - ая машина осуществляет перебор ключей из множества K i , i = 1.. Q {\displaystyle K_{i}\ ,i=1..Q} . Система прекращает работу, если одна из машин нашла ключ. Самое трудное - это разделение ключевого множества. Но если каждый процессор начнёт вычисление с какого-то произвольного ключа, то время нахождения увеличится, а схема значительно упростится. Среднее число шагов в этом случае составляет | K | / N {\displaystyle |K|/N\ } , где | K | {\displaystyle |K|\ } - число элементов во множестве ключей, а N {\displaystyle N\ } - число процессоров.

Радужные таблицы

Предпосылки к появлению

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

Использование

Радужная таблица создается построением цепочек возможных паролей. Каждая цепочка начинается со случайного возможного пароля, затем подвергается действию хеш-функции и функции редукции. Данная функция преобразует результат хеш-функции в некоторый возможный пароль (например, если мы предполагаем, что пароль имеет длину 64 бита, то функцией редукции может быть взятие первых 64 бит хеша, побитовое сложение всех 64-битных блоков хеша и т. п.). Промежуточные пароли в цепочке отбрасываются и в таблицу записываются только первый и последний элементы цепочек. Создание таких таблиц требует больше времени, чем нужно для создания обычных таблиц поиска, но значительно меньше памяти (вплоть до сотен гигабайт, при объеме для обычных таблиц в N слов для радужных нужно всего порядка N 2/3) . При этом они требуют хоть и больше времени (по сравнению с обычными методами) на восстановление исходного пароля, но на практике более реализуемы (для построения обычной таблицы для 6-символьного пароля с байтовыми символами потребуется 256 6 = 281 474 976 710 656 блоков памяти, в то время как для радужной - всего 256 6·⅔ = 4 294 967 296 блоков).

Для восстановления пароля данное значение хеш-функции подвергается функции редукции и ищется в таблице. Если не было найдено совпадения, то снова применяется хеш-функция и функция редукции. Данная операция продолжается, пока не будет найдено совпадение. После нахождения совпадения цепочка, содержащая его, восстанавливается для нахождения отброшенного значения, которое и будет искомым паролем.

В итоге получается таблица, которая может с высокой вероятностью восстановить пароль за небольшое время .

Инциденты

Хотя любая защита информационной системы должна, в первую очередь, быть надежной по отношению к атаке методом «грубой силы», случаи успешного применения данной атаки злоумышленниками достаточно распространены.

Атака «Энигмы»

Изобретенная в 1918 году шифровальная машина, названная «Энигма», широко использовалось немецким военно-морским флотом начиная с 1929 года. В течение дальнейших нескольких лет система модифицировалась, а с 1930 года активно использовалась немецкой армией и правительством в процессе Второй мировой войны .

Первые перехваты сообщений, зашифрованных с кодом Энигмы относятся к 1926 году. Однако прочитать сообщения долгое время не могли. На протяжении всей Второй мировой шло противостояние между польскими и германскими криптографами. Поляки, получая очередной результат по взлому немецкой криптосистемы, сталкивались с новыми трудностями, которые привносили германские инженеры, постоянно модернизирующие систему «Энигма». Летом 1939 года , когда неизбежность вторжения в Польшу стала очевидна, бюро передало результаты своей работы английской и французской разведкам .

Дальнейшая работа по взлому была организована в Блетчли-парке . Основным инструментом криптоаналитиков стала дешифровальная машина «Бомба» . Её прототип был создан польскими математиками накануне Второй мировой войны для министерства обороны Польши. На основе этой разработки и при непосредственной поддержке её создателей в Англии был сконструирован более «продвинутый» агрегат.

Теоретическую часть работы выполнил Алан Матисон Тьюринг . Его работы по криптографическому анализу алгоритма, реализованного в шифровальной машине «Энигма », основывался на более раннем криптоанализе предыдущих версий этой машины, которые были выполнены в 1938 году польским криптоаналитиком Марианом Реевским . Принцип работы разработанного Тьюрингом дешифратора состоял в переборе возможных вариантов ключа шифра и попыток расшифровки текста, если была известна структура дешифруемого сообщения или часть открытого текста .

С современной точки зрения шифр «Энигмы» был не очень надёжным, но только сочетание этого фактора с наличием множества перехваченных сообщений, кодовых книг, донесений разведки, результатов усилий военных и даже террористических атак позволило «вскрыть» шифр .

Массовый взлом домашних сетей посредством WASP

См. также

Примечания

Литература

  • Reid, D. A. et al.,. Proof in Mathematics Education: Research, Learning, and Teaching . - John Wiley & SSense Publishersons, 2010. - P. 266. - ISBN 978-9460912443 .
  • Paar, Christof et al.,.


Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: