روش هورنر
روش هورنر روشی کارآمد برای محاسبه مقدار یک چندجملهای در نقطهٔ مورد نظر است.
برای مثال چندجملهای مقابل را در نظر بگیرید :
الگوریتم بدیهی برای محاسبه مقدار چندجملهای در نقطه مورد نظر
ویرایشیک الگوریتم بدیهی برای اینکه مقدار این چند جملهای را در نقطهای مانند به دست آوریم، این است که هر جملهٔ این چندجملهای را مجزا حساب کرده و همه را با هم جمع کنیم. در ادامه شبه کد این الگوریتم آمدهاست:
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 ام واقعاً 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
روند اجرای الگوریتم هورنر
ویرایشبه روند اجرای این الگوریتم نگاهی دقیق تر میاندازیم.
ابتدا چندجملهای را به صورت زیر ساده میکنیم:
تا اینجا احتمالاً مشخص شده که این الگوریتم چه طوری عمل میکند.
برای روشن شدن قضیه به مقدار y در ابتدای حلقه نگاه میاندازیم:
۱ y = ۰ ۲ y = A[n] ۳ y = A[n-۱] + y*x 4 y = A[n-۲] + y*x . . . n y = A[۰] + y*x
تحلیل
ویرایشبرای تحلیل این الگوریتم در نظر داشته باشید فقط یک حلقه وجود دارد که به اندازهٔ طول آرایه A تکرار میشود. دستورهای داخل حلقه از O(۱) هستند. بنابراین این الگوریتم هم خطی است.
جستارهای وابسته
ویرایشمنابع
ویرایش- بهزاد خداکرمی-الیاس هنگامیان اصل (۱۳۸۶)، «۱»، آنالیز عددی ۱ و جبر خطی، آزاده، ص. ۱۷، شابک ۹۷۸-۹۶۴-۵۰۱-۲۴۲-۵
- محمد قدسی (۱۳۸۸)، «۳»، داده ساختارها و مبانی الگوریتمها، موسسه فرهنگی فاطمی، ص. ۶۳، شابک ۹۷۸-۹۶۴-۳۱۸-۵۴۹-۷
- http://en.wiki.x.io/wiki/Horner_scheme