Оптимальность схемы Горнера
Теорема D.l.Пусть n— произвольное неотрицательное целое число. Не существует алгоритма, который, используя только сложение, вычитание и умножение, позволяет вычислять значение
anxn + ... + a1x + a0 (D.l)
по числам x,a0,a1,...,an так, что количество сложений илиумноже-ний всегда оказывается меньше n.
В терминах нижних границ это утверждение можно, очевидно, переформулировать следующим образом.
Пусть З6 — класс алгоритмов, вычисляющих значение (D.1) с помощью операций сложения, вычитания и умножения. Будем рассматривать число n как размер входа x,a0,a1,...,an. Тогда n является нижней границей как аддитивной сложности (измеряемой числом сложений и вычитаний в худшем случае), так и мультипликативной сложности (измеряемой числом умножений в худшем случае) алгоритмов класса З6.
Несколько предварительных соглашений и замечаний. Во-первых, будем для определенности считать, что все коэффициенты полинома, а также значение x принадлежат полю рациональных чисел Q, хотя достаточно было бы потребовать, например, чтобы они принадлежали произвольному бесконечному полю. Во-вторых, ограничимся операциями сложения и умножения; позднее мы покажем, что привлечение вычитаний не является существенным. В-третьих, заметим, что любой алгоритм, который использует только операции сложения и умножения и который вычисляет значение произвольного полинома фиксированной степени n по заданному x, можно записать в виде линейной (неветвящейся) программы, одной и той же для всех полиномов степени n (так как в используемом наборе операций нет операций сравнения). В качестве программных переменных мы будем использовать p с тем или иным целым индексом. Шагом про-
Приложение D
граммы является некоторое присваивание. Подготовительный раздел программы содержит присваивания
P-n-1:=an; ...; P-1:=a0; Р0:=х (D.2)
и, возможно, ряд присваиваний вида рк:= ..., к<-п - 1, с конкретными числами в правой части (т. е. можно запасти константы, нужные в вычислениях). Вычислительный раздел программы состоит из присваиваний вида
Pi:=pk, k<i, (D.3)
и
Pi:=Pk<>P, Kl<i, ое {+,■}. (D.4)
Значение индекса в левой части будем считать номером шага, предполагая, что все используемые в программе значения индекса заполняют целиком некоторый отрезок множества целых чисел. Шаг вида (D.4) будем называть аддитивным или мультипликативным в зависимости от вида о (+ или •). Шаг вида (D.3) будем называть нейтральным. Каждую программу такого вида, вычисляющую значение (D.1) и обладающую тем свойством, что, не меняя ее вычислительного раздела, а лишь варьируя правые части в (D.2), мы можем получать значения любых полиномов степени п в любых точках, мы назовем п-программой.
Наша цель состоит в доказательстве того, что каким бы ни было неотрицательное целое п, любая n-программа содержит не менее п аддитивных и не менее п мультипликативных шагов.
Если в n-программе изменить шаги с номерами 0, -1,..., -п - 1, подставляя в правые части присваиваний (D.2) вместо чисел х, а0, а1, ...,ап их буквенные обозначения, и интерпретировать +, • в вычислительном разделе как знаки полиномиальных операций, то в результате выполнения n-программы значениями P1,p2, ... будут полиномы (т.е. буквенные выражения, «картинки»). В частности, будет построен полином апхп + ... + а1х + а0, причем ап, ...,а1,а0 и х являются переменными этого полинома (степень по х которого равна п, а степень, например, по ап равна 1). При таком подходе каждая n-программа вычисления значения полинома превращается в программу построения полинома
Р(х, а0, а1,...,ап) = апхп +... + а1х + а0 е Q[x, а0, а1, ..., ап] (D.5)
с помощью операций сложения и умножения, исходя из переменных х,а0,а1,...,ап. Программу обсуждаемого вида, содержащую в под-
Оптимальность схемы Горнера
готовительном разделе формализованные указанным способом шаги с номерами -n - 1, -n,..., О, назовем формальной n-программой. Если мы докажем, что любая формальная n-программа содержит не менее n аддитивных и не менее n мультипликативных шагов, то поставленная цель будет достигнута.
Лемма D.I.Пусть n^О, S — формальная n-программа, t — положительное целое, не превосходящее наибольшего значения индекса переменной p в S. Пусть среди шагов S с номерами 1,2,..., t нет аддитивных, в которых по крайней мере один операнд правой части зависит от an (имеет положительную степень по an как полином от x, a0, aъ..., an). Тогда после выполнения S каждый из полиномов pi,p2,---,pt либо не зависит от an, либо кратен an (может быть записан в виде anQ, где QsQxao,a,...,an]).
Доказательство. Индукция по t. Для t = 1 утверждение очевидно.
Пусть t > 1 и утверждение леммы верно для 1, 2,..., t - 1. Для шага с номером t имеется три возможности:
pt:=pk> pt:=pk+pl> pt'-=pk'ph
k,l^t-l. При осуществлении первой возможности требуемое непо
средственно следует из предположения индукции. При второй воз
можности из сказанного в условии леммы относительно аддитивных
шагов следует, что pt не зависит от an. При третьей возможности
любой из полиномов pk, pl может быть либо кратным an, либо не
зависеть от an; в обоих случаях получаем то, что нам нужно. □
Лемма D.2.Каждая формальная n-программа S, n^О, построения полинома P вида (D.5) содержит не менее n аддитивных шагов.
Доказательство. Индукция по n.
Для n = Оутверждение очевидно.
Пусть n > 0 и утверждение леммы верно для 0,1,..., n - 1. Предположим, что S содержит менее n аддитивных шагов. Ясно, что в S имеется по крайней мере один аддитивный шаг такой, что по крайней мере один из его операндов зависит от an. В силу леммы D.1 первый такой шаг будет иметь по крайней мере один операнд, являющийся кратным an полиномом. Пусть этот шаг имеет вид pi :=pk + pl , и значением pk (именно этот операнд мы берем только для определенности) является полином anQ, Qe(Q)[x,a0, aъ ...,an]. Если в S заменить шаг p-n-! :=an на p -n-х :=0, а шаг pi :=pk + pl —на pi :=pl, то, очевидно, получится формальная (n- 1)-программа построения полино-
Приложение D
ма an-гxn +... + aгx + a0, содержащая менее чем n - 1 аддитивных
шагов. Противоречие. П
Исследуя число мультипликативных шагов, мы докажем утверждение более сильное, чем то, которое непосредственно нас интересует.
Во-первых, мы будем рассматривать формальные n-программы, которые строят полином, возможно лишь «по модулю xn+1» равный P(x, a0, aъ ..., an), т. е. некоторый полином вида Uxn+1 + anxn + ... ... +aгx + a0, где Ue(Q>[x, a0, aг,...,an], и при этом конкретный вид U может быть любым, и он нас не будет интересовать. Мы согласны, таким образом, получить любой полином W(.x,a0,aъ ..., an) такой, что разность W{x, a0, aъ ..., an) -P{x, a0, aъ ...,an) делится на xn+1:
W(x,a0,a1,...,an)=P(x,a0,a1,...,an) (mod xn+1) (D.6)
(этим мы фактически расширяем понятие формальной n-программы). Во-вторых, мы будем исследовать число существенно мультипликативных шагов, т.е. таких шагов вида pi :=pk -pl , для которых k,l ^ -n - 1; последнее означает, что операнды таких шагов не являются заранее запасенными константами. Ясно, что если для построения любого полинома W(x, a0, aъ ..., an), удовлетворяющего (D.6), не существует формальной n-программы, содержащей менее n существенно мультипликативных шагов, то, в частности, не существует и формальной n-программы для построения P(x, a0, aъ ...,an), содержащей менее n мультипликативных шагов.
Лемма D.3.Пусть n^О, S — формальная n-программа, t— положительное целое, не превосходящее наибольшего значения индекса переменной p в S. Пусть среди шагов S с номерами 1, 2,..., t нет существенно мультипликативных, в которых по крайней мере один операнд правой части зависит от an. Тогда после выполнения S каждый из полиномов p\,p2,---,pt либо не зависит от an, либо имеет вид can + Q, где c е Q \ {0} и полином Q не зависит от an.
Доказательство аналогично доказательству леммы D.I. □
Лемма D.4.Каждая формальная n-программа S построения какого-либо W, удовлетворяющего (D.6) при P = anxn + ... + aгx + a0, содержит не менее n существенно мультипликативных шагов.
Доказательство. Индукция по n. Для n = 0 утверждение очевидно.
Пусть n > 0 и утверждение леммы верно для 0,1,..., n - 1. Пусть S — формальная n-программа построения некоторого полинома
Оптимальность схемы Горнера
У/{х,а0,аъ...ап), удовлетворяющего (D.6). Предположим, что в S меньше чем п существенно мультипликативных шагов. Покажем, что в таком случае можно построить формальную (п- 1)-программу, в которой меньше чем п - 1 существенно мультипликативных шагов, и тем самым получить противоречие с предположением индукции.
В силу леммы D.3 формальная n-программа S содержит по крайней мере один существенно мультипликативный шаг, по крайней мере один из операндов которого зависит от ап. Пусть
Pi :=Рк 'Pi (D.7)
будет самым первым таким шагом, и пусть значением рк является полином вида сап + Q(x, а0,аг, ...,ап-г), с Ф 0. Тогда удаление из S всех шагов с номерами, большими i - 1, и замена шага р-п-х := ап шагом р-п-х := 0 дает программу S'', получающую полином 0_{х,а0,аъ...,ап-г) в качестве значения переменной Рк. Пусть т—наименьшее значение индекса переменной р, встречающееся в S'. Добавим к S' шаг Рт-г := с', где с' = -1/с, и шаг Pi :=Рт-г ■ Рк, который, заметим, не является существенно мультипликативным. Получаемая
программа строит полином -Q(x, а0, аг,..., ап-1); существенно мультипликативных шагов в ней на единицу меньше, чем среди шагов с номерами 1, 2,..., i в S. Обозначим эту программу через S".
Дальнейшие преобразования программы S имеют целью получение такой программы, которая содержит не более п - 1 существенно мультипликативных шагов и при этом находит некоторый полином, по модулю хп равный ап-гхп-г + ... + агх + а0. Мы видим, что если бы значением р-п-х было не ап, а тот полином, который строится с помощью S", то i-й шаг S привел бы к присваиванию переменной р; значения 0, а после окончания выполнения всех шагов мы бы получили
W = W{x, а0, аъ ..., ап-ъ c'Q{x, а0, аъ ..., an-i)).
В силу (D.6) подстановка an = c'Q{x,a0,a1, ...,an-1) в W даст нам
W = Р{х, а0, аъ ...,ап-ъ c'Q{x, a0, аъ ..., ап-г)) +
+ U\x,a0,a1,...,an-1)xn+1.
Принимая во внимание равенство Р = апхп +... +агх + а0, получаем W'eQ[x,a0)a1,...a„-1] и
W/ = a„-1xn-1 + ...+a1x + a0 (mod х").
Отбросим предварительный раздел формальной n-программы S и запишем шаги ее вычислительного раздела вслед за S", преобразуя
Приложение D
эти шаги следующим образом:
(a) если шаг не является шагом (D.7) или существенно мультипликативным шагом вида pt := pr • ps, t ^ k, то увеличиваем на i индекс в левой части и увеличиваем на i каждый из положительных индексов в правой части (неположительные индексы не изменяются);
(b) в правых частях всюду заменяем p-n-х на pi;
(c) каждый существенно мультипликативный шаг вида pt :=pr-ps, t^k, заменяем нейтральным шагом pt+i :=pt;
(d) шаг (D.7) заменяем нейтральным шагом p2i :=p-n-i.
Прибегая к замене (c), мы пользуемся независимостью от an полино
мов, являющихся значениями pr и ps, это позволяет не дублировать
существенно мультипликативные шаги, содержащиеся в S"; заверша
ющая замена (d) приводит нас к формальной (n - 1)-программе по
строения W', имеющей менее n - 1 существенно мультипликативных
шагов. □
В силу сказанного ранее, из лемм D.2, D.4 следует теорема D.1г.
Заметим, что замена каждого вычитания сложением с дополнительным домножением второго операнда на -1 не меняет числа существенно мультипликативных шагов. Поэтому доказательство теоремы D.1 сохраняет силу при рассмотрении сложения и вычитания в качестве аддитивных операций.
Известен алгоритм, который для вычисления значения произвольного полинома n-й степени требует n сложений и n умножений, это алгоритм («схема») Горнера:
anxn + an-гxn-г + ...+a1x + a0 = {... {anx + an-г)x + ... + aг)x + a0.
Таким образом, мы получили следующий результат:
Если рассматривать n в качестве размера входа
x,a0,a1, ...,an,
то как по числу сложений, так и по числу умножений схема Горнера является оптимальным в худшем случае алгоритмом вычисления значения anxn +... + aгx + a0 с помощью операций сложения и умножения.
Разумеется, полиномы какого-либо частного вида, как, например, xn, могут вычисляться с меньшими затратами.
1 В 1962 г. В.Я. Пан доказал утверждение теоремы D.1 в несколько более общей форме— см., например, [19, разд. 4.6.4, упр. 38]. Главные идеи доказательства, приведенного выше в этом приложении, взяты из [57].
Приложение E