Задача
По заданному ненулевомуxзначениеx8можно найти за три арифметических действия:
Решение
Заметим сначала, что степени x с показателями2,4,8, ... ,2k можно вычислить за k умножений, именно: x2=x · x , x4=x2 · x2 , ... , x2k=x2k-1 · x2k-1. Отсюда следует, что xn=
x2log 2 n нельзя найти быстрее чем за l=[log 2 n]операций (через[z]обозначена целая часть действительного числа z , т.е. такое целое
число m , что m
z<m+1).
а) Так как 29=512<1000<1024=210, т.е. [log _2 1000]=9, то x1000 нельзя вычислить быстрее чем за 9 действий. С другой стороны, x1000= x1024:(x16 · x8), на что потребуется 11 умножений и 1 деление. Можно доказать, что этот способ вычисления самый экономный.
Замечание. В "Кванте" #11 за 1973 год была опубликована задача из книжки Е.А.Морозовой и И.С.Петракова, Международные математические олимпиады:
Дан ящик сахарного песка, чашечные весы и гирька в 1г. Как возможно быстрее отвесить покупателю 1кг сахару? (Указать схему уравновешиваний.)
Несмотря на различие в формулировках, в действительности задачи M240а) и только что приведенная в точности совпадают, и теперь вы уже можете указать ответ и на этот вопрос.
б) Опишем теперь способ вычисления xn . Он основывается на двоичном представлении n 2 числа n .
Представим n в виде суммы
n=εl · 2l+εl-1 · 2l-1+...+ ε1 · 2+ε0,
j
l-1, а εl=1. Тогда двоичное представление n имеет вид:
n 2=εl εl-1 ... ε1 ε0 (*)
Обозначим через E(n) число единиц среди цифр εj :
εl+εl-1+...+ε1+ε0=
E(n)
l+1,
(1) Если 1
E(n)
, то перемножим те многочлены x2j ,
для которых εj=1 (для этого нам потребуется E(n)-1 умножений);
ввиду равенства(*), результат ранен xn , общее же число умножении равно
l+E(n)-1.
Но
l+E(n)-1
l+
<
log _2 n+1.
(2) Если
<E(n)
l+1, то
H(n)
.
=2l+1-n . Очевидно, что n 2+
2=10 ... 0( l+1нуль) и что поэтому E (
)
H(n)+1. Как и в случае (1), вычислим многочлен x
за l+E(
)-1умножений. Затем вычислим
многочлен x2l+1(так как многочлен x2l уже найден, то на это
потребуется еще одно умножение) и, наконец, многочлен xn=x2l+1:
x
(одно деление). Итак, в этом случае потребовалось l+
E (
)умножений и одно деление, т.е. всего l+E (
)
+1действий, где
l+E (
)+1
l+H(n)+2
l+1
log _2 n+1.
Замечание. Многочлен x1000 был вычислен нами способом(2). Однако существуют многочлены, для которых ни способ(1), ни способ(2) не являются наилучшими. Например, многочлен x170 может быть вычислен за 9 умножений (найдите такой способ сами!), хотя 170 2=10,101,010, так что E(170)=H(170)=4, [log _2 170]=7; при способе(1) нужно 10 умножений, а при способе(2)– 11 умножений и одно деление.
Ответ
Ответ задачи отсутствует
Чтобы оставлять комментарии, войдите или зарегистрируйтесь