Введение

В информатике специализация алгоритмов во время выполнения — это методология создания эффективных алгоритмов для ресурсоемких вычислительных задач определенного типа. Эта методология берет начало в области автоматического доказательства теорем и, в частности, в проекте автоматического доказателя теорем Vampire. Идея вдохновлена использованием частичной оценки для оптимизации трансляции программ. Многие основные операции в автоматических доказателях теорем демонстрируют следующий шаблон. Предположим, что нам необходимо выполнить некоторый алгоритм в ситуации, когда значение некоторой переменной фиксировано для потенциально многих различных значений другой переменной. Чтобы сделать это эффективно, мы можем попытаться найти специализацию этого алгоритма для каждого фиксированного значения, то есть такой алгоритм, что выполнение специализированного алгоритма эквивалентно выполнению исходного. Специализированный алгоритм может быть более эффективным, чем общий, поскольку он может использовать определенные свойства фиксированного значения. Как правило, можно избежать некоторых операций, которые исходный алгоритм должен был бы выполнять, если известно, что они избыточны для данного параметра. В частности, мы часто можем определить тесты, которые истинны или ложны для этого значения, развернуть циклы и рекурсию и т.д.

Отличие от частичной оценки

Ключевое различие между специализацией во время выполнения и частичной оценкой заключается в том, что значения, относительно которых выполняется специализация, неизвестны статически, поэтому специализация происходит во время выполнения. Существует также важное техническое различие. Частичная оценка применяется к алгоритмам, явно представленным в виде кода на каком-либо языке программирования. Во время выполнения нам не требуется какое-либо конкретное представление . Мы должны лишь представить его, когда программируем процедуру специализации. Это также означает, что мы не можем использовать универсальные методы для специализации алгоритмов, что обычно характерно для частичной оценки. Вместо этого, нам необходимо программировать процедуру специализации для каждого конкретного алгоритма. Важное преимущество такого подхода заключается в том, что мы можем использовать мощные ad hoc приемы, использующие особенности и представления и , которые недоступны универсальным методам специализации.