Professional Documents
Culture Documents
Chuong1 Tong Quan
Chuong1 Tong Quan
Chương 1
Tổng quan
GIẢI THUẬT ỨNG DỤNG
1 TRONG KINH DOANH
Giải thuật ứng dụng trong kinh doanh
Nội dung
Dữ liệu
Đối tượng
Cách thức
Giải Thuật
giải quyết
+ Giải
thuật = Chương
trình
dòng lệnh,..
phải sắp xếp và tìm kiếm, liên kết với nhau này là
vd: tìm mssv, sửa thông tin sv, .... chương
trình
acess
công thức bổ sung:
cấu trúc dữ liệu+giải thuật+giao diện
=chương trình
yêu cầu cần thiết vì nhu cầu thẩm mỹ
của khách hàng, người sử dụng
i=0 3 4 5 m dòng
n cột
i=1 5 9 3
i=2 4 4 6
i=3 4 3 8
4 4 6
Để in điểm thứ i của sv thứ j ta
sẽ dùng: diemj[i-1]
4 3 8
Mối quan hệ
Một cấu trúc đã chọn sẽ có những giải thuật
tương ứng xem mấy cái phương án
Khi cấu trúc dữ liệu thay đổi thì giải thuật cũng
thay đổi theo cho phù hợp
Cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý phát
huy tốt
Tổ chức cấu trúc dữ liệu trước, sau đó xây dựng
giải thuật xử lý.
Nói cách khác:
Cấu trúc dữ liệu quyết định giải thuật
GV: Nguyễn Văn Thọ - thonv@buh.edu.vn 14
Giải thuật ứng dụng trong kinh doanh
• Tính xác định nó phải chính xác, không gây nhầm lẫn, theo thứ tự của các
phần tử
thời gian chạy hết các phần tử, không có vụ
• Tính dừng (hữu hạn)chạy hoài không hết, cỡ trong mấy giây để ra
phần tử thôi. vd kiếm laptop, cỡ 3 đến 5 giây là
• Tính đúng đắn ra kết quả các laptop rồi
while(1<1000) => nó true là nó chạy quài
(cout>>"value";)
• Tính phổ dụng dễ sửa chữa, bảo trì
• Tính khả thi dễ chuyển hoá thành chương trình
Cung :.
a=0 = b2 – 4ac
True
End
GV: Nguyễn Văn Thọ - thonv@buh.edu.vn 18
Giải thuật ứng dụng trong kinh doanh
Các kiểu dữ liệu định sẵn trong C gồm các kiểu sau:
Kiểu cơ bản chỉ lưu các giá trị đơn, không lưu
được các đối tượng dữ liệu phức hợp.
Đối tượng dữ liệu phức hợp là những đối tượng
dữ liệu được tạo nên từ nhiều kiểu dữ liệu cơ bản
hoặc kiểu dữ liệu phức hợp khác.
Trong thực tế các đối tượng dữ liệu ngoài việc lưu
trữ dữ liệu còn có các thao tác xử lý trên đối
tượng dữ liệu này nữa.
Khuyết điểm của kiểu cơ bản là không đáp ứng
được đầy đủ các yêu cầu lưu trữ dữ liệu thực tế, vì
nó chỉ có thể: Lưu giá trị đơn, không có được các
thao tác nghiệp vụ trên dữ liệu này.
GV: Nguyễn Văn Thọ - thonv@buh.edu.vn 23
Giải thuật ứng dụng trong kinh doanh
– Thời gian thực hiện thuật toán nhà lập trình thì xét khả năng phức
tạp của ct, tạo ra thời gian chạy
Phân tích thời gian thực hiện giải thuật y chang bên trên
Phân tích thời gian thực hiện giải thuật y chang bên trên
Tiến trình phân tích thời gian thực hiện giải thuật y chang bên
trên
lớn hay nhỏ
• Bước 1: Phân tích kích thước dữ liệu vào
• Bước 2: Phân tích (toán học) tìm ra giá trị
tốt nhất, trung bình, và giá trị xấu nhất cho
mỗi đại lượng cơ bản.
0 1000 phần tử
7 7 7 7
2 5 6 8 10
X[i] = x[j];
X[j] = tg ;
}
}
f(n) = 2n + 6
• Ví dụ : c g(n) = 4n
đây là chặn trên với c=4
f(n) = 2n+6,
g(n) = n và c = 4 ,
n0=3
• f(n)= O(n)
thầy có lấy vd fn=5n3+2n2+13n+6 luôn luon nhỏ hơn
5n3+2n3+12n3+6n3=26n3
bất đẳng thức trên luôn đúng với n>=1
vậy n0=1 và c là 26 và độ phức tạp là On^3
xem thêm gg doc
g(n) = n
N0 = 3
n
GV: Nguyễn Văn Thọ - thonv@buh.edu.vn 45
Giải thuật ứng dụng trong kinh doanh
f ( n ) =O ( g ( n )) f ( n ) = ( g ( n ))
cg(n) f(n)
f(n)
cg(n)
n0 n0
f ( n ) =( g ( n ))
c2g(n)
f(n)
c1g(n)
n0
Một số ví dụ
• Ví dụ 1. Mảng A các số thực, cỡ n, cần tìm
xem mảng có chứa số thực x không.
(1) i = 0; O(1) O(n) xem coi là có vai trò cha con, lồng nhau
đồ không
T(n)=O(n)
i=0 i=1 i=2 i=3 i=4
A= 5 8 2 1 5
Tìm x=5? đầu mảng nên trường hợp tốt nhất rồi O(1)
Một số ví dụ On
Case1: for (i=0; i<n; i++) (i=0,j=0,j=1,j=2…n)i=1j=0,j=1,j=2..j=n)
3 dòng lồng nhau
for (j=0; j<n; j++) On
k++; O1 O(n2) =On *On
cùng cấp nên là lấy cái max
Case 2: for (i=0; i<n; i++) chạy tới n lần thì là On là On^2
k++;
for (i=0; i<n; i++) On lồng nhau là On^2
O(n 2)
for (j=0; j<n; j++) On
k++;
Case 3: for (int i=0; i<n-1; i++)On vì có là n-mấy cũng là On
là lồng nhau là On^2
for (int j=0; j<i; j++) On
int k+=1; O1 O(n2)
Một số ví dụ
int MaxSubSum1(const int a[], int n) {
int maxSum=0;
Một số ví dụ
int MaxSubSum2(const int a[], int n) {
int maxSum=0;
if (thisSum>maxSum)
2
T(n)=O(n )
maxSum=thisSum;
}
}
return maxSum;
}
Một số ví dụ
int MaxSubSum4(const int a[], int n) {
int maxSum=0, thisSum=0;
}
thisSum=0;
O(n)
return maxSum;
}
Một số ví dụ
Sum=0
for (j=0;j<N;j++) On On^3
O(N3)
Sum++; N^2
Một số ví dụ
Ví dụ: sắp xếp dãy
void BubbleSort(int a[], int n)
{ int i,j,temp;
On*O(n-i)=On(n-i) mà i=1
(1) for(i= 1; i<n; i++) On =>O(n^2-n)
(2) for(j=n-1; j>=i;j--) O(n-i) lấy mũ lớn nhất=>O(n^2)
(3) if (a[j] < a[j-1]) {
(4) temp=a[j-1];
(5) a[j-1] = a[j]; O1
(6) a[j] = temp;
}
}
Một số ví dụ
• Lệnh (3), (4), (5) và (6) đều tốn O(1)
• Vòng lặp (2) thực hiện (n-i) lần, mỗi lần O(1) do đó vòng lặp
(2) tốn O((n-i)*1) = O(n-i).
• Vòng lặp {1},i chạy từ 1 đến n-1, thời gian thực hiện của
vòng lặp (1)
• Độ phức tạp của giải thuật là chỗ này trong vid là
for(i=0;i<=n-2;i++)
n 1
n(n 1)
T(n) = (n i) = = O(n 2 )
i =1 2
• Logarithms:
– xa = b logx b = a
| k +1|
for large N and k -1
N
A N +1 1
i =0
A = i
A 1