Повышение эффективности
Для оценки эффективности могут применяться разные характеристики, но чаще всего рассматриваются продолжительность выполнения и требования программы к памяти. Еще одной важной характеристикой эффективности является время, которое потребовалось программисту на разработку программы.
Традиционная компьютерная архитектура не слишком хорошо приспособлена для выполнения программ в стиле Prolog, которое состоит в достижении списка целей. Поэтому в языке Prolog приходится чаще сталкиваться с такими ограничениями,
Глава 8. Стиль и методы программирования 177
как время и пространство, чем во многих других языках программирования. Будет ли это вызывать сложности при практической реализации, зависит от самой задачи. Проблема, связанная с низкой эффективностью по времени, является практически несущественной, даже если программа Prolog требует 1 секунду процессорного времени, а соответствующая программа на некотором другом языке, скажем Fortran, выполняется за 0,1 секунды, при условии, что эта программа применяется лишь несколько раз в сутки. Но такое различие в эффективности становится существенным, если две программы, соответственно, выполняются в течение 50 и 5 минут.
С другой стороны, во многих областях применения язык Prolog намного сокращает время разработки программ. Программы Prolog, как правило, являются более легкими для написания, понимания и отладки по сравнению с программами, написанными на традиционных языках программирования. К проблемам, относящимся к области применения языка Prolog, относятся символическая, нечисловая обработка, структурированные объекты данных и отношения между ними. Б частности, язык Prolog успешно применялся в таких областях, как алгебраическое решение уравнений, планирование, использование баз данных, решение общих проблем, разработка прототипов, реализация языков программирования, дискретное и качественное моделирование, строительное проектирование, машинное обучение, понимание естественного языка, экспертные системы и другие области искусственного интеллекта. Однако числовые математические расчеты — это область, для которой Prolog подходит не столь естественно.
Что касается вычислительной эффективности, то выполнение откомпилированной программы в целом происходит намного быстрее по сравнению с интерпретацией программы. Поэтому, если система Prolog включает и интерпретатор, и компилятор, то при наличии жестких требований к быстродействию необходимо использовать компилятор.
Если программа характеризуется крайне низким быстродействием, ее работу часто можно намного ускорить путем усовершенствования реализации самого алгоритма. Но для этого необходимо изучить процедурные аспекты данной программы. Простым способом повышения вычислительной эффективности является поиск лучшего упорядочения предложений процедур и целей в телах предложений. Еще одним относительно простым методом является предоставление системе Prolog указаний с помощью операторов отсечения.
Идеи по повышению эффективности программы обычно рождаются в результате более глубокого понимания задачи. Создание более эффективного алгоритма, как правило, может стать результатом усовершенствований двух типов, описанных ниже.
• Повышение эффективности поиска путем предотвращения ненужного перебора с возвратами и останова процесса обработки ненужных альтернатив на самых ранних этапах.
• Использование для представления объектов в программе более подходящих структур данных, для того, чтобы можно было реализовать операции над объектами более эффективно,
В данной главе усовершенствования обоих типов рассматриваются на примерах. Кроме того, на примере будет показан еще один метод повышения эффективности. Этот метод, называемый кэшированием, основан па вставке в базу данных промежуточных результатов, которые, по всей вероятности, снова потребуются при проведении дальнейших вычислений. Вместо повторения вычислений можно выполнить выборку подобных результатов как уже известных фактов.