Повышение эффективности

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

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

Глава 8. Стиль и методы программирования 177


как время и пространство, чем во многих других языках программирования. Будет ли это вызывать сложности при практической реализации, зависит от самой задачи. Проблема, связанная с низкой эффективностью по времени, является практически несущественной, даже если программа Prolog требует 1 секунду процессорного вре­мени, а соответствующая программа на некотором другом языке, скажем Fortran, выполняется за 0,1 секунды, при условии, что эта программа применяется лишь не­сколько раз в сутки. Но такое различие в эффективности становится существенным, если две программы, соответственно, выполняются в течение 50 и 5 минут.

С другой стороны, во многих областях применения язык Prolog намного сокраща­ет время разработки программ. Программы Prolog, как правило, являются более легкими для написания, понимания и отладки по сравнению с программами, напи­санными на традиционных языках программирования. К проблемам, относящимся к области применения языка Prolog, относятся символическая, нечисловая обработка, структурированные объекты данных и отношения между ними. Б частности, язык Prolog успешно применялся в таких областях, как алгебраическое решение уравне­ний, планирование, использование баз данных, решение общих проблем, разработка прототипов, реализация языков программирования, дискретное и качественное моде­лирование, строительное проектирование, машинное обучение, понимание естествен­ного языка, экспертные системы и другие области искусственного интеллекта. Одна­ко числовые математические расчеты — это область, для которой Prolog подходит не столь естественно.

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

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

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

• Повышение эффективности поиска путем предотвращения ненужного перебора с возвратами и останова процесса обработки ненужных альтернатив на самых ранних этапах.

• Использование для представления объектов в программе более подходящих структур данных, для того, чтобы можно было реализовать операции над объ­ектами более эффективно,

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