Professional Documents
Culture Documents
baigiangTRR c4
baigiangTRR c4
*Ví dụ:
y
Không phải
3 hàm
Đều là
hàm
* Hàm tổng, hàm nhân, hàm ngược
Hàm f1, f2 là A đến R. Khi đó f1+ f2 và f1.f2 cũng là các hàm từ
A đến R đƣợc định nghĩa nhƣ sau:
(f1+f2)(x)= f1(x) + f2(x)
f1f2(x)=f1(x).f2(x)
Ví dụ: cho f1(x)=x2 và f2(x)=x+3 xác định f1(x) + f2(x)
Nút thao tác: hình chữ nhật. Các lệnh đƣợc ghi trong đây.
Nút điều
Nút thao tác
kiện
Nút điều kiện: hình thoi. Dùng để kiểm tra thông tin đúng, sai.
Cung: là những đoạn thẳng có hƣớng, chỉ đƣờng đi của thuật toán.
9
Giải phương trình bậc hai
Bắt đầu
Nhập a, b, c
Đúng Sai
a=0 = b2 - 4ac
Kết thúc
* Ngôn ngữ lập trình
Từ những bƣớc làm ngoài thực tế cần có những câu lệnh, cấu trúc
điều khiển.. của ngôn ngữ lập trình giúp cho máy tính hiểu và thực
hiện thuật toán.
* Giải phương trình bậc hai (dùng ngôn ngữ lập trình C)
Chƣơng trình có khởi đầu và kết thúc, các lệnh của thân chƣơng trình
nằm trong main() {}
Để viết một nội dung ra màn hình có lệnh printf();
Nhập dữ liệu vào từ bàn phím scan();
Có khối điều khiển if (bieuthuc) (khối lệnh) else (khoi lenh);
11
#include “stdio.h”
main()
{
float a, b, c, delta, x1,x2;
Printf(“\n Nhap a, b, c:” );
Scanf(“%f%f%f, &a&b&c);
Delta = b*b -4*a*c;
If (delta <0.0) printf(“\n PT vo Nghiem”);
Else if (delta==0.0) printf(“\n PT co Nghiem kep x1,2=%8.2f”, -b/(2*a));
Else
{
printf(“\n PT co hai Nghiem”);
printf(“\n x1=%8.2f” , (-b +sqrt(delta))/(2*a));
printf(“\n x2=%8.2f”,(-b –sqrt(delta))/(2*a));
} 12
}
4.3 ĐỘ TĂNG CỦA HÀM
Hàm đặc trƣng và biểu diễn cho mối quan hệ giữa các đại lƣợng.
Khi đại lƣợng này thay đổi, kéo theo sự thay đổi của đại lƣợng liên
quan. Vấn đề cần thiết là ta phải hiểu đƣợc sự thay đổi đó nhƣ thế
nào? Nhanh hay chậm. Đó là độ tăng của hàm.
Một trong những khái niệm thƣờng đƣợc dùng để phân tích độ tăng
của hàm là “O”.
*Định nghĩa O
Cho f và g là hai hàm từ tập các số nguyên dƣơng (hoặc số thực) vào
tập các số thực. Ta nói f(x) là O(g(x)) nếu tồn tại hai hằng số C và k
sao cho |f(x)| C|g(x)| với mọi x > k
13
Nhận thấy cặp giá trị C và k không phải là duy nhất, đồng thời nếu
f(x) là O(g(x)) mà h(x) là hàm thoả mãn |g(x)| <|h(x)| với x >k thì ta
cũng có f(x) là O(h(x)).
*Định lý
Cho f(x) =anxn + an-1xn-1 + ….+a1x +a0 ở đây an, an-1,..,a0 là dãy các
số thực. Khi đó f(x) là O(xn)
Chứng minh định lý có thể dùng bất đẳng thức tam giác.
Thật vậy, với mọi x > 1 thì
|f(x)|=|anxn + an-1xn-1 + ….+a1x +a0| < |an|xn+|an-1|xn-1+ … + |a1|x +|a0|
|𝑎𝑛 1| |𝑎1| |𝑎0|
14
=xn(|a n|+ − + …+ − + ) n
x (|a n| + |an-1| +…. + |a1| +|a0|)
𝑥 𝑥𝑛 1 𝑥𝑛
*Độ tăng của tổ hợp hàm
Cho f1(x) là O(g1(x)) và f2(x) là O(g2(x)). Khi đó f1(x)+f2(x) là
O(max{|g1(x)|,|g2(x)|})
Hệ quả : cho f1(x) và f2(x), cả hai đều là O(g(x)) thì (f1+f2)(x) là O(g(x)).
Nếu f1(x) là O(g1(x)) và f2(x) là O(g2(x)) thì (f1.f2)(x) là O(g1(x).g2(x))
*Ví dụ 1:
Tính ƣớc lƣợng O của hàm giai thừa và hàm logarit của hàm giai thừa.
Vì mỗi số hạng trong n! đều không vƣợt quá n nên ta có :
n!=1.2.3...n n.n….n=nn Chứng tỏ n! là O(nn). Lấy logarit hai vế thì:
logn!
15
hoặc bất kỳ một phép tính sơ cấp nào đó xuất hiện trong thuật toán.
4.4 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
*Minh họa cho độ tăng của hàm bằng vẽ đồ thị
Mô tả thuật toán:
Bƣớc 1: Đặt giá trị Max cần tìm là phần tử đầu a1 của dãy.
Bƣớc 2: So sánh số nguyên tiếp theo (ai) với giá trị Max hiện thời,
nếu nó lớn hơn giá trị Max thì gán luôn Max là số nguyên đó.
Bƣớc 3: Lặp lại bƣớc 2 (nếu vẫn còn số nguyên của dãy chƣa xét)
Bƣớc 4: Dừng khi không còn số nguyên nào của dãy. Khi đó giá trị
cần tìm là Max hiện thời. 20
#include “stdio.h”
void NhapMang(int a[], int n)
{
for(int i = 0;i < n; ++i)
{
printf("\nNhap phan tu a[%d] = ", i);
scanf("%d", &a[i]);
}
Max==a[0];
for(i=1; i<n;i++) if a[i]> Max Max==a[i];
printf(“gia tri lon nhat trong day la %d ”,Max);
} 21
Đánh giá độ phức tạp:
Chú ý đến đoạn chƣơng trình so sánh và gán giá trị cho Max;
Với mỗi a[i] của dãy đều dùng hai phép so sánh, một là để xác định
chƣa đi đến phần tử cuối cùng của dãy, một để xác định nó có lớn
hơn Max hay không. Phép so sánh đƣợc tiến hành từ phần tử thứ
hai trở đi. (n-1)*2 phép so sánh
Cuối cùng cần một phép so sánh để thoát khỏi vòng lặp. 1 phép
so sánh
Tổng số lần so sánh là (n-1)*2+1=2*n-1. Vậy thuật toán có độ phức
tạp O(n) độ phức tạp tuyến tính
22
BÀI TẬP
1. Dùng định nghĩa để chứng minh rằng
a) f(x)=x4+9x3+ 4x+7 là O(x4)
b) f(x)=2x+17 là O(3x)
23
BÀI TẬP
4. Ta định nghĩa: Cho g là hàm từ tập A đến tập B và f là hàm từ
tập B đến tập C. Hợp thành của các hàm f và g, ký hiệu là fog,
được xác định bởi : (fog)(a)=f(g(a))
24
25