Вот нижняя оценка количества умножений:
Рассмотрим алгоритм, использующий сложения, вычитания и умножения, и вычисляющий
![$\sum\limits_{i = 1}^n a_i F_i(\vec{x})+F_0(\vec{x})$ $\sum\limits_{i = 1}^n a_i F_i(\vec{x})+F_0(\vec{x})$](https://dxdy-01.korotkov.co.uk/f/0/f/5/0f58cf816200a71fd2838dc88ebe075282.png)
.
Будем считать "правильные" умножения, в которых хотя бы один из сомножителей зависит от каких-то
![$a_i$ $a_i$](https://dxdy-03.korotkov.co.uk/f/6/5/e/65ed4b231dcf18a70bae40e50d48c9c082.png)
, и докажем, что их не менее
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
. По индукции.
База.
![$n=1$ $n=1$](https://dxdy-04.korotkov.co.uk/f/3/d/2/3d2be9e2108301e9097fa4bc5104664182.png)
. Для вычисления
![$a_1 F(\vec{x}) + F_0(\vec{x})$ $a_1 F(\vec{x}) + F_0(\vec{x})$](https://dxdy-03.korotkov.co.uk/f/6/f/f/6ffb92312af2c82d7eb27635ab936cc382.png)
нужно одно правильное умножение.
Переход.
![$n>1$ $n>1$](https://dxdy-04.korotkov.co.uk/f/3/5/8/358039a361da9e2940dba6fc766af1c482.png)
. Пусть алгоритм имеет сложность(кол-во правильных умножений)
![$c$ $c$](https://dxdy-04.korotkov.co.uk/f/3/e/1/3e18a4a28fdee1744e5e3f79d13b9ff682.png)
. Рассмотрим первое правильное умножение. Оно вычисляет произведение
![$(\sum\limits_{i=1}^n \alpha_i a_i + A(\vec{x}))(\sum\limits_{i=1}^n \beta_i a_i + B(\vec{x}))$ $(\sum\limits_{i=1}^n \alpha_i a_i + A(\vec{x}))(\sum\limits_{i=1}^n \beta_i a_i + B(\vec{x}))$](https://dxdy-04.korotkov.co.uk/f/f/1/9/f1919fbdfc1a685030deb46f6ef0dfa382.png)
. Без ограничения общности
![$\alpha_1 = 1$ $\alpha_1 = 1$](https://dxdy-02.korotkov.co.uk/f/9/c/d/9cdc3b418104600ba7b38bf3d4af4a3282.png)
.
Рассмотрим новый алгоритм, который работает так: сначала он вычисляет
![$a_1 = - \sum\limits_{i=2}^n - A(\vec{x})$ $a_1 = - \sum\limits_{i=2}^n - A(\vec{x})$](https://dxdy-01.korotkov.co.uk/f/8/1/f/81f6429e2b388734a4dcb7b48ecd338a82.png)
, а затем работает так же, как исходный. Так как в этом случае
![$(\sum\limits_{i=1}^n \alpha_i a_i + A(\vec{x})) = 0$ $(\sum\limits_{i=1}^n \alpha_i a_i + A(\vec{x})) = 0$](https://dxdy-04.korotkov.co.uk/f/b/d/8/bd8f24e7b0cb2d335ba5248b6dc9882b82.png)
, первое правильное умножение можно убрать, т.е. мы получили алгоритм вычисления какой-то функции
![$\sum\limits_{i=2}^{n}a_i G_i(\vec{x}) + G_0(\vec{x})$ $\sum\limits_{i=2}^{n}a_i G_i(\vec{x}) + G_0(\vec{x})$](https://dxdy-03.korotkov.co.uk/f/2/4/5/245d86de7616ab5ed03ad3d0f0ad8bb482.png)
, имеющий сложность
![$c-1$ $c-1$](https://dxdy-04.korotkov.co.uk/f/7/4/0/7409daaa830e98443014a7c10b082a7082.png)
. По предположению индукции
![$c-1\geq n-1$ $c-1\geq n-1$](https://dxdy-03.korotkov.co.uk/f/a/3/6/a367da2480dde2fe83f620d6c178445f82.png)
.
-- Пт сен 11, 2009 19:22:17 --Тут есть неточности, но их в принципе можно устранить (например, надо указать, что
![$F_i$ $F_i$](https://dxdy-03.korotkov.co.uk/f/e/1/7/e17c35f619f835117e1ff8e25d5f8a9c82.png)
должны быть неконстантными, линейно независимыми и проверить это для
![$G_i$ $G_i$](https://dxdy-03.korotkov.co.uk/f/a/b/8/ab80de912d15e049e5b345e3a41299f682.png)
)
Это изложение на основе статьи Винограда "On the Number of Multiplications Required to Compute Certain Functions" и шестой главы "Algebraic Complexity Theory", авторы Burgisser, Clausen, Shokrollahi.
-- Пт сен 11, 2009 19:27:10 --Задачка попроще: за сколько операций сложения можно вычислить сумму вида:
Конкретно для 15 я уже не помню значение. Для
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
есть оценка
![$\log n + \frac{\log n}{\log \log n} (1+o(1))$ $\log n + \frac{\log n}{\log \log n} (1+o(1))$](https://dxdy-01.korotkov.co.uk/f/8/c/4/8c4a563a0b9cc604c881ef07b0ec20c482.png)