Cho một dãy các số thực a1,a2,…,an. Tìm giá trị lớn nhất m của các số đã cho và chỉ số lớn nhất i trong các số đạt giá trị m.
1 Cấutrúcdữ liệu và giảithuật Ngườithựchiện: GVC. TS. Nguyễn Trung Hòa Email: ntrhoa@yahoo.com Điệnthoại: 0904 162168 Tài liệuthamkhảo 1. Cấutrúcdữ liệuvàgiảithuật Đỗ Xuân Lôi, NXB ĐHQGHN,2004 2. Cẩm nang thuật toán R. Sedgewick, NXB Khoa họcvàKỹ thuật,1994 Đề cương chương trình 2 Chương 1. Giảithuật 1.1. Khái niệmgiảithuật 1.2. Thiếtkế giảithuật 1.3. Phân tích và đánh giá giảithuật 1.1. Khái niệmgiảithuật 1.1.1. Giảithuậtlàgì? 1.1.2. Cấutrúcdữ liệu 1.1.3. Diễn đạtgiảithuật 3 1.1.1. Giảithuậtlàgì? 1.1.1. Giảithuậtlàgì? Ví dụ mởđầu Cho một dãy các số thựca 1 ,a 2 ,…,a n . Tìm giá trị lớnnhấtm củacácsốđã cho và chỉ số lớnnhấti trong các sốđạtgiátrị m. Vì phảitìmsố lớnnhấtvớichỉ số lớnnhất, ta sẽ xuất phát từ số cuốicùngcủadãylàa n và sẽ so sánh với các số trước đó, khi tìm thấymộtgiátrị lớnhơnthìtaghi lại (đánh dấu) và lạitiếptụcso sánh số này với các số trước đó, công việcsẽ đượcthựchiệnchođếnkhiđãso vớisốđầutiên. 4 1.1.1. Giảithuậtlàgì? Giảithuậtlà: Cách làm để giải quyết bài toán Một dãy có trình tự các thao tác trên mộtsốđối tượng nào đósaochosau mộtsố hữuhạnbước thựchiện ta đạt đượckếtquả mong muốn. Mộtgiảithuậtcó Đầu vào (Input): tậpcácđốitượng (dữ liệu) Đầu ra(Output): mộttập các giá trị (thông tin) Các bướcthựchiện Vào Ra 1.1.1. Giảithuậtlàgì? Các đặctrưng củagiảithuật Tính có đạilượng vào/ra Tính xác định Tính hữuhạn(tínhdừng) Tính tổng quát Tính hiệuquả Mộtvàiđặc điểmcầnlưuý Không cầnbiếtgiátrị cụ thể củakếtquả sau mỗibước, chỉ cầnbiết cách chuyểntừ bướctrướctớibước sau; Kếtquả cụ thể củagiảithuậtcóthể không phảilàkếtquả đúng (chính xác) mặcdầuphương pháp là đúng. 5 1.1.2. Cấutrúcdữ liệu Dữ liệucócấutrúc: Tậphợpdữ liệu Có mốiquanhệ với nhau trong bài toán xác định Lựachọncấutrúcdữ liệuvàgiảithuậtthíchhợp: rất quan trọng Vídụ: viếtchương trình tìm kiếmsốđiệnthoại theo tên đơn vị Giảithuật+ Dữliệu= Chương trình Biểudiễncấutrúcdữ liệu trong bộ nhớ: Lưutrữ trong Thông qua các biến Lưutrữ ngoài Tệp(định kiểuvàkhôngđịnh kiểu) 1.1.3. Diễn đạtgiảithuật Ngôn ngữ tự nhiên Ngôn ngữ liệtkêcácbước 6 1.1.3. Diễn đạtgiảithuật Giả ngôn ngữ (máy tính) Chú thích: /*…*/ hoặc//… Các đoạncủathuật toán có thểđược đánh số thứ tự. Ký tự và biểuthức 26 chữ cái Latin + 10 chữ số Phép toán số học: +, -, *, /, ^(lũythừa), % Phép toán quan hệ: <, >, ==, <=, >=, != Phép toán logic: &&, ||, ! Giá trị logic: true, false Biến đượcchỉ số hóa: a i , a ij Thứ tựưutiêncủa các phép toán: như trong ngôn ngữ C và các ngôn ngữ chuẩnkhác Lệnh gán: a = b; Khốilệnh: { S1; S2; S3; } 1.1.3. Diễn đạtgiảithuật Lệnh điềukiện: if (B) S; if (B) {s1;s2;s3;} if (B) S1; else S2; Lệnh lặp for (i = 0 ; i<n; i++) S; for ( i = n; i>= 0; i ) S; do S while (B); while (B) S; 7 1.1.3. Diễn đạtgiảithuật Lệnh vào/ra: read (<danh sách biến>) write (<danh sách biếnhoặcdòngkýtự>) Chương trình con: function <tên hàm> (<danh sách tham số>) { S1; S2; …Sn; return; // nếuchương trình con trả lạimộtgiátrị } Gọichương trình con: <tên hàm> (<danh sách tham số thựcsự>) 1.1.3. Diễn đạtgiảithuật lưu đồ Mộtsố ký hiệuquyước Lệnh điềukhiểncóthể là: Khốilệnh Lệnh điềukiện Lệnh lặp Bắt đầu/ kết thúc Điềukiện Lệnh vào, lệnh ra Lệnh gán Nốitiếp đoạnlệnh Luồng thựchiện 8 1.1.3. Diễn đạtgiảithuật Khốilệnh Cú pháp: { S1; S2; S3; } S1 S2 S3 1.1.3. Diễn đạtgiảithuật Lệnh điềukiện Cúpháp If (điều_kiện) hành_động if (B) S1 Else S2; S2 S1 B 9 1.1.3. Diễn đạtgiảithuật Lệnh lặp Cúpháp: while (B) S; for (khởi_tạo; điều_kiện; cập_nhật) hành_động 1.1.3. Diễn đạtgiảithuật Do hành_động While (điều_kiện) 10 1.1.3. Diễn đạtgiảithuật Ngôn ngữ lậptrình Cài đặtgiảithuật: ngôn ngữ C/C++ 1.2. Thiếtkế giảithuật 1.2.1. Mô đun hóa và việcgiải quyết bài toán 1.2.2. Phương pháp tinh chỉnh từng bước (Stepwise Refinement) 1.2.3. Ví dụ [...]... O(max(n,n)) = O(n) 27 Bài tập 28 Chương 2 Kiểu dữ liệu và mô hình dữ liệu 2.1 Biểu diễn dữ liệu và các kiểu dữ liệu đơn 2.2 Kiểu dữ liệu có cấu trúc – Cấu trúc dữ liệu 2.2 Hệ kiểu của ngôn ngữ C 2.3 Mô hình dữ liệu và kiểu dữ liệu trừu tượng 2.1 Biểu diễn dữ liệu và các kiểu dữ liệu đơn 2.1.1 Sự cần thiết của việc biểu diễn dữ liệu 2.1.2 Kiểu dữ liệu đơn 2.1.3 Tổ chức các kiểu dữ liệu đơn trong máy tính... con trỏ 9 September 2010 2.1 Biểu diễn dữ liệu 68 34 2.2 Các kiểu dữ liệu có cấu trúc 2.2.1 Cấu trúc dữ liệu là gì? 2.2.2 Ba phương pháp thông thường tạo CTDL 2.2.3 Quá trình giải một bài toán trên máy tính 2.2.1 Cấu trúc dữ liệu là gì? Các kiểu dữ liệu đơn chưa đủ mạnh để khai thác máy tính Cấu trúc dữ liệu là các dữ liệu phức tạp, được xây dựng nên từ các dữ liệu đã có, đơn giản hơn bằng các phương... Biểu diễn dữ liệu 70 35 2.2.1 Cấu trúc dữ liệu là gì? Như vậy, khi tổ chức một cấu trúc dữ liệu cần thiết phải quan tâm tới các yếu tố sau: Các dữ liệu thành phần tham gia để tạo nên cấu trúc đó Cách bố trí, sắp xếp các thành phần đó như thế nào (cơ cấu? ) Khả năng truy nhập và xử lý – các thao tác, các phép toán Các dữ liệu thành phần có thể là dữ liệu đơn, hoặc cũng có thể là một cấu trúc dữ liệu đã... dựng những cấu trúc dữ liệu nào mà các thao tác cần thực hiện là hiệu quả nhất có thể được Có thể hình dung một cấu trúc dữ liệu được tạo nên từ các khối, mỗi khối có thể xem như một cái hộp chứa các dữ liệu thành phần Một cấu trúc dữ liệu bao gồm Một tập hợp nào đó các dữ liệu thành phần, Các dữ liệu thành phần này được liên kết với nhau bởi một phương pháp nào đó Các thao tác trên cấu trúc đó 9 September... bậc cao, các dữ liệu được phân lớp thành các lớp dữ liệu dựa vào bản chất của dữ liệu Mỗi một lớp dữ liệu được gọi là một kiểu dữ liệu Kiểu dữ liệu là một tập hợp các phần tử cùng chung thuộc tính nào đó các phần tử của tập được gọi là các giá trị của kiểu Thông thường trong một hệ kiểu của một ngôn ngữ lập trình sẽ có một số kiểu dữ liệu được gọi là kiểu dữ liệu đơn (single) hay kiểu dữ liệu phân tử... Biểu diễn dữ liệu 60 30 2.1.2 Kiểu dữ liệu đơn Hệ kiểu của một ngôn ngữ bao gồm các kiểu dữ liệu đơn và các phương pháp cho phép ta từ các kiểu dữ liệu đã có xây dựng nên các kiểu dữ liệu mới Các ngôn ngữ lập trình khác nhau có thể có các kiểu dữ liệu đơn khác nhau Chẳng hạn, trong ngôn ngữ Pascal, các kiểu dữ liệu integer, real, boolean, char và các kiểu liệt kê được gọi là các kiểu dữ liệu đơn trong... giải thuật? Thuật toán nào là tốt hơn khi N =100 và k = 100? N =100 và k = 1? Điều gì sẽ xảy ra khi N = 1,000,000 và k = 500,000? Còn có những thuật toán tốt hơn? 19 1.3.2 Phân tích thuật toán Đối tượng phân tích Chúng ta chỉ phân tích những thuật toánđúng Một thuật toán là đúng? Nếu,với một dữ liệu đầu vào, thuật toán dừng và đưa ra kết quả đúng Thuật toán không đúng Có thể không dừng với một số dữ. .. độ phức tạp tính toán của giải thuật 1.3.2 Phân tích thuật toán Điều quan trọng đối với giải thuật là Mất bao nhiêu giây để chạy với dữ liệu đầu vào có kích thước n? Thời gian tính phụ thuộc vào kích thước dữ liệu đầu vào Một số tốc độ thay đổi của thời gian tính khi n tăng Thuật toán có thời gian hằng số: nếu thời gian chạy của nó là không đổi khi kích thước dữ liệu thay đổi Thuật toán có thời gian... thường, kích thước của dữ liệu đầu vào là nhân tố chính quyết định thời gian tính Với bài toán sắp xếp: số phần tử cần sắp xếp Với bài toán nhân ma trận: kích thước (số phần tử) của 2 ma trận 20 1.3.2 Phân tích thuật toán Độ phức tạp về thời gian Thuật toán A mất 2 phút để chạy với dữ liệu đầu vào X Thuật toán B mất 1 phút 45 giây để chạy với cùng dữ liệu X Liệu B có phải là thuật toán “tốt hơn” A?... hóa và việc giải quyết bài toán Module hóa bài toán Chia bài toán lớn (module chính) thành các bài toán (module) nhỏ hơn Mỗi module thực hiện công việc cụ thể nào đó Lặp đi lặp lại cho đến khi các module là cô đọng, đơn thể và biết cách giải quyết => chiến thuật “Chia để trị” 1.2.1 Mô đun hóa và việc giải quyết bài toán Thiết kếTopdown – từ đỉnh xuống, hay từ khái quát đến chi tiết Bước 1: Xác định dữ . 1 Cấutrúcdữ liệu và giảithuật Ngườithựchiện: GVC. TS. Nguyễn Trung Hòa Email: ntrhoa@yahoo.com Điệnthoại: 0904 162168 Tài liệuthamkhảo 1. Cấutrúcdữ liệuvàgiảithuật Đỗ Xuân Lôi,. định Lựachọncấutrúcdữ liệuvàgiảithuậtthíchhợp: rất quan trọng Vídụ: viếtchương trình tìm kiếmsốđiệnthoại theo tên đơn vị Giảithuật+ D liệu= Chương trình Biểudiễncấutrúcdữ liệu trong bộ. tích và đánh giá giảithuật 1.1. Khái niệmgiảithuật 1.1.1. Giảithuậtlàgì? 1.1.2. Cấutrúcdữ liệu 1.1.3. Diễn đạtgiảithuật 3 1.1.1. Giảithuậtlàgì? 1.1.1. Giảithuậtlàgì? Ví dụ mởđầu Cho một dãy