Please purchase a personal license.
Trang 1Please purchase a personal license.
Trang 2BÀI TOÁN ĐA TH Ứ C
Trang 3Bài toán đa th ứ c
Bài toán: Cho đa thức có dạng sau:
P(x) = anxn+ an-1xn-1+ an-2xn-2…+ a2x2+a1x+a0
Tính giá trị đa thức Trong đó biết giá trị A=[an,…,a0] , input x P(x)
Trang 4Thu ậ t toán cơ b ả n
Thuật toán:
result = a 0 + a 1 *x;
xpower = x;
for (int i=2;i<n;i++)
{ xpower = xpower *x;
result = result + a i *xpower;
}
Đánh giá thuật toán:
- Số phép cộng: 1+ (n-1) = n
- Số phép nhân: 1+ 2*(n-1) = 2n-1
Trang 5Thu ậ t toán Horner
Phân tích đa thức:
P(x) = anxn+ an-1xn-1+ an-2xn-2…+ a2x2+a1x+a0
({…[(anx+an-1)*x+an-2]*x+…+a2}*x+a1)*x+a0
Thuật toán:
result = a n ;
for (int i=n-1;i>=0;i )
{ result = result * x;
result = result + a i ;
}
Trang 6Thu ậ t toán Horner
Đánh giá thuật toán:
- Số phép cộng: n
- Số phép nhân: n
So với thuật toán cơ bản, thuật toán Horner có số phép nhân giảm ½ lần
Trang 7Thu ậ t toán ti ề n x ử lý h ệ s ố
Ví dụ: Tính x256
C1: for (int i=1;i<=256;i++)
result = result * x;
Thực hiện 255 phép nhân
C2: result = x*x;
result = result * result; // 3 times
Thực hiện 4 phép nhân
Trang 8Thu ậ t toán ti ề n x ử lý h ệ s ố
Thuật toán:
- Để sử dụng thuật toán này thì an=1, và n = 2k-1
- Đa thức P(x) lúc này có thể biểu diễn thành:
P(x) = (xj+b)*q(x) + r(x) trong đó j = 2k-1
- Tiếp tục làm tương tự đối với q(x) và r(x) như p(x)
- Vấn đề là phải chọn b cẩn thận
Trang 9Thu ậ t toán ti ề n x ử lý h ệ s ố
Đánh giá thuật toán:
P(x)=(x4+5)*[(x2-1)*(x+4)+(x+12)]+[(x2+1)*(x-11)+(x-26)]
- Số phép nhân: x2 1 phép nhân
x4 = x2*x2 1 phép nhân
3 phép nhân
- Số phép cộng: 10
So sánh với các thuật toán khác:
Trang 10T ổ ng k ế t
Bài tập: Phân tích đa thức sau theo 2 phương
pháp Horner và Xử lý hệ số
x7+6x6+4x4-2x3+3x2-7x+5