**روش هورنر** روشی کارآمد برای محاسبه مقدار یک چندجمله‌ای در نقطهٔ مورد نظر است.

برای مثال چندجمله‌ای مقابل را در نظر بگیرید :
{\displaystyle P(x)=a\_{0}+a\_{1}x+a\_{2}x^{2}+...+a\_{n}x^{n}}

الگوریتم بدیهی برای محاسبه مقدار چندجمله‌ای در نقطه مورد نظر
------------------------------------------------------------

یک الگوریتم بدیهی برای اینکه مقدار این چند جمله‌ای را در نقطه‌ای مانند {\displaystyle x=x\_{0}} به دست آوریم، این است که
هر جملهٔ این چندجمله‌ای را مجزا حساب کرده و همه را با هم جمع کنیم. در ادامه شبه کد این الگوریتم آمده‌است:

```
Naive-Poly-Eval(A : Poly, x)
 y = ۰
 for k = ۱ to length(A)
  do p = ۱
     for j = ۱ to k
       do p = p*x
     y = y + A[k]*p
 return y

```

لازم به توضیح است که در شبه کد بالا، A عنوان آرایه‌ای است که ضرایب چندجمله‌ای را در خودش نگه می‌دارد.

### تحلیل

نگاهی مختصر به تحلیل این الگوریتم می‌اندازیم. مشخص است که حلقه داخلی بیشترین زمان اجرای را دارد و زمان اجرای کل الگوریتم هم از
تتا این زمان اجرا خواهد بود. بنابراین با جمع زدن تعداد دفعات اجرای حلقه داخلی به زمان اجرای n^2 می‌رسیم. که زمان اجرای به نسبت زیادی هست.

ایده بهینه کردن این الگوریتم
----------------------------

با کمی دقت در می‌یابیم، این زمان اجرای بالا از این جهت ایجاد می‌شود که ما همیشه برای محاسبهٔ توان n ام x\_{0} واقعاً n بار عمل
ضرب را انجام می‌دهیم. بدون توجه به اینکه ما می‌توانیم با انجام دادن فقط یک عمل ضرب این توان را از توان n-۱ آن بدست آوریم.

بنابراین یک ایده برای اینکه الگوریتم را بهتر کنیم این است که همیشه مقدار توان محاسبه شده یک مرحله قبل را نگه داریم تا توان مرحله کنونی را فقط با یک عمل ضرب بدست آوریم. در نتیجه زمان اجرای الگوریتم خطی می‌شود که کارا تر از الگوریتم قبلی است.

روش هورنر
---------

**ویلیام جورج هورنر** با در نظر گرفتن همین ایده پیاده‌سازی دیگری از این الگوریتم را ارائه می‌کند، در ادامه شبه کد این الگورتم آمده‌است:

```
Horner-Poly-Eval(A : Poly, x)
 y = ۰
 k = n : length(A)
 while k>= ۰
   do y = A[k] + x*y
      k = k - ۱
 return y

```

### روند اجرای الگوریتم هورنر

به روند اجرای این الگوریتم نگاهی دقیق تر می‌اندازیم.

ابتدا چندجمله‌ای را به صورت زیر ساده می‌کنیم:

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

تا اینجا احتمالاً مشخص شده که این الگوریتم چه طوری عمل می‌کند.

برای روشن شدن قضیه به مقدار y در ابتدای حلقه نگاه می‌اندازیم:

```
۱ y = ۰
۲ y = A[n]
۳ y = A[n-۱] + y*x
4 y = A[n-۲] + y*x
    .
    .
    .
n y = A[۰] + y*x

```

### تحلیل

برای تحلیل این الگوریتم در نظر داشته باشید فقط یک حلقه وجود دارد که به اندازهٔ طول آرایه A تکرار می‌شود. دستورهای داخل حلقه از O(۱) هستند. بنابراین این الگوریتم هم خطی است.

جستارهای وابسته
---------------

* چندجمله‌ای
* روش نیوتن رافسون

منابع
-----

* بهزاد خداکرمی-الیاس هنگامیان اصل (۱۳۸۶)، «۱»، *آنالیز عددی ۱ و جبر خطی*، آزاده، ص. ۱۷، شابک ۹۷۸-۹۶۴-۵۰۱-۲۴۲-۵
* محمد قدسی (۱۳۸۸)، «۳»، *داده ساختارها و مبانی الگوریتم‌ها*، موسسه فرهنگی فاطمی، ص. ۶۳، شابک ۹۷۸-۹۶۴-۳۱۸-۵۴۹-۷
* 

| * ن
* ب
* و
چندجمله‌ای‌ها و توابع چندجمله‌ای |
| --- |
| برحسب درجه | 
* چندجمله‌ای
* تابع ثابت
* تابع خطی
	+ معادله خطی
* تابع درجه دو
	+ معادله مربعی
* تابع درجه سه
	+ معادله درجه سه
* تابع درجه چهار
	+ معادله درجه چهار
* Quintic function (5)
* Sextic equation (6)
* Septic equation (7)

 |
| برحسب خواص | 
* چندجمله‌ای
* تک‌جمله‌ای
* دوجمله‌ای
* سه‌جمله‌ای
* Irreducible
* Square-free
* Homogeneous
* Quasi-homogeneous

 |
| ابزارها و الگوریتم‌ها | 
* Factorization
* Greatest common divisor
* Division
* روش هورنر
* Resultant
* Discriminant
* پایه گروبنر

 |