Книга: Программирование на языке Пролог для искусственного интеллекта
8.5.1. Повышение эффективности решения задачи о восьми ферзях
8.5.1. Повышение эффективности решения задачи о восьми ферзях
В качестве простого примера повышения эффективности давайте вернемся к задаче о восьми ферзях (см. рис. 4.7). В этой программе Y-координаты ферзей перебираются последовательно — для каждого ферзя пробуются числа от 1 до 8. Этот процесс был запрограммирован в виде цели
принадлежит( Y, [1, 2, 3, 4, 5, 6, 7, 8] )
Процедура принадлежит
работает так: вначале пробует Y = 1, затем Y = 2, Y = 3 и т.д. Поскольку ферзи расположены один за другим в смежных вертикалях доски, очевидно, что такой порядок перебора не является оптимальным. Дело в том, что ферзи, расположенные в смежных вертикалях будут бить друг друга, если они не будут разнесены по вертикали на расстояние, превышающее, по крайней мере одно поле. В соответствии с этим наблюдением можно попытаться повысить эффективность, просто изменив порядок рассмотрения координат-кандидатов. Например:
принадлежит( Y, [1, 5, 2, 6, 3, 7, 4, 8] )
Это маленькое изменение уменьшит время, необходимое для нахождения первого решения, в 3-4 раза.
В следующем примере такая же простая идея, связанная с изменением порядка, превращает практически неприемлемую временную сложность в тривиальную.
- 8.5. Эффективность
- 8.5.3. Повышение эффективности конкатенации списков за счет совершенствования структуры данных
- 2.2. Современные методы исследования эффективности рекламы
- 1.1. Информатика. Предмет информатики. Основные задачи информатики
- Повторяющиеся задачи
- Постановка задачи
- 11.2. Технология принятия решения в условиях чрезвычайной ситуации
- 7.6. Оценка эффективности рекламного текста
- Глава 6 Оценка эффективности тренинга
- 1.1.1. Смысл, цель и задачи бизнес-тренинга
- Управление пользователями и разрешениями узла
- Глава 3 Нормативные руководящие документы, назначение и задачи информационной безопасности России