Учитывая вектор коэффициентов и значение, какой самый быстрый способ вычислить многочлен?

Помнится, я где-то читал (может быть, кто-нибудь поможет вспомнить где), что есть метод, который является самым быстрым для вычисления многочлена. Что-то мне напоминает, что это как-то связано с формулой Виетты или с тем, что коэффициент нулевой степени является произведением коэффициентов нулевой степени любых множителей многочлена.

Я знаю, что Википедия говорит, что это схема Хорнера для оценки самого быстрого. Но я припоминаю, что вообще-то не так надо было оценивать - с корнями что-то было?

Все, что я знаю наверняка, это то, что существует метод вычисления полинома, который вызывает у вас чувство «о, как умно», когда вы его видите, но это не слишком сложно и отчасти очевидно.

Кто-нибудь добрый или достаточно умный, чтобы помочь мне?

Это что-то вроде «вы можете оценить P в x с помощью ...», а затем есть очень простая мелочь, которая на самом деле позволяет избежать каких-либо реальных сложений и умножений порядка полиномиальной степени.


person Cris Stringfellow    schedule 19.11.2011    source источник
comment
Может быть, лучше подходит на math.stackexchange.com?   -  person Dan Byström    schedule 19.11.2011
comment
Благодарю. можно ли вообще закрыть вопрос и автоматически его портировать? или... на самом деле я только что посмотрел туда и рискну здесь. с правкой, чтобы сделать его более подходящим....   -  person Cris Stringfellow    schedule 19.11.2011


Ответы (2)


Вы оцениваете многочлен более одного раза? Является ли многочлен особенно простым? Рассмотрим следующий полином:

f(a) = a^(14)

Если мы хотим уменьшить количество умножений, необходимых для вычисления f(a), мы можем вычислить минимальную цепочку сложения из addition- цепочка возведения в степень:

((a × a→b) × b→d) × d × d × b

Что показывает, что мы можем вычислить f(a), используя только 5 умножений. Для фиксированного многочлена с малыми коэффициентами это может дать значительную экономию. Википедия отмечает:

На практике ... возведение в степень кратчайшей аддитивной цепи в основном используется для небольших фиксированных показателей, для которых кратчайшая цепочка может быть предварительно вычислена и не слишком велика.

Для многих реальных случаев, когда f(a) может варьироваться, может подойти другой метод, но стоит отметить альтернативные решения!

person Hooked    schedule 10.05.2012
comment
Интересный. На что указывает символ → (стрелка)? О, я вижу, это сохранение переменной. Это действительно увлекательно! Большое спасибо за то, что побудили меня к этому. С тех пор мне интересно: каков быстрый метод поиска кратчайших цепочек сложения для произвольных показателей? Я думал, что бинарный метод всегда будет самым быстрым. Это действительно новаторский подход, поскольку он связан с чем-то другим, о чем я думал… показывает вам, насколько опасными могут быть предположения! Я даже не задавался вопросом, есть ли более быстрый способ, чем бинарный. Великолепно @Hooked! - person Cris Stringfellow; 04.06.2012
comment
@CrisStringfellow Насколько мне известно, не существует решений с полиномиальным временем для нахождения кратчайшей цепочки сложения, хотя я знаю, что вы можете найти приблизительные решения довольно быстро. Заданный вопрос выходит за рамки моей компетенции, хотя я думаю, что вы получите отличный ответ на math.stackexchange.com. Если вы спросите, пожалуйста, сделайте перекрестные ссылки на вопросы, чтобы мы могли следить за ответами. - person Hooked; 04.06.2012

Я думаю, вы ищете быстрое преобразование Фурье, это тоже хорошо, посмотрите это PowerPoint на БПФ. На самом деле БПФ полезен, когда вы хотите вычислить значение полинома в n разных точках, что составляет O (n log n) и очень быстрее, чем алгоритм Хорнера.

БПФ работает со степенью n-го корня единицы и использует отношение между ними, и из-за этого очень быстро, когда вы хотите вычислить значение n разных точек.

person Saeed Amiri    schedule 19.11.2011
comment
Подчеркну, что это не был оригинальный метод, который я видел, но он был очень интересным, и я думаю, что это, вероятно, лучшее, что я могу получить прямо сейчас. - person Cris Stringfellow; 20.11.2011
comment
извините, но мне больше нравится другой ответ. Сообщество, пожалуйста, сообщите, если изменение ответов считается ужасно плохой практикой! - person Cris Stringfellow; 04.06.2012
comment
@CrisStringfellow, успокойтесь, можно принимать ответы, которые лучше соответствуют вашим требованиям. - person Saeed Amiri; 04.06.2012
comment
Круто, спасибо! Но с некоторыми вещами нужно быть осторожным... например, с вопросами! Это может быть очень опасно!!! :( - person Cris Stringfellow; 06.06.2012