Identit yTHUẬT TOÁN SẮP XẾP CHÈN Cách sử dụng những mã giả 6- Các thành phần mảng được truy cập bằng cách đặt tả tên mảng theo sau là chỉ số trong các dấu ngoặc vuông.. Hệ ký hiệu Θ tt•
Trang 1
BÁO CÁO TIỂU LUẬN
TĂNG TRƯỞNG CỦA HÀM
VÀ PHÂN TÍCH THUẬT TOÁN
Giáo viên hướng dẫn: TS Hoàng Quang Thực hiện: Hồ Thủy Sơn
Nguyễn Hữu Lương
Hồ Thị Thu Thủy Nguyễn Thị Phương Ngọc
Lê Thị Thanh Châu
ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC KHOA HỌC
Trang 2NỘI DUNG TRÌNH BÀY
Giới thiệu thuật toán Sắp xếp chèn (Thủy Sơn)
Thiết kế thuật toán (Thanh Châu)
5 Các hàm thông thường (Thu Thủy)
Trang 3THUẬT TOÁN SẮP XẾP CHÈN
Đầu vào: Cho một dãy n số (a1, a2…an)
Đầu ra: Phép hoán vị (a1’, a2’,….an’)
thỏa mãn a1’<=a2’<=an’
Ví dụ: Cho mảng A với dãy số chưa được sắp xếp A = <5, 2, 4,
6, 1, 3> và tiến hành xây dựng mã giả để viết thuật toán sắp xếp chèn theo thứ tự tăng dần và kết quả sẽ là A = <1, 2, 3, 4, 5, 6>
Trang 4THUẬT TOÁN SẮP XẾP CHÈN
- Đầu tiên ta xem chỉ số j như là con bài
hiện tại đang ở trên tay Cho vòng lặp For
chạy bởi j nó sẽ chia mảng A thành 2
đoạn A[1 j - 1] đây là đoạn cần được
sắp xếp và A[j + 1 n] là số con bài còn
lại ở trên bàn chưa được đưa vào
- Chỉ số j dời từ trái sang phải qua mảng Với mỗi lần lặp của vòng lặp For thành phần A[j] được lấy ra khỏi mảng Sau đó bắt đầu tại vị trí j-1, các thành phần liên tiếp được dời về bên phải một vị trí cho đến khi tìm thấy vị trí đúng đắn cho A[j] tại điểm mà
nó được chèn vào.
Trang 6Identit y
Trang 7THUẬT TOÁN SẮP XẾP CHÈN
Cách sử dụng những mã giả
1- Thụt đầu dòng để nêu rỏ cấu trúc khối.
2- Cấu trúc vòng lặp while, for, và repeat và những cấu trúc có điều
kiện như if, then, và else được thể hiện giống nhau như trong pascal 3- Ký tự "►" để ghi chú hoặc giải thích một đoạn lệnh
4- Phép gán nhiều biến cho 1 giá trị nào đó như: i ← j ← e tức là cả 2 biến i và j là có giá trị e nó nên được xem là tương đương như là phép gán j ← e theo sau phép gán i ← j.
5- Biến (như là i, j, và key) là biến cục bộ trong thủ tục đã cho trên Chúng ta không nên sử dụng biến toàn cục với những mục đích không rỏ
Trang 8Identit y
THUẬT TOÁN SẮP XẾP CHÈN
Cách sử dụng những mã giả
6- Các thành phần mảng được truy cập bằng cách đặt tả tên mảng theo sau là chỉ số trong các dấu ngoặc vuông Ví dụ A[i] nêu rỏ thành phần thứ i trong mảng A
7- Dữ liệu phức hợp thường được tổ chức thành các đối tượng bao hàm các thuộc tính hoặc các trường Để truy cập 1 trường cụ thể ta dùng tên trường theo sau là tên đối tượng của nó trong các dấu ngoặc vuông
Ví dụ ta xem 1 mảng như 1 đối tượng có thuộc tính length nêu rỏ số lượng thành phần mà nó chứa Để đặt tả số lượng thành phần trong mảng A ta viết Length[A]
8 – Việc cấp phát bộ nhớ sẽ được hiểu ngầm
Trang 9PHẦN 3 THIẾT KẾ THUÂẬT TOÁN
Trang 10Nguyên lý “Chia để tri” (divide and conquer)
- Chia bài toán thành các bài toán con tương
tự với bài toán ban đầu nhưng kích thước nhỏ hơn.
- Giải quyết các bài toán con đó bằng phương pháp đệ quy.Nếu kích thước của các bài toán
con này là nhỏ thì giải quyết bằng cách trực
tiếp
- Kết nối những cách giải quyết trên để tạo ra một phương pháp giải quyết cho bài toán gốc.
Trang 11Ứng dụng nguyên lý “divide and conquer”
vào thuật toán sắp xếp hòa nhập
Input: dãy số gồm n phần tư
Output: dãy n đã sắp xếp
Trang 12THU T TOAN MERGE-SORT Â
Trang 13Th tuc con Merge u
• 15 i := i + 1
• 16 else A[k] := R[j]
• 17 j := j + 1
Trang 15Bước 2 MS(2,5,4,5,9)
Trang 16Bước 3 MS(2,5,4,5,9)
Trang 172.3.2.Phân tích thuật toán “chia để tri”
Vì thời gian thực hiện công thức truy hồi của nguyên lý “chia để tri” là
dựa trên 3 bước cơ bản:
Nên ta có công thức truy hồi như sau:
Trang 182.3.3 Phân tich thu t toan Merge sort â
Áp dụng nguyên lý “ chia để trị” để thành lập công thức truy hồi cho
thuật toán này:
Hay
Trang 19PHẦN 4: HỆ KÝ HIỆU TIỆM CẬN
Các ký hiệu dùng để mô tả thời gian thực hiện
tiệm cận của một thuật toán được định nghĩa
là tập hợp các số tự nhiên N={1,2,3….}.
Nó thường định nghĩa trên kích thước dữ liệu
vào là số nguyên (integer)
Tuy nhiên, ký hiệu dễ dàng mở rộng trên miền là
tập số thực hoặc giới hạn của tập hợp con các
số tự nhiên
Trang 211 Hệ ký hiệu Θ
))(
()
()
Trang 22Identit y
Trang 231 Hệ ký hiệu Θ (tt)
• Định nghĩa của Θ(g(n)) yêu cầu mọi phần tử
))(
()
(n g n
phải là tiệm cận không âm.
Do vậy, bản thân hàm g(n) phải là tiệm cận không âm, hoặc ngược lại tập Θ(g(n)) là rỗng
Giả sử rằng tất cả các hàm được sử dụng trong vòng
ký hiệu Θ, và các ký hiệu tiếp theo là tiệm không âm
• Ta có thể sử dụng định nghĩa để chỉ ra rằng
) ( 3
2 /
1 n2 − n = Θ n2
bằng cách chọn c1 = 1/14, c2=1/2, và n0 = 7
Trang 241 Hệ ký hiệu Θ (tt)
Identit y
Tổng quát hơn, xét hàm bậc hai bất kỳ
c bn an
n
f ( ) = 2 + +
Với a,b,c là hằng số và a>0
Ta sẽ lấy c1=a/4, c2=7a/4 và n0 = 2*max(b / a, (c / a))
p
0
) (
Với ai là hằng số và ad>0, chúng ta có
) (
) (n n d
p = Θ
Vì một hằng bất kỳ là đa thức bậc 0, nên ta có thể biễu diễn hàm liên tục bất kỳ là Θ(n 0 ), hoặc Θ(1)
Trang 252 H ký hi u Oệ ệ
• Các ký hiệu Θ là ký hiệu tiệm cận giới hạn của một hàm chặn trên và chặn dưới Khi chỉ có một tiệm cận chặn trên (asymptotic higher bound), chúng ta sử dụng ký hiệu O
nghĩa:
• O(g(n)) = {f(n): tồn tại hằng số dương c
và n0 sao cho 0 ≤ f (n) ≤ cg(n), với mọi n>n }.
Trang 262 H ký hi u O ệ ệ (tt)
Identit y
Với mọi giá trị n đến bên phải n0, giá
trị của hàm f(n)<=cg(n).
Khi viết f(n) = O(g(n)) nghĩa là f(n) là
một phần tử của tập O(g(n))
Lưu ý rằng f(n) = Θ(g(n)) suy ra f (n)
= O(g(n)), bởi vì ký hiệu Θ là một
khái niệm mạnh hơn ký hiệu O
Trang 272 H ký hi u O ệ ệ (tt)
• Thường sử dụng ký hiệu O để mô tả thời gian thực hiện của thuật toán bằng cách kiểm tra cơ cấu tổng thể của thuật toán
• Ví dụ, cấu trúc vòng lặp lồng nhau của thuật toán sắp xếp chèn từ Chương 2 xấp xỉ giới hạn trên O(n 2 ) trong trường hợp xấu nhất
• Chi phí cho mỗi lần lặp của vòng lặp bên trong là bị chặn trên bởi O(1) (không đổi), các chỉ số i và j đều dần đến n, và các vòng lặp bên trong được thực thi nhiều nhất là
Trang 283 H ký hi u ệ ệ Ω
Identit y
• Ký hiệu Ω cung cấp một tiệm cận giới hạn thấp hơn(asymptotic lower bound).
Trang 293 H ký hi u ệ ệ Ω (tt)
Hình bên biễu diễn ký hiệu Ω
Với mọi giá trị n đến bên phải
của n0, giá trị của f (n) là nằm
tại hoặc bên trên cg(n) (nghĩa là
f(n)>=cg(n))
• Do hệ ký hiệu Ω mô tả một giới hạn dưới, ta cũng
có thể sử dụng nó để giới hạn thời gian thực hiện trong trường hợp tốt nhất của một thuật toán.
• Ví dụ, trong trường hợp tốt nhất, thời gian chạy của
sắp xếp chèn là Ω (n), điều đó suy ra rằng thời gian chạy
Trang 30* Khái niệm tiệm cận trong đẳng thức và bất đẳng thức.
Identit y
• Khi các ký hiệu tiệm cận đứng độc lập ở vế
phải của một đẳng thức (hay bất đẳng thức), như trong
n=O(n2 ), nó là phần tử của một tập hợp
Tuy nhiên, nhìn chung, khi ký hiệu tiệm cận xuất hiện trong một công thức, chúng ta xem nó như đại diện cho một số hàm ẩn danh (anonymous function).
Ví dụ, công thức :
trong đó f(n) là một số hàm đặt trong Θ (n) Trong trường hợp này f(n) = 3n + 1
Trang 314 Hệ ký hiệu o
• Các tiệm cận trên ràng buộc cung cấp bởi ký hiệu O có thể có hoặc có thể không có tiệm chặt chẽ
• Vd: Các cận 2n 2 =O(n 2 ) là tiệm cận chặt chẽ.
• Các cận 2n=O(n 2 ) không phải là tiệm chặt chẽ.
• Ta sử dụng ký hiệu o để biểu thị một cận trên mà không phải là tiệm chặt chẽ
• Đ/n: o(g(n)) = {f(n): cho bất kỳ tích cực hằng c>0, tồn tại một hằng n 0 >0 sao cho 0≤f(n)<cg(n) với mọi n ≥ n ).
Trang 324 Hệ ký hiệu o (tt)
• Ví dụ, 2n = o(n 2 ), nhưng 2n 2 ≠ o (n 2 ).
• Trong ký hiệu o, hàm f(n) trở nên không đáng kể so với g(n) khi n tiến gần đến vô cực; có nghĩa là,
Identit y
Trang 335 Hệ ký hiệu ω
không phải là tiệm chặt chẽ
Trang 34So sánh các hàm
Identit y
• Nhiều tính chất quan hệ của số thực cũng áp dụng cho các phép so sánh tiệm cận Đối với các hàm sau, giả định rằng f (n) v à g (n) là tiệm cận dương.
Trang 35f(n) = O(g(n)) khi v à chỉ khi g(n) = Ω(f(n)),
• f(n) = o(g(n)) khi và chỉ khi g(n) = ω(f(n)).
Trang 36Phần 5:
Khái niệm chuẩn và các
hàm thông dụng
Trang 37Khái niệm chuẩn và các hàm thông dụng
1 Tính đơn điệu
2 Hàm sàn và hàm trần
Trang 381 Tính đơn điệu
- Một hàm f(n) là đơn điệu tăng nếu m
≤ n thì f(m) ≤ f(n) Tương tự, f(n) là
hàm đơn điệu giảm nếu m ≤ n thì f(m)
≥ f(n).
- Một hàm f(n) là tăng nghiêm ngặt
nếu m<n thì f(m) < f(n) và là giảm
nghiêm ngặt nếu m <n thì f(m)>f(n).
Trang 392 Hàm sàn và hàm trần
Với mọi x ∈ R
- Hàm sàn của x là số nguyên lớn nhất nhỏ hơn hoặc bằng x, ký hiệu x.
- Hàm trần của x là số nguyên nhỏ nhất lớn
hơn hoặc bằng x, ký hiệu x.
Trang 40- Ta có: (a mod n) = (b mod n) nếu a và b khi chia
n đều có số dư giống nhau hay nói cách khác a ≡
b (mod n).
ví dụ: 4 mod 3 = 7 mod 3 = 1
Trang 41i n a n
Trang 42Do đó n b = o(a n ) Như vậy, bất cứ hàm mũ dương với số mũ
n tăng nghiêm ngặt nhanh hơn một hàm đa thức biến n
Trang 43= +
+ +
+
=
0
3 2
!
! 3
! 2
1
i
i x
i
x x
x x
Trang 446 Lôgarít
- Sử dụng các khái niệm (n > 0):
lg k n = (lg n)k (lôgarit mũ)
lg lg n = lg(lg n) (lôgarit hợp thành)
lg n = log2 n (lôgarit cơ số 2)
ln n = log e n (lôgarit tự nhiên)
- Ta quy ước: lg n+k có nghĩa là lg(n) + k mà không phải
là lg(n+k)
- Nếu b > 1 và n > 0 thì logbn là hàm tăng nghiêm ngặt.
- Hàm f(n) là được giới hạn theo đa lôgarit nếu f(n) =
O(lgk n) với hằng số k.
Trang 456 Lôgarít(tt)
- Ta có thể biểu diễn sự tăng trưởng của đa thức và đa lôgarit bằng cách thay thế lgn cho n và 2a cho a ở phương trình , dễ dàng ta có:
- Từ đó, ta có thể kết luận rằng: lg b n = o(n a ) với số
mũ a > 0 thì mọi hàm đa thức dương tăng nhanh hơn hàm các hàm đa lôgarit (n a tăng nhanh hơn
lg b n khi ).
0
lg )
2 (
n a
b
n n
Trang 467 Giai thừa
- Khái niệm n! (đọc là n giai thừa) được đinh nghĩa với n là số nguyên không âm n ≥ 0
1 nếu n = 0 n! = n.(n-1)! nếu n > 0
ta có n! = 1.2.3…n
- Một giới hạn trên yếu của hàm giai thừa là n!≤ n n , bởi mỗi số trong n số hạng trong tích giai thừa tối đa là n Ta có phép xấp xỉ Stirling (Stirling's
2
Trang 47Dùng phép xấp xỉ Stirling để chứng minh phương trình
trên Với mọi n ≥ 1 ta có:
n a
n
e e
n n
Trang 48f(i)(n)= n nếu i = 0
f(f(i-1)(n)) nếu i > 0
Ví dụ: cho f(n) = 2n thì f (n) = 2 n
Trang 499 Lôgarit lặp
- Sử dụng ký hiệu lg*n (đọc là log sao của n) là lôgarit lặp
được định nghĩa như sau:
lg*n = min{i≥ 0: lg(i)n ≤ 1} trong đó, lg(i)n được định
nghĩa như hàm lặp, với f(n) = lgn và lg(i)n được định nghĩa
nếu lg (i-1)n > 0
lg*2 = 1 lg*65536 = 4 lg*4 = 2 lg*2 (65536) = 5 lg*16 = 3
- Hàm logarit lặp là một hàm tăng trưởng rất chậm Vì Bởi
số lượng các phân tử trong vũ trụ được ước khoảng 10 80 , nó
Trang 5010 Dãy Fibonacci
- Dãy Fibonacci được đinh nghĩa như sau với
phép truy toán sau (recurrence):
F 0 = 0;
F 1 = 1;
F i = F i-1 + F i-2 với i ≥ 2
- Do đó, mỗi dãy Fibonacci là tổng của 2 dãy trước nó, ta dể thấy ở dãy sau:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,…
Trang 51- Vì | | < 1, nên ta có Do đó, số
Fibonacci thứ i, F i bằng giá tri là số nguyên gần
1 2
Trang 52CẢM ƠN