Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Схема Горнера


Автор: Gordon 3.3.2008, 19:48
Всем доброго времени суток!  smile 

Прошу прощения, если такая тема уже затрагивалась, но я не нашел...

Вобщем дело такое: нужно найти значение многочлена (к примеру x^7 + 2x^6 + 6X^5 + 3X^4 + 7x^3 + 5x + 4), в инете нужной инфы не нашел (все какие-то отрывки и т.п.)... Меня собственно интересует что представляет собой схема Горнера (т.е. программно реализовать её на ЯП думаю смогу, самому интересно, главное поять саму суть алгоритма). 

Автор: PPS05 3.3.2008, 21:08
Суть в том, что это то же самое, что и x * (x * (x * (x * (x * (x * (x) + 2) + 6) + 3) + 7) + 5) + 4
А это значит, что значение можно вычислить линейно:
f = 1
f = f * x + 2
f = f * x + 6
f = f * x + 3
...
f = f * x + 4

Автор: Gordon 4.3.2008, 20:43
PPS05, спасибо за ответ, но только такая штука получается: f(1) по схеме Горнера совпвдает с простым расчетом... А f(2) - нет!   smile 

Автор: Elfet 4.3.2008, 20:54
А разве вот тут не всё объяснено? smile http://ru.wikipedia.org/wiki/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%93%D0%BE%D1%80%D0%BD%D0%B5%D1%80%D0%B0

Автор: Gordon 4.3.2008, 21:45
Цитата(Elfet @  4.3.2008,  20:54 Найти цитируемый пост)
А разве вот тут не всё объяснено? 


Да как-то нет... Или я чего-то не догоняю...  smile 

Автор: maxim1000 4.3.2008, 21:52
Цитата(Elfet @  4.3.2008,  20:54 Найти цитируемый пост)
А разве вот тут не всё объяснено?

нет, там объяснено, как делить многочлены по схеме Горнера

а имеется в виду, насколько я понял, уменьшение количества вычислений с помощью группировки членов

если недостаточно вышеописанного (хотя, как по мне, достаточно), то можно посмотреть тут:
http://www.pm298.ru/mnog3.shtml

Автор: Elfet 4.3.2008, 22:44
А вот это разве не объяснение? smile
Цитата
b(0) = a(0), b(k) = a(k) + c * b(k − 1).

Автор: maxim1000 5.3.2008, 00:13
Цитата(Elfet @  4.3.2008,  22:44 Найти цитируемый пост)
А вот это разве не объяснение?

просто тут нужен дополнительный переход от остатка деления многочленов к значению в точке
а через группировку и вынесение за скобки, ИМХО, проще и понятнее

Автор: Elfet 5.3.2008, 15:44
Дело вкуса smile

Автор: Gordon 5.3.2008, 19:55
Спасибо за ответы... Я еще гдето выдел вынесение за скобки, так вроде по проще, но только  значения не всегда свпадают, тчо может быть не так? 

Автор: v2v 5.3.2008, 20:03
Цитата(PPS05 @  3.3.2008,  21:08 Найти цитируемый пост)
Суть в том, что это то же самое, что и x * (x * (x * (x * (x * (x * (x) + 2) + 6) + 3) + 7) + 5) + 4
А это значит, что значение можно вычислить линейно:
f = 1
f = f * x + 2
f = f * x + 6
f = f * x + 3
...
f = f * x + 4 

тут опечатка : 
f1 = x
насколько я понимаю ...

Автор: Gordon 6.3.2008, 19:07
Спасибо всем за ответы!!! Вроде разобрался... smile 

Автор: PPS05 8.3.2008, 17:37
Цитата(v2v @  5.3.2008,  19:03 Найти цитируемый пост)
тут опечатка : f1 = xнасколько я понимаю ...


Неправда  smile 

Автор: olmmen 11.3.2008, 18:30
Здравствуйте.

Конкретно для этого примера x^7 + 2x^6 + 6X^5 + 3X^4 + 7x^3 + 5x + 4 

На сколько я могу судить, это выражение (   x * (x * (x * (x * (x * (x * (x) + 2) + 6) + 3) + 7) + 5) + 4   ) не верно. 
Небольшая корректировка - чтобы добиться 7x^3 +5x следует дописать так

  x * (x * x * (x * (x * (x * (x  + 2) + 6) + 3) + 7) + 5) + 4

либо вот так (что по сути одно и тоже, но 2 вариант предпочтительнее ибо не нарушает структуру выражения)

x * (x * ( x * (x * (x * (x * (x + 2) + 6) + 3) + 7) + 0) + 5) + 4

удачи  smile 


Автор: Objegog 7.9.2022, 07:14
Модератор: Сообщение скрыто.

Автор: hipAppops 10.9.2022, 05:04
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)