Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 52 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
52
Dung lượng
3,36 MB
Nội dung
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 Huế, tháng 10 năm 2014 ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC KHOA HỌC Intel Confidential Intel Confidential NỘI DUNG TRÌNH BÀY Tăng trưởng của hàm và phân tích thuật toán 1 !" 2 3 #$%!"&"' 4 #() 5 )*%+"!," Intel Confidential Intel Confidential Tăng trưởng hàm và phân tích thuật toán Identit y /0&123)4& Đầ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> Intel Confidential Intel Confidential /0&123)4& - Đầ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. Intel Confidential Intel Confidential Identit y /0&123)4& Sử dụng mã giả để viết thuật tóan INSERTION-SORT(A) 1 for j ← 2 to length[A] 2 do m ← A[j] {m là khóa } 3 ► Chèn A[j] vào chuỗi có sắp xếp A[1 i - 1]. 4 i ← j - 1 5 while i > 0 and A[i] > m 6 do A[i + 1] ← A[i] 7 i ← i - 1 8 A[i + 1] ← m Các bước minh họa giải thuật Intel Confidential Intel Confidential Identit y /0&123)4& Thủ tục sắp xếp chèn bằng ngôn ngữ Pascal: Procedure Insertion_Sort; Begin For j:=2 to n do Begin m:= A[j]; i: =j-1; while m<A[i] and i> 0do begin A[i+1]:=A[i]; i:=i-1; end; A[i+1]:=m; End; End; Intel Confidential Intel Confidential Identit y /0&123)4& 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ỏ Intel Confidential Intel Confidential Identit y /0&123)4& 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 Intel Confidential Intel Confidential PHẦN 3 THIT K THUÂT TON Intel Confidential Intel Confidential &"56$“)(789:”;<;=(;>=9 !"#$% %&%'( )*+(,-.( /0 * [...]... hiệu o 5.Ký hiệu ω Tăng trưởng hàm và phân tích thuật toán Intel Confidential 1 Hệ ký hiệu Θ • Định nghĩa: Với một hàm đã cho g(n), qua Θg(n) ta thể hiện tập hợp các hàm Θ( g (n)) = f (n):∃c ,c ,n ,0≤c g (n)≤ f (n)≤c g (n),∀n≥ n 1 2 0 1 2 0 Bởi vì Θ (g(n)) là một tập hợp nên ta có thể viết Hoặc f (n)∈Θ( g (n)) f (n) = Θ( g (n)) Identit y Tăng trưởng hàm và phân tích thuật toán Intel Confidential... hơn ký hiệu O Identit y Tăng trưởng hàm và phân tích thuật toán Intel Confidential 2 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(n2) 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à... 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 n0>0 sao cho 0≤f(n)=cg(n)) • Do hệ ký... 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 1 / 2n 2 − 3n = Θ(n 2 ) bằng cách chọn c1 = 1/14, c2=1/2, và n0 = 7 Identit y Tăng trưởng hàm và phân tích thuật toán Intel Confidential 1 Hệ ký hiệu Θ (tt) Tổng quát hơn, xét hàm bậc hai bất kỳ f (n) = an 2 + bn + c Với a,b,c là hằng số và a>0 Ta sẽ lấy c1=a/4, c2=7a/4 và. .. trị của f(n) >= c1g(n ) và f(n)n0, hàm f(n) bằng g(n) với một hằng số nào đó • Ta nói rằng, g(n) là một tiệm cận ràng buộc chặt chẽ (asymptotically tight bound) của f(n) Identit y Tăng trưởng hàm và phân tích thuật toán Intel Confidential 1 Hệ ký hiệu Θ (tt) • Định nghĩa của Θ(g(n)) yêu cầu mọi phần tử f (n)∈Θ( g (n)) phải là tiệm cận không âm Do vậy, bản thân hàm. .. hàm sau, giả định rằng f (n) và g (n) là tiệm cận dương • Tính bắc cầu: • f(n) = Θ(g(n)) và g(n) = Θ(h(n)) suy ra f(n) = Θ(h(n)), • f(n) = O(g(n)) và g(n) = O(h(n)) suy ra f(n) = O(h(n)), • f(n) = Ω(g(n)) và g(n) = Ω(h(n)) suy ra f(n) = Ω(h(n)), • f(n) = o(g(n)) và g(n) = o(h(n)) suy ra f(n) = o(h(n)), • f(n) = ω(g(n)) và g(n) = ω(h(n)) suy ra f(n) = ω(h(n)) Identit y Tăng trưởng hàm và phân tích thuật . TIỆM CẬN Tăng trưởng hàm và phân tích thuật toán Identit y Cc ký hiệu dSng để mô tả thời gian thực hiện tiệm cận của một thuật ton được định nghĩa dưới dạng cc hm, m miền của những hm. HUẾ TRƯỜNG ĐẠI HỌC KHOA HỌC Intel Confidential Intel Confidential NỘI DUNG TRÌNH BÀY Tăng trưởng của hàm và phân tích thuật toán 1 . 2 3 #$%!"&"' 4 #() 5 )*%+"!," Intel Confidential Intel Confidential Tăng trưởng hàm và phân tích thuật toán Identit y /0&123)4& Đầu vào: Cho một dãy n số (a1, a2…an) Đầu ra: Phép hoán vị