**Hornera algoritmo** estas matematika metodo uzata en cifereca analitiko, precize en polinoma kalkulo, aŭ por efike komputi la valoron de polinoma funkcio en iu punkto, aŭ por kalkuli kvocienton de polinomo per monomo {\displaystyle X-a}.

Komputado de valoro de polinoma funkcio en iu punkto
----------------------------------------------------

Estu {\displaystyle P=\lambda \_{n}X^{n}+\lambda \_{n-1}X^{n-1}+...+\lambda \_{0}} polinomo super komuta ringo {\displaystyle A} kaj estu {\displaystyle a} iu elemento de {\displaystyle A}.

Pri komputo {\displaystyle P(a)=\lambda \_{n}a^{n}+\lambda \_{n-1}a^{n-1}+...+\lambda \_{0}} eblas opinii, ke necesas unue komputi ĉiujn potencojn de {\displaystyle a}, multipliki poste tiujn per siaj koeficientoj {\displaystyle \lambda \_{k}}, kaj fine sumi la tial ricevitajn kvantojn. Se oni ankaŭ komputas {\displaystyle a^{n}} multiplikante {\displaystyle a} per si mem {\displaystyle n} fojoj, do por la komputado de {\displaystyle P(a)} necesas {\displaystyle n+(n-1)+...+2+1=n(n+1)/2} multiplikojn. Tiu kvanto kreskas kvadrate de la grado {\displaystyle n} de la polinomo. Rapida potencado ebligas pliefikigi la komputadon de {\displaystyle a^{n}} kaj do por {\displaystyle P(a)} la kvanto de necesaj multiplikoj tiam kreskas kiel {\displaystyle n\ln(n)}. Sed tiu ankoraŭ ne estas tiel rapida kiel la Hornera metodo.

Por komputi {\displaystyle P(a)} per la Hornera metodo, unue oni rearanĝu P(a) per jena maniero:

{\displaystyle P(a)=((...((\lambda \_{n}a+\lambda \_{n-1})a+\lambda \_{n-2})a+...)+\lambda \_{1})a+\lambda \_{0}}

Tiam sufiĉas komputi sekvante la ordon de la parentezoj. Tiu metodo necesas sole {\displaystyle n} multiplikojn. La komputtempo estas tiumaniere proksimume proporcia al grado de la polinomo (adicio estas multe pli rapida ol multipliko).

Komputado de kvociento de polinomo per monomo {\displaystyle X-a}
-----------------------------------------------------------------

Oni serĉu la kvocienton {\displaystyle Q} de la polinomo {\displaystyle P=\lambda \_{n}X^{n}+\lambda \_{n-1}X^{n-1}+...+\lambda \_{0}} en sia eŭklida divido per {\displaystyle X-a}. Oni havas la jenon:
{\displaystyle P=(X-a)Q+P(a)}

Estu {\displaystyle Q=q\_{n-1}X^{n-1}+q\_{n-2}X^{n-2}+...+q\_{1}X+q\_{0}}. Se identigi la samgradajn koeficientojn el la du membroj, tiam montriĝas ke:

{\displaystyle q\_{n-1}=\lambda \_{n}}
{\displaystyle q\_{k-1}=\lambda \_{k}+aq\_{k}} je ĉiuj *k* kiel 0 < *k* < *n*
La valoro de *P*(*a*) estas λ0 + *aq*0.

La tie komputataj *n* valoroj el la vico *q* precize estas la *n* sinsekvaj kvantoj komputitaj al la antaŭa ĉapitro dum la komputado de *P*(*a*). Tial sufiĉas memori tiujn sinsekvajn valorojn por povi skribi la kvocientan polinomon. La lasta valoro estas la resto.

Tabela ilustraĵo
----------------

Tabela prezentado de la Hornera metodo montras ĝian simplecon: ĉiu koeficiento de *Q* estas kalkulata multiplikante la koeficienton de la malsupra linio per *a* kaj adiciante al tiu produto la koeficienton de la supra linia.

|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
|  Koeficientoj de P  | *λ*n | ***λn - 1*** | *λn - 2* | ... | *λ1* | *λ0* |
| Koeficientoj de Q | ***qn - 1 =****λn* | *qn - 2 =****aqn - 1 + λn - 1*** | *qn - 3 =**aqn - 2 + λn - 2* | ... | *q0 =**aq1 + λ1* | *r =**aq0 + λ0* |

Cifereca ekzemplo: divido de {\displaystyle 4X^{3}-7X^{2}+3X-5} per {\displaystyle X-2}

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
|  Koeficientoj de P   | 4 | − 7 | 3 | − 5 |
| Koeficientoj de Q | 4 | 8 − 7 = 1 | 2 + 3 = 5 | *r* = 10 − 5 = 5 |

El ĉi tio rezultiĝas: {\displaystyle 4X^{3}-7X^{2}+3X-5=(X-2)(4X^{2}+X+5)+5}.