Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Cấu trúc dữ liệu là gì?

2 383 0
Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Cấu trúc dữ liệu là gì?

Đang tải... (xem toàn văn)

Thông tin tài liệu

Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Cấu trúc dữ liệu là gì? tài liệu, giáo án, bài giảng , l...

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT DATA STRUCTURE AND ALGORITHMS GV: Phạm Tuấn Hiệp Email: hiep0109@yahoo.com Ôn tập tốt nghiệp Nội dung ôn tập  Chương 1: Ôn tập Kỹ thuật lập trình  Chương 2: Tìm kiếm, Sắp xếp  Chương 3: Danh sách liên kết  Chương 4: Cây 2 Ôn tập tốt nghiệp Tài liệu học tập  Giáo trình:  C & Data Structures, P. S. Deshpande, O. G. Kakde - CHARLES RIVER MEDIA, INC. Hingham, Massachusetts.  Tham khảo:  Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường ĐHKHTN – ĐHQG TP.HCM.  Phần mềm lập trình:  C-Free 4.0  Borland C++  … 3 Chương 1: Ôn tập Kỹ thuật lập trình 4 Ôn tập tốt nghiệp Nội dung  Con trỏ  Mảng 1 chiều  Đệ quy 5    Ôn tập tốt nghiệp Con trỏ  Cách khai báo con trỏ  Các phép toán trên con trỏ 6 void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? x = 10 y = 10 p = 10 q = 10 Ôn tập tốt nghiệp Con trỏ void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; *p=50; *q=90; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? 7 x = 50 y = 90 p = 50 q = 90 Ôn tập tốt nghiệp Con trỏ void main(){ int x=10, y=20; int *p, *q; p=&x; q=&y; *p=50; *q=90; p=q; cout<<x<<" "<<y<<endl; cout<<*p<<" "<<*q<<end; } Cho biết kết quả in ra màn hình? 8 x = 50 y = 90 p = 90 q = 90 Ôn tập tốt nghiệp Con trỏ Cho biết kết quả của chương trình sau: int Test(int &a, int b, int &c) { a ; a+=b; ++c=a+b; return a+b+c; } int x=5, y=2, z=2011; void main(){ cout<<Test(x,y,z)<<" "<<x<<" "<<y<<" "<<z<<endl; } 9 A. 16 6 2 2011 B. 16 5 2 8 C. 16 5 2 2011 D. 16 6 2 8 Ôn tập tốt nghiệp Nội dung  Con trỏ  Mảng 1 chiều  Đệ quy 10    Ôn tập tốt nghiệp Mảng 1 chiều  Khai báo mảng  Các phép toán trên mảng 11 void function(char *s1, char *s2){ while (*(s1++)=*(s2++)); } void main(){ char s2[100]; char s1[]="Giao Trinh Ngon Ngu C++"; function(s2,s1); cout<<s2; } Cho biết kết quả in ra màn hình? Giao Trinh Ngon Ngu C++ Ôn tập tốt nghiệp Mảng 1 chiều void main(){ float a[5]={5, 4, 3, 2, 1}; float x; int i; for(i=0; i<5; i++) a[i] += a[0]; x=a[1]+a[4]; cout<<x; } Cho biết kết quả in ra màn hình? 12 A. 125 B. 5 C. 100 D. 25 Ôn tập tốt nghiệp Mảng 1 chiều Cho biết kết quả của chương trình sau: void main(){ int a[]={5,1,12,11,8,20,14,12,7}; for(int i=4;i<=7;i++) for(int j=i+1;j<=8;j++) if(a[i]>a[j]){ int t=a[i]; a[i]=a[j]; a[j]=t; } cout<<a[6]; } 13 A. 7 B. 12 C. 8 D. 20 Ôn tập tốt nghiệp Nội dung  Con trỏ  Mảng 1 chiều  Đệ quy 14    Ôn tập tốt nghiệp Đệ quy  Đệ quy sự gọi lại chính nó khi thực hiện  Thường được dùng cho các bài toán truy hồi 15 Cho hàm đệ quy sau: int Func(int n){ if(n == 5) return 5; else return 2 * Func(n+1); } Giá trị của Func(2) là? A. 50 B. 2 C. 5 D. 40 Ôn tập tốt nghiệp Đệ quy void Foo(int x){ if(x>0) Foo(x-3); cout<<x<<" "; } Cho biết kết quả in ra màn hình khi goi hàm Foo(6)? 16 A. 6 3 B. 0 3 6 C. 0 3 D. 6 3 0 Chương 2: Tìm kiếm, Sắp xếp 17 Ôn tập tốt nghiệp Nội dung  Tìm kiếm tuyến tính, nhị phân  Các thuật toán sắp xếp  Đổi chỗ trực tiếp (Interchange sort)  Nổi bọt (Bubble sort)  Chèn trực tiếp (Insertion sort)  Chọn trực tiếp (Selection sort)  Dựa trên phân hoạch (Quick sort) 18    Ôn tập tốt nghiệp Tìm kiếm Cấu trúc liệu (Data Structure) ? Cấu trúc liệu cách lưu trữ, tổ chức liệu có thứ tự, có hệ thống để liệu sử dụng cách hiệu Dưới hai khái niệm tảng hình thành nên cấu trúc liệu:  Interface: Mỗi cấu trúc liệu có Interface Interface biểu diễn tập hợp phép tính mà cấu trúc liệu hỗ trợ Một Interface cung cấp danh sách phép tính hỗ trợ, loại tham số mà chúng chấp nhận kiểu trả phép tính  Implementation (có thể hiểu triển khai): Cung cấp biểu diễn nội cấu trúc liệu Implementation cung cấp phần định nghĩa giải thuật sử dụng phép tính cấu trúc liệu  Đặc điểm Cấu trúc liệu  Chính xác: Sự triển khai Cấu trúc liệu nên triển khai Interface cách xác  Độ phức tạp thời gian (Time Complexity): Thời gian chạy thời gian thực thi phép tính cấu trúc liệu phải nhỏ  Độ phức tạp nhớ (Space Complexity): Sự sử dụng nhớ phép tính cấu trúc liệu nên nhỏ Tại Cấu trúc liệu cần thiết ? Ngày nay, ứng dụng ngày phức tạp lượng liệu ngày lớn với nhiều kiểu đa dạng Việc làm xuất vấn đề lớn mà lập trình viên phải đối mặt:  Tìm kiếm liệu: Giả sử có triệu hàng hóa lưu giữ vào kho hàng hóa giả sử có ứng dụng cần để tìm kiếm hàng hóa Thì thực tìm kiếm, ứng dụng phải tìm kiếm hàng hóa triệu hàng hóa Khi liệu tăng lên việc tìm kiếm trở lên chậm tốn  Tốc độ vi xử lý: Mặc vi xử lý có tốc độ cao, nhiên có giới hạn lượng liệu lên tới hàng tỉ ghi tốc độ xử lý không nhanh  Đa yêu cầu: Khi hàng nghìn người dùng thực phép tính tìm kiếm Web Server cho Web Server có nhanh đến việc phải xử lý hàng nghìn phép tính lúc thực khó Để xử lý vấn đề trên, cấu trúc liệu giải pháp tuyệt vời Dữ liệu tổ chức cấu trúc liệu theo cách để thực tìm kiếm phần tử liệu yêu cầu tìm thấy Độ phức tạp thời gian thực thi cấu trúc liệu giải thuật Có trường hợp thường sử dụng để so sánh thời gian thực thi cấu trúc liệu khác nhau: • Trường hợp xấu (Worst Case): tình mà phép tính cấu trúc liệu tốn thời gian tối đa (thời gian dài nhất) Ví dụ với ba số 1, 2, xếp theo thứ tự giảm dần thời gian thực thi dài (và trường hợp xấu nhất); xếp theo thứ tự tăng dần thời gian thực thi ngắn (và trường hợp tốt nhất) • Trường hợp trung bình (Average Case): miêu tả thời gian thực thi trung bình phép tính cấu trúc liệu • Trường hợp tốt (Best Case): tình mà thời gian thực thi phép tính cấu trúc liệudụ Thuật ngữ Cấu trúc liệuDữ liệu: Dữ liệu giá trị tập hợp giá trị • Phần tử liệu: Phần tử liệu đơn vị đơn lẻ giá trị • Các phần tử nhóm: Phần tử liệu mà chia thành phần tử gọi phần tử nhóm • Các phần tử bản: Phần tử liệu mà bị chia nhỏ thành phần tử gọi phần tử • Thuộc tính Thực thể: Một thực thể mà chứa vài thuộc tính đó, thuộc tính gán giá trị • Tập hợp thực thể: Các thực thể mà có thuộc tính tương tự cấu thành tập hợp thực thể • Trường: Trường đơn vị thông tin biểu diễn thuộc tính thực thể • Bản ghi: Bản ghi tập hợp giá trị trường thực thể cho • File: tập hợp ghi thực thể tập hợp thực thể cho - 2 - Data Structures & Algorithms in Java by Robert Lafore ISBN: 1571690956 Sams © 1998, 617 pages Beautifully written and illustrated, this book introduces you to manipulating data in practical ways using Java examples. Table of Contents Back Cover Synopsis by Rebecca Rohan Once you've learned to program, you run into real-world problems that require more than a programming language alone to solve. Data Structures and Algorithms in Java is a gentle immersion into the most practical ways to make data do what you want it to do. Lafore's relaxed mastery of the techniques comes through as though he's chatting with the reader over lunch, gesturing toward appealing graphics. The book starts at the very beginning with data structures and algorithms, but assumes the reader understands a language such as Java or C++. Examples are given in Java to keep them free of explicit pointers. - 3 - Table of Contents Data Structures and Algorithms in Java - 4 Introduction - 7 Part I Chapter 1 - Overview - 11 Chapter 2 - Arrays - 29 Chapter 3 - Simple Sorting - 63 Part II Chapter 4 - Stacks and Queues - 80 Chapter 5 - Linked Lists - 142 Chapter 6 - Recursion - 200 Part III Chapter 7 - Advanced Sorting - 243 Chapter 8 - Binary Trees - 280 Chapter 9 - Red-Black Trees - 311 Part IV Chapter 10 - 2-3-4 Trees and External Storage - 335 Chapter 11 - Hash Tables - 372 Chapter 12 - Heaps - 416 Part V Chapter 13 - Graphs - 438 Chapter 14 - Weighted Graphs - 476 Chapter 15 - When to Use What - 510 Part VI Appendixes Appendix A - How to Run the Workshop Applets and Example Programs - 521 Appendix B - Further Reading - 524 Back Cover • Data Structures and Algorithms in Java, by Robert Lafore (The Waite Group, 1998) "A beautifully written and illustrated introduction to manipulating data in practical ways, using Java examples." • Designed to be the most easily understood book ever written on data structures and algorithms • Data Structures and Algorithms is taught with "Workshop Applets+ - animated Java programs that introduce complex topics in an intuitively obvious way • The text is clear, straightforward, non-academic, and supported by numerous figures • Simple programming examples are written in Java, which is easier to understand than C++ About the Author Robert Lafore has degrees in Electrical Engineering and Mathematics, has worked as a systems analyst for the Lawrence Berkeley Laboratory, founded his own software company, and is a best-selling writer in the field of computer programming. Some of his current titles are C++ Interactive Course, Object- - 4 - Oriented Programming in C++, and C Programming Using Turbo C++. Earlier best-selling titles include Assembly Language Primer for the IBM PC and XT and (back at the beginning of the computer revolution) Soul of CP/M. Data Structures and Algorithms in Java Mitchell Waite PUBLISHER: Mitchell Waite ASSOCIATE PUBLISHER: Charles Drucker EXECUTIVE EDITOR: Susan Walton CấU TRÚC Dữ LIệU GIảI THUẬT DATA STRUCTURE AND ALGORITHMS 1 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung môn học  Chương 0: Giới thiệu chung về CTDL GT  Chương 1: Ôn tập C/C++  Chương 2: Đệ quy (Recursion)  Chương 3: Tìm kiếm (Searching)  Chương 4: Sắp xếp (Sorting)  Chương 5: Ngăn xếp - Hàng đợi (Stacks - Queues)  Chương 6: Danh sách liên kết (Linked List)  Chương 7: Cây (Tree) 2 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Đánh giá kết quả 1. Kiểm tra giữa kỳ: thực hành  Điểm Kiểm tra giữa kỳ < 4  không được thi kết thúc môn  học lại 2. Kiểm tra cuối kỳ: thực hành  Điểm Kiểm tra cuối kỳ < 5  không được thi kết thúc môn  học lại 3. Bài tập lớn: làm các bài tập trong module  Điểm Đề tài < 5  không được thi kết thúc môn  học lại 4. Thi kết thúc môn: trắc nghiệm 5. Kiểm tra thường kỳ 3 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Tài liệu học tập  Giáo trình:  C & Data Structures, P. S. Deshpande, O. G. Kakde - CHARLES RIVER MEDIA, INC. Hingham, Massachusetts.  Tham khảo:  Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường ĐHKHTN – ĐHQG TP.HCM.  Phần mềm lập trình:  C-Free  Borland C++  … 4 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nhắc nhở một số quy định  Đi học đúng giờ  Đeo thẻ SV  Không để chuông điện thoại reo trong giờ học  Không nghe điện thoại, nhắn tin trong giờ học  Không nói chuyện riêng, làm ồn khi nghe giảng  Mang đầy đủ tài liệu học tập của môn học (khi học LT TH): giáo trình, bài tập, tập chép bài (hoặc slide bài giảng), usb để lưu bài tập  Phải làm bài tập ở nhà  Nếu vi phạm: Nhắc nhở chung  Bị mời ra khỏi lớp  Xóa tên khỏi môn học 5 Chương 0: Giới thiệu chung 6 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung  Cấu trúc dữ liệuThuật toán  Độ phức tạp của thuật toán 7  Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Cấu trúc dữ liệu  (1) Sự tổ chức hợp lý của các thành phần dữ liệu,  (2) Tập các thao tác để truy cập các thành phần dữ liệu.  Ví dụ:  Mảng (Array)  Danh sách liên kết (Linked List)  Ngăn xếp (Stack)  Hàng đợi (Queue)  Cây (Tree)  …  (1) the logical arrangement of data elements, combined with  (2) the set of operations we need to access the elements. 8 Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Nội dung  Cấu trúc dữ liệuThuật toán  Độ phức tạp của thuật toán 9  Chương 1: Ôn tập C/C++ Chương 1: Ôn tập C/C++ Thuật toán  Tập các bước có thể tính toán được để đạt được kết quả mong muốn (A computable set of steps to achieve a desired result)  Ví dụ: Tính tổng các số nguyên lẻ từ 1  n  B1: S=0  B2: i=1  B3: Nếu i>n thì sang B7, ngược lại sang B4  B4: S=S+i  B5: i=i+2  B6: Quay lại B3  B7: Tổng cần tìm S 10 [...]... của CTDL thuật toán 11 CTDL + Thuật toán = Chương trình Chương 1: Ôn tập Nội dung 12  Cấu trúc dữ liệuThuật toán  Độ phức tạp của thuật toán (algorithm  complexity) Chương 1: Ôn tập Thời gian thực Data Structure and Algorithms [CO2003] Chapter - Introduction Lecturer: Duc Dung Nguyen, PhD Contact: nddung@hcmut.edu.vn August 15, 2016 Faculty of Computer Science and Engineering Hochiminh city University of Technology Contents Outcome Contents About this course Outcome Learning outcome • Be able to use fundamental data structures like list, stack, queue, tree, graph, and hash table for programming and particular problems • Express algorithms using pseudocode as well as using C++ • Analyze the computational complexity of algorithms associated with these data structures Contents Contents at a glance Introduction Complexity of algorithms Recursion List: Array-List, Linked List Stack, Queue Tree: Binary AVL, B-Tree Heap Hash 10 Sorting 11 Graph About this course Structure • Lectures: course contents in class • Readings: course contents at home • Tutorials: QAs and exercises • Lab: coding practice • Assignments: small projects Distribution • Course credit: • Lectures: 45 period units • Exercises: 15 period units • Lab: 15 period units • Total: 75 period units Assessment • Exercises: 15% • Lab: 10% • Assignments: 25% • Final Exam: QAs and Writing, 50% Assessment Regulations: • Any plagiarism act will lead to zero in all tests! • Final grade of assignment depends on the exam: Af inal = N N X 1 T i=1 i • Detail mapping of exam questions and assignments will be announced during the progress of the course References "Data Structures and Algorithm Analysis" - Clifford A Shaffer (Edition 3.2) "Data Structures: a Pseudocode Approach with C++", R.F.Gilberg and B.A Forouzan, Thomson Learning Inc., 2001 "Data Structures and Algorithms in C++", A Drozdek, Thomson Learning Inc., 2005 "C/C++: How to Program", 7th Ed – Paul Deitel and Harvey Deitel, Prentice Hall, 2012 Internet Preparation for the course • Materials: • Slides of this course • E-book: Data Structures and Algorithm Analysis - Clifford A Shaffer (Edition 3.2) http://people.cs.vt.edu/~shaffer/Book/ • Tools: • • • • CodeBlocks (Cross-platform) Visual C++ Express (Windows) XCode (Mac OS) Anything that works! Methodology • Outside of lecture room • • • • Read slides, books, online documents Check SAKAI & make discussions Take exercises Implement examples • During lectures: • Listen & Discuss 10 Cấu trúc liệu giải thuật (Data Structure and Algorithms): Cấu trúc liệu mảng Cấu trúc liệu mảng Cấu trúc liệu mảng gì? Mảng (Array) cấu trúc liệu cũ quan trọng Mảng lưu giữ số phần tử cố định phần tử có kiểu Hầu hết cấu trúc liệu sử dụng mảng để triển khai giải thuật Dưới khái niệm quan trọng liên quan tới Mảng • Phần tử: Mỗi mục lưu giữ mảng gọi phần tử • Chỉ mục (Index): Mỗi vị trí phần tử mảng có mục số sử dụng để nhận diện phần tử Mảng gồm ghi có kiểu giống nhau, có kích thước cố định, phần tử xác định số Mảng cấu trúc liệu cấp phát lien tục Ưu điểm mảng: • Truy câp phần tử với thời gian số O(1) • Sử dụng nhớ hiệu • Tính cục nhớ Nhược điểm • Không thể thay đổi kích thước mảng chương trình dang thực Mảng động Mảng động (dynamic aray): cấp phát nhớ cho mảng cách động trình chạy chương trình C malloc calloc, C++ new Sử dụng mảng động ta bắt đầu với mảng có phàn tử, số lượng phàn tử vượt qua khả ảng ta gấp đôi kích thước mảng cuc copy phàn tử mảng cũ vào nửa đầu mảng Ưu điểm: tránh lãng phí nhớ phải khai báo mảng có kích thước lớn từ đầu Nhược điểm: + phải thực them thao tác copy phần tử thay đổi kích thước + số thời gian thực thao tác không số Biểu diễn Cấu trúc liệu mảng Mảng khai báo theo nhiều cách đa dạng ngôn ngữ lập trình Để minh họa, sử dụng phép khai báo mảng ngôn ngữ C: Hình minh họa phần tử mục: Dưới số điểm cần ghi nhớ cấu trúc liệu mảng: • Chỉ mục bắt đầu với • Độ dài mảng 10, nghĩa mảng lưu giữ 10 phần tử • Mỗi phần tử truy cập thông qua mục phần tử Ví dụ, lấy giá trị phần tử mục 27 Phép toán hỗ trợ mảng Dưới hoạt động hỗ trợ mảng: • Duyệt: In tất phần tử mảng theo cách in phần tử • Chèn: Thêm phần tử vào mảng mục cho • Xóa: Xóa phần tử từ mảng mục cho • Tìm kiếm: Tìm kiếm phần tử sử dụng mục hay giá trị • Cập nhật: Cập nhật giá trị phần tử mục Trong ngôn ngữ C, mảng khởi tạo với kích cỡ ban đầu, gán giá trị mặc định cho phần tử mảng theo thứ tự sau: Kiểu liệu Giá trị mặc định bool false char int float 0.0 double 0.0f void wchar_t Hoạt động chèn phần tử vào mảng Hoạt động chèn để chèn nhiều phần tử liệu vào mảng Tùy theo yêu cầu, phần tử chèn vào vị trí đầu, vị trí cuối vị trí mục cho mảng Phần triển khai hoạt động chèn ví dụ thực Trong ví dụ này, chèn liệu vào cuối mảng Ví dụ Giả sử LA mảng tuyến tính thứ tự có N phần tử K số nguyên dương thỏa mãn K = K Gán LA[J+1] = LA[J] Gán J = J-1 Gán LA[K] = ITEM Kết thúc Sau code đầy đủ giải thuật ngôn ngữ C: #include main() { int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n; printf("Danh sach phan tu mang ban dau:\n"); for(i = 0; i= k){ LA[j+1] = LA[j]; j = j - 1; } LA[k] = item; printf("Danh sach phan tu cua mang sau hoat dong chen:\n"); for(i = 0; i ... vấn đề trên, cấu trúc liệu giải pháp tuyệt vời Dữ liệu tổ chức cấu trúc liệu theo cách để thực tìm kiếm phần tử liệu yêu cầu tìm thấy Độ phức tạp thời gian thực thi cấu trúc liệu giải thuật Có trường... cấu trúc liệu • Trường hợp tốt (Best Case): tình mà thời gian thực thi phép tính cấu trúc liệu Ví dụ Thuật ngữ Cấu trúc liệu • Dữ liệu: Dữ liệu giá trị tập hợp giá trị • Phần tử liệu: Phần tử liệu. .. trường hợp thường sử dụng để so sánh thời gian thực thi cấu trúc liệu khác nhau: • Trường hợp xấu (Worst Case): tình mà phép tính cấu trúc liệu tốn thời gian tối đa (thời gian dài nhất) Ví dụ với

Ngày đăng: 08/09/2017, 03:31

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan