Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5 Bài giảng cấu trúc dữ liệu và giải thuật 5
Data Structures and Algorithms Reference : Dr Halena Wong – www.cs.cityu.edu.hk Lecturer : MSc Trinh Quoc Son University of Information Technology Email : sontq@uit.edu.vn Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - Reference Books Data Structures and Algorithm Analysis in C By Mark Allen Weiss [Addison Wesley] Shaffer Standish … Gilberg Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - Programming Language and Tools • We will write programs in C language Week 1,2 (at home) • Assignment/exercises can be use with Visual C++ • Review C programming • If you have missed something, find your tutor immediately! If you consider other C programming tools: eg Visual Studio.Net, Pelles C (http://www.smorgasbordet.com/pellesc/) - The compiler acts in the same way as Visual C++? Mostly not Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - Indentation (use tabs) / format: if (x>y) county++; else if (x>z) {countz++; countx++;} if (x>y) county++; else if (x>z) {countz++; countx++; } Hard coding should be avoided: if (x >36) { x=0; y++; } const int WIDTH=36; if (x >WIDTH) { x=0; y++; } GOOD GOOD Global variables: only if necessary and appropriate int i, j; void count() { for (i=0;… … } void main() { for (i=0;… … } const int SIZE=10; int table[SIZE][SIZE]; void PrintTable() { } void main() { } Comments (Enough but not excess!) • Describe the program at the beginning • Describe important variables and global declarations • Describe each function before the function • Explain any complex logic OK Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - Program bugs are normal You should fix them! Design of logic Coding Testing !! ERROR Trust yourself: Your program is based on a workable logic, right? Now, the error is probably due to careless mistakes only With 99.9% sure these mistakes can be caught by using the debugger But after I have corrected the bug, the program still goes wrong Should I undo the correction? No Don’t undo the correction Now there is probably another small bug that you need to fix Don’t give up You are approaching to success Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - Any problem in fixing a program bug? • First of all: solve for all compilation warnings(these are usually hints of bugs) • A general debugging cycle: Test it again with simple test cases (increase complexity gradually) Select a simplest test case that your program runs incorrectly With the test case, trace the code with pencil and paper (write down all intermediate results obtained step-by-step) Run your program with debugger to trace the program (adding breakpoints / tracing line by line) Locate the statement that causes any difference compared with your pencil-and-paper tracing Fix the bug Test the program with another test case Trust yourself on the logic: “the bug should be a careless mistake and can be fixed” – otherwise you will never start debugging Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena get Help (MSDN): a convenient reference for C Course Introduction - Any problem in this course? • Send me emails to ask any question of this course • Email subject should be relevant eg “help” • Attach any related program source code and test case I may contact you by email If you prefer NOT to receive my email, please inform me as soon as possible Data Structures and Algorithms City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena Course Introduction - CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT TRƢỜNG ĐH CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 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 1, ĐHQG Tp HCM, 2000 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Robert Sedgewick Cẩm nang thuật tốn (bản dịch nhóm tác giả ĐH KHTN), NXB Khoa học kỹ thuật, 1994 P S Deshpande, O G Kakde C & Data Structures, 2004 Dr Dobb's Algorithms and Data Structures, 1999 A.V Aho, J.E Hopcroft, J.D Ullman Data structures and Algorithms, Addison Wesley, 1983 Nội Dung Chƣơng Trình Buổi 1: Giới thiệu CTDL & Giải Thuật Các thuật tốn tìm kiếm CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Buổi 2: Interchange Sort, Selection Sort, Bubble Sort, Insertion Sort Buổi 3: Shaker Sort, Shell Sort, Heap Sort Buổi 4: Quick Sort, MergeSort, Radix Sort Buổi 5: Cấu trúc động, Danh sách liên kết đơn Tổ Click chức To liệu Edit Master Title Style 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu Chỉ số cân = độ lệch trái phải nút Các giá trị hợp lệ : CSCB(p) = phải (p) CSCB(p) = phải (p) CSCB(p) = -1 cao phải (p) Độ cao trái (p) = Độ cao Độ cao trái (p) < Độ cao Độ cao trái (p) > Độ 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu Tổ Click chức To liệu(tt) Edit Master Title Style #define LH -1 //cây trái cao #define EH //cây trái phải #define RH //cây phải cao typedef struct tagAVLNode { char balFactor; //chỉ số cân Data key; struct tagAVLNode* pLeft; struct tagAVLNode* pRight; }AVLNode; typedef AVLNode *AVLTree; CácClick trường cân lệch trái Tohợp Edit Master Title Style Cây cân nút T T TH1: Left-Left 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu T1 L1 TH2: Left-Right R T T1 R R1 T2 L1 L21 R21 CácClick trường cân lệch phải Tohợp Edit Master Title Style Cây cân nút T TH3: Right-Right TH4: Right-Left T 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu T L L T1 L1 T1 T2 R1 L21 R1 R21 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CácClick thaoTo tácEdit Master cânTitle bằngStyle Khi thêm hay xoá nút cây, cĩ thể làm cho tính cân bằng, ta phải tiến hành cân lại Cây có khả cân thay đổi chiều cao: Lệch nhánh trái, thêm bên trái Lệch nhánh phải, thêm bên phải Lệch nhánh trái, hủy bên phải Lệch nhánh phải, hủy bên trái Cân lại : tìm cách bố trí lại cho chiều cao cân đối: Kéo nhánh cao bù cho nhánh thấp 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CânClick bằngTo lạiEdit trường hợp 1Title Style Master T T1 T1 L1 R L1 T R1 R1 R 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void LL(AVLTree &T) { AVLNode *T1=T->pLeft; T->pLeft = T1->pRight; T1->pRight=T; switch(T1-> balFactor) { case LH: T-> balFactor =EH; T1->balFactor=EH; break; case EH: T->balFactor=LH; T1->balFactor =RH; break; } T=T1; } CânClick bằngTo lạiEdit trường hợp 2Title Style Master T T2 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu T1 R T1 T2 L1 L1 L21 R21 10 T L21 R21 R 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void LR(AVLTree &T) { AVLNode *T1=T->pLeft; AVLNode *T2=T1->pRight; T->pLeft=T2->pRight; T2->pRight=T; T1->pRight= T2->pLeft; T2->pLeft = T1; switch(T2->balFactor) { case LH: T->balFactor=RH; T1->balFactor=EH; break; case EH: T->balFactor = EH; T1->balFactor=EH; break; case RH: T->balFactor =EH; T1->balFactor= LH; break; }T2->balFactor =EH; T=T2 } 11 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CânClick bằngTo lạiEdit trường hợp 3Title Style Master T T1 L T1 T L1 L 12 R1 R1 L1 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void RR(AVLTree &T) { AVLNode *T1= T->pRight; T->pRight=T1->pLeft; T1->pLeft=T; switch(T1-> balFactor) { case RH: T-> balFactor = EH; T-> balFactor = EH; break; case EH: T-> balFactor = RH; T1-> balFactor = LH; break; } T=T1 } 13 CânClick bằngTo lạiEdit trường hợp 4Title Style Master T T2 L T1 T1 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu T T2 R1 L L21 R21 14 L21 R21 R1 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void RR(AVLTree &T) { AVLNode *T1= T->pRight; AVLNode *T2=T1->pLeft; T->pRight = T2->pLeft; T2->pLeft = T; T1->pLeft = T2->pRight; T2->pRight = T1; switch(T2-> balFactor) { case RH: T-> balFactor = LH; T1-> balFactor = EH; break; case EH: T-> balFactor = EH; T1-> balFactor = EH; break; case LH: T-> balFactor = EH; T1-> balFactor = RH; break; } T2-> balFactor =EH; T=T2;} 15 Thêm nút Click To Edit Master Title Style Thêm bình thường trường hợp NPTK Nếu tăng trưởng chiều cao 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu Lần ngược gốc để phát nút bị cân Tiến hành cân lại nút thao tác cân thích hợp Việc cân lại cần thực lần nơi cân 16 HủyClick nútTo Edit Master Title Style Hủy bình thường trường hợp NPTK Nếu giảm chiều cao: 11 THUẬT GIẢI CẤU THUẬT GIẢI VÀ LIỆU DỮ TRÚC CẤUTRÚC giải thuật liệuVÀ dữLIỆU trúcDỮ Cấu Lần ngược gốc để phát nút bị cân Tiến hành cân lại nút thao tác cân thích hợp Tiếp tục lần ngược lên nút cha… Việc cân lại co thể lan truyền lên tận gốc 17 ... Introduction - CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT TRƢỜNG ĐH CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 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 1, ĐHQG... tập CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHƢƠNG TỔNG QUAN VỀ CTDL VÀ THUẬT TOÁN Nội Dung Tổng quan CTDL thuật tốn Các tiêu chuẩn CTDL Vai trị CTDL CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Độ phức tạp thuật. .. Của Cấu Trúc Dữ Liệu Cấu trúc liệu đóng vai trị quan trọng việc kết hợp đưa cách giải toán CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CTDL hỗ trợ cho thuật toán thao tác đối tượng hiệu 25 Thực Hiện Và