Снижение сложности полиномиального умножения

Я пытался понять это в течение 3 дней и ничего не получил. Мне нужно реализовать полиномиальное умножение (умножить 2 квадратных уравнения). Они похожи:

( a1 x^2 + b1 x + c1 ) * ( a2 x^2 + b2 x + c2 );

Но более сложная часть - реализовать его в умножении на 5 коэффициентов. Я уменьшил его до 6. Например, a1 * b1, ( a1 + a2 ) * ( b1 + b2 ) считается одним умножением. Но (a1 x + a2) * (b1 x + b2) считается за 4 (a1 b1, a1 b2, a2 ​​b1, a2 b2).


person Brahadeesh    schedule 16.02.2011    source источник
comment
Не могли бы вы опубликовать сокращение, которое у вас есть, до 6 умножений?   -  person threenplusone    schedule 16.02.2011


Ответы (3)


Вы можете взглянуть на алгоритм Toom-3, используемый в умножении с повышенной точностью. Ссылка: умножение Toom-Cook.

По сути, вы оцениваете каждый многочлен при x=-2,-1,0,+1,бесконечности, используя только сложения и сдвиги, а затем умножаете эти 5 значений, чтобы получить значения произведения при x=-2,-1,0, +1, бесконечность. Последний шаг — вернуться к коэффициентам результата.

Для P(X) = A*X^2 + B*X + C значения при x=-2,-1,0,+1,бесконечность таковы:

P(-2) = 4*A - 2*B + C  (the products here are bit shifts)
P(-1) = A - B + C
P( 0) = C
P(+1) = A + B + C
P(oo) = A

Продукт R(X) = T*X^4 + U*X^3 + V*X^2 + W*X + K и значения:

R(-2) = 16*T - 8*U + 4*V - 2*W + K
R(-1) = T - U + V - W + K
R( 0) = K
R(+1) = T + U + V + W + K
R(oo) = T

Вам известны значения R(x) = P(x)*Q(x) для x=-2,-1,0,+1,бесконечность, и вам нужно решить эту линейную систему, чтобы получить коэффициенты T,U,V,W,K.

person Eric Bainville    schedule 16.02.2011
comment
Спасибо тебе за это. Я не сплю уже 3 дня. - person Brahadeesh; 17.02.2011

Хм, кажется, я нашел ответ.

вы заменяете его на ( x * ( A1 * x + b1 ) + c1 ) * ( x * ( a2 * x + b2 ) + c2 );

и там у вас есть 5 умножений.

Извините, это было отредактировано, мой первый ответ был неправильным и действительно имел 9 умножений.

person Valentin Kuzub    schedule 16.02.2011
comment
Я думаю, он считает это как 9 умножений. - person ThomasMcLeod; 16.02.2011
comment
Да, это 9 умножений. Если хочешь, чтобы я уточнил, я это сделаю. Но это довольно очевидно. - person Brahadeesh; 16.02.2011
comment
@Brahadeesh Это совсем не очевидно. В этой формуле пять умножений. Вы пометили вопрос как оптимальный, но затем, кажется, настаиваете на расширении своих уравнений. Это то, что вы делаете, когда хотите что-то неоптимальное. - person David Heffernan; 16.02.2011
comment
@ Дэвид, прости. Я думал, что реализация 5 умножения будет оптимальной. - person Brahadeesh; 17.02.2011
comment
@валентин. Я не думаю, что это тоже 5 умножений. Пусть (a1 x + b1)=m1, (a2 x + b2)=m2. Произведение (m1 * x + c1)(m2 * x + c2) требует c1*c2, m1*m2 и (m1+c1)(m2+c2) {пока 3 умножения}, так как m1c2+m2c1 можно записать как ( m1+c1)(m2+c2) - m1m2 - c1c2. Но m1m2 требует еще 3 умножения. Итак, всего 6 умножений. - person Brahadeesh; 17.02.2011
comment
Значит, ты не умеешь считать? очень плохо, как это может быть 6 умножений, когда у него 5 знаков * =) хорошо, я сделаю это для вас (a1*x+b1) M1, XM1+C1 =M2, (A2*x+b2)=M3 (xM3+c2)=M4 , M3*M4= M5 - person Valentin Kuzub; 17.02.2011
comment
@ Дэвид, я думаю, мне нужно быть яснее. Я имел в виду коэффициент умножения. c1*c2 — коэффициент умножения. Но с1*х нет. Я не хочу умножать на x. х неизвестно. Мне просто нужны коэффициенты результирующего многочлена. - person Brahadeesh; 17.02.2011
comment
@valentin Пожалуйста, отправьте мой последний комментарий Дэвиду. a1*x+c1 не является коэффициентом умножения. - person Brahadeesh; 17.02.2011
comment
Ах, извините, хорошо, теперь я понимаю, что вы имеете в виду. Хороший вопрос, однако, Toom-Cook выглядит серьезно! - person Valentin Kuzub; 17.02.2011

Я также нашел решение для умножения на 6, которое может помочь вам или другим решить.

M1 := (a1 + b1)*(a2 + b2)  
M2 := (a1 + c1)*(a2 + c2)  
M3 := (b1 + c1)*(b2 + c2)  
M4 := a1 * a2  
M5 := b1 * b2  
M6 := c1 * c2

Затем это дает:

M4 * x^4 + 
(M1 - M4 - M5) * x^3 + 
(M2 - M4 - M6 + M5) * x^2 +
(M3 - M5 - M6) * x +
M6
person threenplusone    schedule 16.02.2011
comment
Спасибо за публикацию. У меня было такое же решение. - person Brahadeesh; 17.02.2011