11.4. Замечания относительно поиска в графах, оптимальности к сложности
11.4. Замечания относительно поиска в графах, оптимальности к сложности
Сейчас уместно сделать ряд замечаний относительно программ поиска, разработанных к настоящему моменту: во-первых, о поиске в графах, во-вторых, об оптимальности полученных решений и, в-третьих, о сложности поиска.
Приведенные примеры могли создать ложное впечатление, что наши программы поиска в ширину способны работать только в пространствах состояний, являющихся деревьями, а не графами общего вида. На самом деле, тот факт, что в одной из версий множество путей-кандидатов представлялось деревом, совсем не означает, что и само пространство состояний должно было быть деревом. Когда поиск проводится в графе, граф фактически разворачивается в дерево, причем некоторые пути, возможно, дублируются в разных частях этого дерева (см. рис. 11.14).
Наши программы поиска в ширину порождают решающие пути один за другим в порядке увеличения их длин — самые короткие решения идут первыми. Это является важным обстоятельством, если нам необходима оптимальность (в отношении длины решения). Стратегия поиска в ширину гарантирует получение кратчайшего решения первым. Разумеется, это неверно для поиска в глубину.
Рис. 11.14. (а) Пространство состояний; а — стартовая вершина. (b) Дерево всех возможных ациклических путей, ведущих из а, порожденное программой поиска в ширину.
Наши программы, однако, не учитывают стоимости, приписанные дугам в пространстве состояний. Если критерием оптимальности является минимум стоимости решающего пути (а не его длина), то в этом случае поиска в ширину недостаточно. Поиск с предпочтением из гл. 12 будет направлен на оптимизацию стоимости.
Еще одна типичная проблема, связанная с задачей поиска, — это проблема комбинаторной сложности. Для нетривиальных предметных областей число альтернатив столь велико, что проблема сложности часто принимает критический характер. Легко понять, почему это происходит: если каждая вершина имеет b преемников, то число путей длины l, ведущих из стартовой вершины, равно bl (в предположении, что циклов нет). Таким образом, вместе с увеличением длин путей наблюдается экспоненциальный рост объема множества путей-кандидатов, что приводит к ситуации, называемой комбинаторным взрывом. Стратегии поиска в глубину и ширину недостаточно "умны" для борьбы с такой степенью комбинаторной сложности: отсутствие селективности приводит к тому, что все пути рассматриваются как одинаково перспективные.
По-видимому, более изощренные процедуры поиска должны использовать какую-либо информацию, отражающую специфику данной задачи, с тем чтобы на каждой стадии поиска принимать решения о наиболее перспективных путях поиска. В результате процесс будет продвигаться к целевой вершине, обходя бесполезные пути. Информация, относящаяся к конкретной решаемой задаче и используемая для управления поиском, называется эвристикой. Про алгоритмы, использующие эвристики, говорят, что они руководствуются эвристиками: они выполняют эвристический поиск. Один из таких методов изложен в следующей главе.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Предостережение относительно использования приоритетов потоков и процессов
Предостережение относительно использования приоритетов потоков и процессов Высокими приоритетами потоков и высокими классами приоритета процессов необходимо пользоваться с осторожностью. Следует решительно избегать использования приоритетов реального времени для
Дополнительные рекомендации относительно использования мьютексов и объектов CRITICAL_SECTION
Дополнительные рекомендации относительно использования мьютексов и объектов CRITICAL_SECTION К этому времени мы успели познакомиться со всеми объектами синхронизации Windows и исследовали их применимость на ряде примеров. Мьютексы и объекты CS рассматривались первыми, а
Изменения, связанные с устранением неявных допущений относительно предполагаемых размеров элементов данных
Изменения, связанные с устранением неявных допущений относительно предполагаемых размеров элементов данных Источником многих проблем могут служить различного рода допущения относительно размеров данных. Несколько возможных примеров этого приводятся ниже.• Тип DWORD
Замечание относительно функции printk() и разработки ядра
Замечание относительно функции printk() и разработки ядра Когда впервые начинают разрабатывать код ядра, то скорее всего очень часто приходится заменять функцию printf() на функцию printk(). Это нормально, потому что нельзя не принимать во внимание многолетний опыт по написанию
Зеркальное отображение относительно плоскости
Зеркальное отображение относительно плоскости Команда MIRROR3D, осуществляющая зеркальное отображение объектов относительно заданной плоскости, вызывается из падающего меню Modify ? 3D Operations ? 3D Mirror.Запросы команды MIRROR3D: Select objects: – выбрать объекты Select objects: – нажать клавишу
13.1.1. Три источника сложности
13.1.1. Три источника сложности Вопросы о простоте, сложности и верном размере программного обеспечения вызывают бурные споры в Unix-сообществе. Unix-программисты развили такое мировоззрение, согласно которому простота — это красота, изящество и добро, а сложность — уродство,
Правило 29: Стремитесь, чтобы программа была безопасна относительно исключений
Правило 29: Стремитесь, чтобы программа была безопасна относительно исключений Безопасность исключений в чем-то подобна беременности… но пока отложим эту мысль в сторонку. Нельзя всерьез говорить о репродуктивной функции, пока не завершился этап ухаживания.Предположим,
Зеркальное отображение относительно плоскости
Зеркальное отображение относительно плоскости Команда MIRROR3D, осуществляющая зеркальное отображение объектов относительно заданной плоскости, вызывается из падающего меню Modify ? 3D Operations ? 3D Mirror.Запросы команды MIRROR3D:Select objects: – выбрать объектыSelect objects: – нажать клавишу Enter
Зеркальное отображение относительно плоскости
Зеркальное отображение относительно плоскости Команда MIRROR3D , осуществляющая зеркальное отображение объектов относительно заданной плоскости, вызывается из падающего меню Modify ? 3D Operations ? 3D Mirror.Запросы команды
Зеркальное отображение относительно плоскости
Зеркальное отображение относительно плоскости Команда MIRROR3D, осуществляющая зеркальное отображение объектов относительно заданной плоскости, вызывается из падающего меню Modify ? 3D Operations ? 3D Mirror.Запросы команды MIRROR3D:Select objects: – выбрать объектыSelect objects: – нажать клавишу Enter
13.4. Поиск с предпочтением в И/ИЛИ-графах
13.4. Поиск с предпочтением в И/ИЛИ-графах 13.4.1. Эвристические оценки и алгоритм поиска Базовые процедуры поиска предыдущего раздела производят систематический и полный просмотр И/ИЛИ-дерева, не руководствуясь при этом какими-либо эвристиками. Для сложных задач подобные
3. Заблуждение относительно производства
3. Заблуждение относительно производства Мы должны начать с замечания о том, что компьютерные программы подобно всем другим видам инструментов или сре дств пр оизводства, имеют два отличных вида экономической ценности. Они имеют потребительскую стоимость и
14.2.5. Некоторые рекомендации относительно DVD
14.2.5. Некоторые рекомендации относительно DVD Одни разработчики DVD заявляют, что их диски могут хранить информацию до 50 лет, другие называют цифру в 100 лет. Я им не верю по одной простой причине: первый DVD появился в 1996 году, следовательно, самому «старому» DVD на момент