Bài giảng Cấu trúc dữ liệu và giải thuật - Chương I: Tổng quan về giải thuật và cấu trúc dữ liệu
Trong phạm vi tin học, ta có thể quan niệm bài toán (Problems) là công việc mà ta muốn máy tính thực hiện
VD: In dòng chữ ra màn hình, giải phương trình bậc 2, quản lý cán bộ trong một cơ quan
Diễn đạt bài toán thành 2 thành phần
Input: Thông tin đầu vào
Output: Thông tin đầu ra
Cấu trúc dữ liệu: là tập các dữ liệu có quan hệ với nhau, được tổ chức theo những phương thức nhất định
Giải thuật (thuật toán-Algorithm): là một dãy hữu hạn các thao tác chặt chẽ và rõ ràng được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác đó, ta nhận được mục tiêu định trước
Tính xác định
Ở mỗi bước của thuật toán các thao tác phải hết sức rõ ràng: Không thể gây nên sự nhập nhằng, tuỳ tiện. Nói một cách khác là trong cùng một điều kiện, hai bộ xử lý cùng thực hiện một bước của giải thuật thì phải cho cùng một kết quả
Tính hữu hạn dừng
Giải thuật bao giờ cũng phải dừng sau một số hữu hạn bước
Tóm tắt nội dung tài liệu: Bài giảng Cấu trúc dữ liệu và giải thuật - Chương I: Tổng quan về giải thuật và cấu trúc dữ liệu
Cấu trúc dữ liệu và giải thuật (Data structure and Algorithms)
Nội dung chương trình
Chương I
TỔNG QUAN VỀ GIẢI THUẬT VÀ CẤU TRÚC DỮ LIỆU
Khái niệm về cấu trúc dữ liệu và giải thuật
Một số cú pháp điều khiển
Đánh giá độ phức tạp của giải thuật
Chương II.
TÌM KIẾM VÀ SẮP XẾP
I. Các giải thuật tìm kiếm nội
Tìm kiếm tuyến tính
Tìm kiếm nhị phân
II. Các giải thuật sắp xếp nội
Chọn trực tiếp (Selection sort)
Chèn trực tiếp (Insertion sort)
Đổi chỗ trực tiếp (Interchange Sort)
Nổi bọt ( Buble sort)
Sắp xếp cây (Heap sort)
Sắp xếp dựa trên phân hoạch (Quick sort)
Sắp xếp trộn trực tiếp (Merge sort )
Nội dung chương trình
Chương III.
CẤU TRÚC DỮ LIỆU ĐỘNG
Kiểu dữ liệu con trỏ
Danh sách liên kết-khái niệm
Danh sách liên kết đơn
Tổ chức danh sách đơn
Các thao tác cơ bản trên danh sách đơn
Tạo danh sách
Duyệt danh sách
Chèn phần tử vào danh sách
Xoá phần tử khỏi danh sách
3. Sắp xếp dánh sách ( lý thuyết+đọc thêm )
4. Các cấu trúc đặc biệt của danh sách đơn
Stack
Queue
IV. Một số cấu trúc dữ liệu dạng danh sách liên kết khác
Danh sách liên kết kép
Hàng đợi 2 đầu
Danh sách liên kết có thứ tự
Danh sách liên kết vòng
Danh sách có nhiều mối liên kết
Nội dung chương trình
Chương IV.
CẤU TRÚC CÂY
Khái niệm về cây
Cây nhị phân
Một số tính chất của cây nhị phân
Biểu diễn cây nhị phân
Duyệt cây nhị phân
Biểu diễn cây tổng quát
III. Cây nhị phân tìm kiếm
Tìm một phần tử
Thêm một phần tử
Huỷ một phần tử
IV. Cây nhị phân cân bằng
Cây nhị phân cân bằng hoàn toàn
Cây nhị phân cân bằng
Nội dung chương trình
Phần II.
Bài tập+Thực hành + Ceminar
- Cài đặt các chương thuật toán trong phần lý thuyết đã học
Nội dung chương trình
Tài liệu tham khảo
Trần Hạnh Nhi-Dương Anh Đức , Giáo trình cấu trúc dữ liệu và giải thuật ĐH Quốc gia Tp Hồ Chí Minh
Đỗ Xuân Lôi , Cấu trúc dữ liệu và giải thuật , NXB Khoa học kỹ thuật , 1996
Robert Sedgewick , Cẩm nang thuật toán , tập 1, NXB Khoa học kỹ thuật , 1994, bản dịch của nhóm tác giả ĐH TH Tp . HCM
N. Wirth: Algorithms+Data structures=Programs (Prentice Hall, 1976)
V v
Tổng quan về các giải thuật và cấu trúc dữ liệu
Chương I
Khái niệm về cấu trúc dữ liệu và giải thuật
Một số cú pháp điều khiển
Đánh giá độ phức tạp của giải thuật
I. Khái niệm về cấu trúc dữ liệu và giải thuật
Trong phạm vi tin học , ta có thể quan niệm bài toán (Problems) là công việc mà ta muốn máy tính thực hiện
1. Khái niệm bài toán
VD : In dòng chữ ra màn hình , giải phương trình bậc 2, quản lý cán bộ trong một cơ quan
* Diễn đạt bài toán thành 2 thành phần
Input: Thông tin đầu vào
Output: Thông tin đầu ra
Ví dụ
Giải thuật ( thuật toán -Algorithm): là một dãy hữu hạn các thao tác chặt chẽ và rõ ràng được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác đó , ta nhận được mục tiêu định trước
2. Khái niệm Cấu trúc dữ liệu và giải thuật
Cấu trúc dữ liệu : là tập các dữ liệu có quan hệ với nhau , được tổ chức theo những phương thức nhất định
3. Các đặc trưng của giải thuật
a. Tính xác định
Ở mỗi bước của thuật toán các thao tác phải hết sức rõ ràng : Không thể gây nên sự nhập nhằng , tuỳ tiện . Nói một cách khác là trong cùng một điều kiện , hai bộ xử lý cùng thực hiện một bước của giải thuật thì phải cho cùng một kết quả
b. Tính hữu hạn dừng
Giải thuật bao giờ cũng phải dừng sau một số hữu hạn bước
3. Các đặc trưng của giải thuật
c. Tính đúng đắn
Sau khi thực hiện tất cả các thao tác của thuật toán ta phải được kết quả mong muốn
d. Tính phổ dụng
Thuật toán có thể giải bất kỳ bài toán nào trong cùng một lớp các bài toán
3. Các đặc trưng của giải thuật ( tiếp )
e. Tính có đại lượng vào , đại lượng ra
Khi bắt đầu giải thuật bao giờ cũng nhận các đại lượng vào mà ta thường gọi là dữ liệu vào
Sau khi kết thúc , một thuật toán bao giờ cũng cho một số đại lượng ra tuỳ theo các chức năng mà thuật toán đảm nhiệm , chúng thường được gọi là dữ liệu ra .
3. Các đặc trưng của giải thuật ( tiếp )
f. Tính có hiệu quả
Tính có hiệu quả của giải thuật được đánh giá dựa trên các tiêu chuẩn sau
Dung lượng bộ nhớ cần có
Số các phép tính cần thực hiện
Thời gian cần thiết để chạy
Có dễ hiểu không
Có dễ cài đặt trên máy không
4. Ngôn ngữ diÔn đạt giải thuật
a. Liệt kê từng bước ( ngôn ngữ tự nhiên )
Liệt kê các bước thực hiện giải thuật theo thứ tự thực hiện
Ví dụ
b. Sơ đồ khối
Khối bắt đầu hoặc kết thúc
Khối thao tác
Nhập dữ liệu
Khối điều kiện
Chỉ hướng thực hiện của giải thuật
Ví dụ
4. Ngôn ngữ diÔn đạt giải thuật ( tiếp )
c. Dùng ngôn ngữ phỏng trình ( tựa ngôn ngữ lập trình )
Sử dụng cú pháp của một ngôn ngữ lập trình + Ngôn ngữ tự nhiên để diễn đạt giải thuật
d. Dùng ngôn ngữ lập trình
Dùng ngôn ngữ lập trình nào đó để viết giải thuật
Hạn chế :
Phụ thuộc vào ngữ nghĩa , cú pháp nặng nề , gò bó
Không được nhiều người dùng ưa thích và sử dụng
Ví dụ
Ví dụ
Lưu ý: Trong quá trình học môn học này , chủ yếu dùng ngôn ngữ phỏng trình tựa Pascal /C để diễn đạt giải thuật
Dữ liệu : Số, ký tự , hình ảnh , âm thanh
Thuộc tính của một kiểu dữ liệu bao gồm :
Tên kiểu dữ liệu
Mièn giá trị
Kích thức lưu trữ
Tập các phép toán tác động lên KDL đó
5. Kiểu dữ liệu
KDL cơ bản :
Rời rạc : Số nguyên , ký tự , logic, liệt kê , miền con
Liên tục : Số thực
KDL cấu trúc
Kiểu chuỗi (String)
Kiểu Mảng (Array)
Kiểu bản ghi ( Recorrd )
Kiểu tập hợp (Union)
Các kiểu dữ liệu
5. Kiểu dữ liệu
KDL trừu tượng
Danh sách móc nối (List)
Cây (Tree)
Đồ thị (Graph)
Tập hợp (union)
Các kiểu dữ liệu
5. Kiểu dữ liệu
6. Mối quan hệ giữa cấu trúc dữ liệu và giải thuật
North Wirth say that:
Data Structures+Algorithms = Programs
Để xây dựng giải thuật phù hợp phải xác định nó tác động trên các kiểu dữ liệu nào
Ví dụ : Làm nhuyễn các hạt đậu xay chứ không băm
Khi chọn lựa cấu trúc dữ liệu cần phải hiểu rõ những thao tác ( giải thuật ) sẽ tác động lên nó
Ví dụ : Biểu diễn điểm của sinh viên dùng số chứ không dùng chữ
- Cấu trúc dữ liệu thay đổi giải thuật thay đổi theo
Ví dụ
7. Tiêu chuẩn đánh giá CTDL
a. Phản ánh đúng thực tế
Quan trọng nhất , quyết định tính đúng đắn của toàn bộ bài toán
c. Tiết kiệm tài nguyên hệ thống
CPU, bộ nhớ
VD: Khai báo tháng trong năm : Nên dùng kiểu byte thay vì kiểu int
b. Phù hợp với các thao tác trên đó
Giúp tăng tính hiệu quả của bài toán
Tổng quan về các giải thuật và cấu trúc dữ liệu
Chương I
Khái niệm về cấu trúc dữ liệu và giải thuật
Một số cú pháp điều khiển
Đánh giá độ phức tạp của giải thuật
II. Một số cú pháp điều khiển
II. Một số cú pháp điều khiển
Có dạng : S1; S2; S3; Sn
Với Si là các lệnh trọng chương trình
Để thực hiện câu lệnh tuần tự thì chương trình thực hiện lần lượt từ S1 đến Sn . Đầu ra của S1 là đầu vào của S2, đầu ra của S2 là đầu vào của S3
1. Cú pháp tuần tự
Phải tôn trọng thứ tự thực hiện công việc , công việc nào làm trước thì phải viết lệnh trước
Sơ đồ hoạt động
Có dạng V:=E
với V chỉ tên biến , tên hàm ; E chỉ biểu thức
2. Câu lệnh gán
Có dạng : Begin S1; S2; , Sn End;
Nó cho phep ghép nhiều câu lệnh lại để được coi như một câu lệnh
3. Câu lệnh ghép
II. Một số cú pháp điều khiển
Có dạng : If B Then S;
B là một biểu thức logic, S là một câu lệnh khác
4. Câu lệnh điều kiện
Có dạng : If B Then S1 Else S2;
B là một biểu thức logic, S1, S2 là một câu lệnh khác
Hoặc
Sơ đồ hoạt động
II. Một số cú pháp điều khiển
Có dạng : for i:=m to n do S;
Thực hiện câu lệnh S với i lấy giá trị nguyên từ m tới n (n>=m), với bước nhảy tăng bằng 1
5. Câu lệnh lặp xác định
Hoặc
Có dạng : for i:=n downto m do S;
Thực hiện tương tự như câu lệnh trên với bước nhảy giảm bằng 1
II. Một số cú pháp điều khiển
Có dạng : while B do S;
Trong đó B là biểu thức logic; S là câu lệnh ;
Chừng nào B có giá trị True thì thực hiện S
6. Câu lệnh lặp không xác định
Hoặc
Có dạng : repeat S until B;
Trong đó B là biểu thức logic; S là câu lệnh ;
Lặp lại cho tới khi B có giá trị True
Sơ đồ hoạt động
II. Một số cú pháp điều khiển
Có dạng : go to n;
n là số hiệu của một bước trong chương trình
Thường hạn chế việc dùng Go to
7. Câu lệnh nhảy
Có dạng : read( );
write();
8. Câu lệnh vào , ra
II. Một số cú pháp điều khiển
Chương trình con Hàm
function ( danh sách tham số )
Begin
S1; S2; S3; ; Sn
Return
End;
9. Chương trình con
II. Một số cú pháp điều khiển
9. Chương trình con
Chương trình con Thủ tục
procedure ( danh sách tham số )>
Begin
S1; S2; S3; ; Sn
End;
II. Một số cú pháp điều khiển
Tổng quan về các giải thuật và cấu trúc dữ liệu
Chương I
Khái niệm về cấu trúc dữ liệu và giải thuật
Một số cú pháp điều khiển
Đánh giá độ phức tạp của giải thuật
III. Đánh giá độ phức tạp của giải thuật
Thời gian
Bộ nhớ
Thực nghiệm
Nhược điểm :
Phải cài đặt bằng ngôn ngữ lập trình cụ thể
Phụ thuộc trình độ người cài đặt
Chọn mẫu thử
Phụ thuộc nhiều vào phần cứng
Đánh giá theo hướng xấp xỉ tiệm cận qua các khái niệm toán học : O(), o(),
Quan tâm đến trường hợp trung bình
Các tiêu chuẩn đánh giá độ phức tạp
Nếu thời gian thực hiện một giải thuật là T(n)=c.n 2 ( với c là hằng số ) thì ta nói : Độ phức tạp về thời gian của giải thuật này có cấp n 2 và ký hiệu T(n)=O(n 2 ) ( ký hiệu chữ O lớn )
2. Độ phức tạp về thời gian của giải thuật
Một cách tổng quát ta có thể định nghĩa :
Một hàm f(n ) được xác định là O(g(n ))
f(n )= O(g(n ))
và được gọi là có cấp g(n ) nếu tồn tại các hàng số c và n 0 sao cho :
f(n ) c .g(n ) khi n n 0
Ví dụ
Quy tắc tổng :
Giả sử T 1 (n) và T 2 (n) là thời gian thực hiện của 2 đoạn chương trình P 1 và P 2 mà T 1 (n)=O(f(n)) và T 2 (n)=O(g(n)) thì thời gian thực hiện P 1 và P 2 kế tiếp nhau sẽ là :
T(n )=T 1 (n)+T 2 (n)=O(max(f(n), g(n)))
3. Xác định độ phức tạp về thời gian
Quy tắc nhân
Nếu tương ứng với P 1 và P 2 là T 1 (n)= O(f(n )), T 2 (n)= O(g(n )) thì thời gian thực hiện P 1, P 2 lồng nhau sẽ là :
T(n )=T 1 (n).T 2 (n)= O(f(n).g(n ))
Ví dụ
Ví dụ
4. Độ phức tạp về thời gian của các cú pháp điều khiển
Câu lệnh gán , đọc , viết , nhẩy :
Có thời gian thực hiện =c ( hằng số ) đánh giá là O(1)
b. Câu lệnh ghép
Begin S1; S2; , Sn End;
Thời gian thực hiện theo luật cộng
Khái niệm : Phép toán tích cực : Là phép toán mà thời gian thực hiện nó không ít hơn thời gian thực hiện các phép toán khác . Ví dụ :
4. Độ phức tạp về thời gian của các cú pháp điều khiển
c. Câu lệnh điều kiện
If B then S1 Else S2;
Thời gian thực hiện là O(Max(f 1 (n), f 2 (n)))
Trong đó : Thời gian thực hiện S 1 là T 1 (n)=O(f 1 (n));
S 2 là T 2 (n)=O(f 2 (n))
4. Độ phức tạp về thời gian của các cú pháp điều khiển
d. Câu lệnh lặp While
While B Do S;
Nếu thời gian thực hiện S là T(n )= O(f(n )) và có g(n ) lần thực hiện S trong vòng lặp While ( tối đa ) thì thời gian thực hiện vòng lặp là O(f(n).g(n ))
e. Câu lệnh lặp Repeat
Repeat S1; S2; , Sn Until B;
Nếu thời gian thực hiện S1, S2, , Sn là T(n )= O(f(n )) và số lần lặp tối đa là g(n ) thì thời gian thực hiện vòng lặp là O(f(n).g(n ))
4. Độ phức tạp về thời gian của các cú pháp điều khiển
f. Câu lệnh lặp xác định
for i:=m to n do S;
Nếu thời gian thực hiện S là T(n )= O(f(n )) và có g(n ) lần lặp For thì thời gian thực hiện là O(f(n).g(n ))
Ví dụ về đánh giá độ phức tạp
5. Phân lớp các thuật toán
Phức tạp đa thức : O(1), O(n), O(n.logn ), O(n 2 ), O(n 3 )
Phức tạp hàm mũ : O(2 n )
Phức tạp giai thừa : O(n!)
Mục tiêu thiết kế giải thuật : Đưa bài toán về độ phức tạp đa thức
Đồ thị của một số hàm số
So sánh các độ phức tạp
Bảng giá trị của một số hàm số
4
8
4
2
2
1
2.147.483.648
32768
1024
160
32
5
6536
4096
256
64
16
4
256
512
64
24
8
3
16
64
16
8
4
2
2
1
1
0
1
0
2n
n3
n2
nlog2n
n
long2n
So sánh các độ phức tạp
The End !
Ví dụ : Chương trình quản lý điểm của sinh viên
Chương trình quản lý điểm của sinh viên , cần lưu điểm số của 3 sinh viên .
Do mỗi sinh viên có 4 điểm số ứng với 4 môn học dữ liệu có dạng bảng sau :
SV
Môn 1
Môn 2
Môn 3
Môn 4
SV 1
5
6
7
0
SV 2
6
5
8
8
SV 3
5
5
9
7
Ví dụ : Chương trình quản lý điểm của sinh viên
Phương án 2 : Sử dụng mảng hai chiều 3 X 4, phần tử A[i,j] là điểm thi môn j của sinh viên i
7
9
5
5
8
8
5
6
0
7
6
5
A=
Phương án 1 : Sử dụng mảng một chiểu 12 phần tử , nhóm 4 phần tử là điểm của 1 SV
7
9
5
5
8
8
5
6
0
7
6
5
SV1 SV2 SV3
Truy xuất điểm j của sinh viên i
Bảng ( dòng i, cột j)= A[(i-1)* số cột+j ]
Dùng sơ đồ khối
Begin
m,n
m=n
m>n
UCLN = m
End
Đúng
Sai
m:=m-n
Đúng
n:=n-m
Sai
Tìm UCLN của 2 số nguyên dương m và n
Dùng ngôn ngữ phỏng trình
Function UCLN (m,n ) { Tìm ước số chung lớn nhất của hai số nguyên dương m và n}
Begin
Nhập m, n nguyên dương
While mn do
If m>n then m:=m-n else n:=n-m
UCLN:=m
End;
Dùng ngôn ngữ lập trình
# includ e
# include
void main()
{
int m, n;
printf("Nhap 2 so nguyen duong m,n\n");
scanf("%d%d",&m,&n );
while (m!=n)
{
if (m>n)
m=m-n;
else n=n-m;
}
printf("UCLN =%d",m);
getch ();
}
Bài toán : Tìm UCLN của 2 số nguyên dương m và n
Dùng liệt kê từng bước
Bước 1 : Nhập hai số nguyên dương
Bước 2 : Nếu m=n sang bước 4 ; ngược lại sang bước 3
Bước 3 : Nếu m>n thì đặt m=m-n về bước 2
Nếu m<n thì đặt n=n-m về bước 2
Bước 4 : Trả lời UCLN=m, Kết thúc
Bài toán : Tìm UCLN của 2 số nguyên dương m và n
Ví dụ : Diễn đạt bài toán thành 2 thành phần
Diễn đạt bài toán giải phương trình bậc 2
Input : Các hệ số a,b,c
Outpu t: Thông báo nghiệm x1, x2; nghiệm kép x; hoặc vô nghiệm
Diễn đạt bài toán Tìm ước số chung lớn nhất
Input : Hai số nguyên dương m, n
Outpu t: ước số chung lớn nhất của m, n
Sơ đồ hoạt động của lệnh điều kiện
B
S
True
False
B
S 1
True
False
S 2
Sơ đồ hoạt động của lệnh lặp không biết trước
B
S
True
False
True
B
S
False
Hoặc
f. Câu lệnh lặp xác định
For i:=1 to n do x:=x+1
Thời gian thực hiện là O(n.1)=O(n)
For i:=1 to n do
For j:=1 to n do x:=x+1
Thời gian thực hiện là O(n.n)=O(n 2 )
Ví dụ : Xác định độ phức tạp
Tính : e x =1+x/1!+x 2 /2!++ x n /n !
Program EXP1 ;
{ Tính từng số hạng rồi cộng lại }
Begin
Read(x); s:=1;
For i:=1 to n do
Begin
P:=1;
For j:=1 to i do p:=p*x/j;
S:=s+p;
End;
End;
Phép toán tích cực p:=p*x/j;
Nó thực hiện 1+2++n=n(n+1)/2 lần
Độ phức tạp T(n)=O(n 2 )
Ví dụ : Xác định độ phức tạp
Tính : e x =1+x/1!+x 2 /2!++ x n /n ! ( cách 2)
Tách x 2 /2!=x/1!.x/2, , x n /n !=x n-1 /(n-1)!.x/2
Progam EXP2;
Begin
Read(x); s:=1;p:=1;
For i:=1 to n do
Begin
p:=p*x/i;
S:=s+p;
End;
Phép toán tích cực p:=p* x/i ;
Nó thực hiện n lần
Độ phức tạp T(n)=O(n)
Ví dụ : Xác định phép toán tích cực
Tính : e x =1+x/1!+x 2 /2!++ x n /n !
Tách x 2 /2!=x/1!.x/2, , x n /n !=x n-1 /(n-1)!.x/2
Progam EXP2;
Begin
Read(x); s:=1;p:=1;
For i:=1 to n do
Begin
p:=p*x/i;
S:=s+p;
End;
Phép toán tích cực p:=p* x/i ;
Đánh giá độ phức tạp bằng ký pháp O()
a. f(n )=n 3 +4n+4
g(n )=n 3 : vì chọn hằng số c=9 và n 0 =1 thì
n 3 +4n+4=1
Độ phức tạp f(n )=O(n 3 )
b. f(n )=500n 2 +4nlogn+4n+3
g(n )=n 2 : chọn hằng số c=511 và n 0 =1 thì
4nlogn=1
4n=1
3=1
500n 2 +4nlogn+4n+3<= 500n 2 + 4n 2 + 4n 2 + 3n 2 =511n 2
Độ phức tạp f(n )=O(n 2 )
Đánh giá độ phức tạp bằng ký pháp O()
c. f(n )=n 4 +4n 3 +4n 2 +10000
g(n )=n 4 vì chọn hằng số c=10009 và n 0 =1
n 4 +4n 3 +4n 2 +10000=1
n 4 +4n 3 +4n 2 +10000=1
Độ phức tạp f(n )=O(n 4 )
d. f(n )=n!+100n 3 +n 2
g(n )=n! vì chọn hằng số c=102 và n 0 =10 ta có
n!+100n 3 +n 2 =10
n!+100n 3 +n 2 =10
Độ phức tạp f(n )= O(n !)
For i:=1 to n do
c[i,i ]:=c[i,i]+100
P1
Thời gian thực hiện P1 là : T 1 (n)= O(n )
S:=0;
For i:=1 to n do
For j:=1 to n do
If c[i,j ]>0 then S:= S+c[i,j ]
P2
Thời gian thực hiện P2 là : T 2 (n)=O(n 2 )
T hời gian thực hiện P 1 và P 2 kế tiếp nhau sẽ là : T(n )=T 1 (n)+T 2 (n)= O(max( n , n 2 ))= O( n 2 )
Ví dụ : Quy tắc cộng
For i:=1 to N.N do
Ví dụ : Quy tắc nhân
For j:=1 to N do
S:= S+c[j ]
Đoạn chương trình P1.
Thời gian thực hiện P1 là : T 1 (n)= O(n ). Vì thực hiện n lần tính tổng
Đoạn chương trình P2.
Thời gian thực hiện P2 là : T 2 (n)=O(n 2 ). Vì thực hiện n 2 lần đoạn chương trình P1
Thời gian thực hiện P 1, P 2 lồng nhau sẽ là :
T(n )=T 1 (n)T 2 (n)= O(n . n 2 )=O( n 3 )
Cú pháp tuần tự
S1
S2
S3
Sn
File đính kèm:
bai_giang_cau_truc_du_lieu_va_giai_thuat_chuong_i_tong_quan.ppt

