Полный перебор: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
м Bot: HTTP→HTTPS (v470) |
Oleg4280 (обсуждение | вклад) →Характерные задачи, решаемые методом полного перебора: уточнение внутренней ссылки |
||
Строка 20:
== Характерные задачи, решаемые методом полного перебора ==
Хотя полный перебор в большинстве прикладных задач (особенно не связанных со [[
<!-- Информация для дальнейшей работы над статьей.
По Корману, brute force применим к следующим алгоритмам:
Строка 43:
: <math>{\color{Violet}(}{\color{BurntOrange}(}A_1 {\color{BrickRed}(}A_2 A_3{\color{BrickRed})}{\color{BurntOrange})} A_4{\color{Violet})},</math>
: <math>{\color{Violet}(}{\color{BurntOrange}(}{\color{BrickRed}(}A_1 A_2{\color{BrickRed})} A_3{\color{BurntOrange})} A_4{\color{Violet})}.</math>
Выбрав правильный порядок вычислений, можно добиться значительного ускорения вычислений. Чтобы убедиться в этом, рассмотрим простой пример цепочки из 3-х матриц. Положим, что их размеры равны соответственно <math>10 \times 100, 100 \times 5, 5 \times 50 </math>. Стандартный алгоритм перемножения двух матриц размерами <math>p \times q, q \times r</math> требует время вычисления, пропорциональное числу <math>pqr</math> (число вычисляемых скалярных произведений){{sfn|Cormen|2001|pp=
<math>100 \cdot 5 \cdot 50 = 25000</math> плюс <math>10\cdot 100 \cdot 50 = 50000</math> скалярных произведений, то есть 75000 скалярных произведений{{sfn|Cormen|2001|pp=
Таким образом, решение данной задачи может существенно сократить временные затраты на вычисление матричной цепочки. Это решение может быть получено полным перебором: необходимо рассмотреть все возможные последовательности вычислений и выбрать из них ту, которая при вычислении цепочки занимает наименьшее число скалярных произведений. Однако надо учитывать, что этот алгоритм сам по себе требует экспоненциальное время вычисления{{sfn|Cormen|2001|p=372}}, так что для длинных матричных цепочек выигрыш от вычисления цепочки самым эффективным образом (оптимальная [[Стратегия (математика)|стратегия]]) может быть полностью потерян временем нахождения этой стратегии{{sfn|Cormen|2001|p=377}}.
Строка 51:
[[Файл:Quicksort-example.gif|350px|thumb|right|Алгоритм [[Быстрая сортировка|быстрой сортировки]] — основанный на [[Парадигма программирования|парадигме]] «разделяй и властвуй».]]
В [[Теория алгоритмов|теории алгоритмов]] известны несколько широко применимых общих концепций. Метод полного перебора является одной из них. Фактически, полным перебором ''возможно'' воспользоваться в тех случаях, когда мы имеем дело с дискретной детерминированной системой, состояния которой могут быть легко проанализированы{{sfn|Cormen|2001|pp=
Другим ярким примером фундаментальной концепции теории алгоритмов является принцип «[[Разделяй и властвуй (информатика)|разделяй и властвуй]]». Эта концепция применима, когда система поддается разделению на множество подсистем, структура которых аналогична структуре исходной системы{{sfn|Cormen|2001|p=65}}. В таких случаях подсистемы также поддаются разделению, либо являются тривиальными{{sfn|Cormen|2001|p=65}}. Для таких систем тривиальной является исходно поставленная задача. Таким образом, реализация концепции «разделяй и властвуй» имеет [[Рекурсия|рекурсивный]] характер.
|