Nghiên cứu và làm rõ những khái niệm, tính chất về cấu trúc dữ liệu hàng đợi, cây, cây nhị phân, cây nhị phân cân bằng, cây nhị phân tìm kiếm, cây đỏ đen
MỤC LỤC LỜI CẢM ƠN PHẦN MỞ ĐẦU .5 Lý chọn đề tài Mục tiêu đề tài Đối tượng phạm vi nghiên cứu .6 3.1 Đối tượng nghiên cứu 3.2 Phạm vi nghiên cứu .6 Cách tiếp cận phương pháp nghiên cứu 4.1 Cách tiếp cận 4.2 Phương pháp nghiên cứu CHƯƠNG 1: HÀNG ĐỢI .7 TỔNG QUAN VỀ CẤU TRÚC HÀNG ĐỢI 1.1 Định nghĩa 1.2 Tính chất .9 1.3 Trừu tượng hóa cấu trúc hàng đợi .9 1.4 Các phép toán hàng đợi .9 2.5 Cài đặt hàng đợi 2.5.1 Cài đặt hàng đợi mảng 10 2.2 Cài đặt hàng đợi danh sách liên kết 16 CHƯƠNG 2: CÂY 20 2.1 Tổng quan cấu trúc 20 2.1.1 Định nghĩa khái niệm 20 Trang 2.2 Cây nhị phân 22 2.2.1 Định nghĩa 22 2.2.2 Tính chất 23 2.2.3 Các thao tác nhị phân 25 2.2.4 Cài đặt nhị phân 25 2.3 Cây nhị phân tìm kiếm 28 2.3.1 Định nghĩa 28 2.3.2 Các thao tác CNPTK 29 2.3.3 Cài đặt nhị phân tìm kiếm 29 2.3.4 Phân tích đánh giá 32 2.4 Cây nhị phân cân tìm kiếm 32 2.4.1 Cây nhị phân cần hoàn toàn 32 2.4.1.1 Định nghĩa: 32 2.4.1.2 Đánh giá: 32 2.4.2.Cây nhị phân tự cân (cây AVL) 32 2.4.2.1 Định nghĩa: 32 2.4.2.3 Các thao tác AVL 33 2.4.2.4 Cài đặt AVL 33 2.4.2.5 Đánh giá 37 CHƯƠNG MÔ PHỎNG TRỰC QUAN CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI VÀ CÂY 39 3.1 Phân tích ý tưởng 39 3.1.1 Phân tích 39 3.1.2.Ý tưởng 40 3.2 Giao diện 40 Trang KẾT LUẬN 45 Ưu điểm 45 Nhược điểm 45 Hướng phát triển 45 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 46 NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN 47 Trang LỜI CẢM ƠN Sau thời gian học tập, tìm hiểu nghiên cứu khoa Đào Tạo quốc tế - trường Đai học Duy Tân, giúp đỡ quý báu thầy giáo, giáo nhóm chúng em hồn thành nghiên cứu khoa học Để hồn thành nghiên cứu cách hồn thiện có thể, trước hết cho phép chúng em bày tỏ lời cảm ơn chân thành tới cô Nguyễn Thị Bảo Trang hướng dẫn tận tình, giúp đỡ chúng em suốt trình hồn thành nghiên cứu Ngồi em xin cảm ơn thầy, cô với giúp đỡ nhiệt tình trình giảng dạy trang bị cho chúng em tảng kiến thức vững tài liệu thao khảo lập trình Đây lần chúng em làm nghiên cứu kinh nghiệm thân hạn chế nên nghiên cứu chúng em tránh khỏi sai sót Vì vậy, chúng em mong nhận bảo, đóng góp ý kiến thầy để chúng em có điều kiện bổ sung, nâng cao kiến thức mình, phục vụ tốt công tác thực tế sau Em xin chân thành cảm ơn! Đà Nẵng ngày , tháng ., năm Trang PHẦN MỞ ĐẦU Lý chọn đề tài Trong khoa học máy tính, cấu trúc liệu cách lưu liệu máy tính cho sử dụng cách hiệu Một cấu trúc liệu lựa chọn cẩn thận cho phép thực thuật tốn hiệu Việc xây dựng chương trình nhằm hỗ trợ tốt cấu trúc liệu Hàng đợi ueue Cây Tree góp phần giúp cho q trình giảng dạy Giảng viên mơn cấu trúc liệu & giải thuật tốt Nhằm tìm hiểu thuật toán cấu trúc liệu giải thuật, tạo điều kiện cho sinh viên có khả tìm tịi, tự học làm việc độc lập Những hình ảnh cụ thể ln tạo cho sinh viên có nhìn trực quan việc học, với q trình mơ hình ảnh đề tài hỗ trợ cho người học tiếp thu kiến thức cách nhanh nắm vấn đề lớp hiểu r cấu trúc liệu Hàng đợi Cây lưu trữ máy tính nắm t ng bước thực giải thuật hai cấu trúc liệu Đề tài thúc đẩy chất lượng việc học cao hơn, tạo tảng lập trình vững cho sinh viên sau uá trình giảng dạy giảng viên ln vấn đề quan trọng, ảnh hưởng tới việc học tiếp thu sinh viên Vậy nên chương trình nhằm nâng cao chất lượng giảng dạy đào tạo giảng viên dành cho sinh viên công nghệ thông tin trường ĐH Duy Tân nói riêng trường cao đẳng, đại học tồn quốc nói chung Tạo sản phẩm trí tuệ ảnh hưởng tới việc học việc giảng dạy nhằm quảng bá uy tín thương hiệu trường Đại học Duy Tân, tạo niềm tin cho học sinh sinh viên đam mê lập trình muốn theo đường cơng nghệ, nhằm hướng đến trường Đại học có chất lượng giảng dạy cao nhằm đáp ứng nhu cầu tuyển dụng Công nghệ thông tin ngày tăng doanh nghiệp Mục tiêu đề tài Đề tài nghiên cứu khái niệm, tính chất, phép tốn chèn, xóa, tìm kiếm cấu trúc liệu Hàng đợi, Cây, Cây nhị phân , Cây nhị phân cân bằng, Cây nhị phân tìm Trang kiếm, Cây đỏ đen t mơ phép tốn Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen cách trực quan Đối tượng phạm vi nghiên cứu 3.1 Đối tượng nghiên cứu - Lý thuyết cấu trúc liệu Hàng đợi Cây - Hoạt động Hàng đợi, Cây việc áp dụng giải thuật Hàng đợi, Cây số toán - Ngơn ngữ lập trình Java dùng để phục vụ cho hướng phát triển mô trực quan cấu trúc liệu giải thuật Hàng đợi Cây 3.2 Phạm vi nghiên cứu - Nghiên cứu làm r khái niệm, tính chất cấu trúc liệu Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen - Nghiên cứu phép tốn chèn, xóa, tìm kiếm Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen - Thực mơ phép tốn Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen Cách tiếp cận phương pháp nghiên cứu 4.1 Cách tiếp cận Tiếp cận t lý thuyết thực tiễn giải pháp 4.2 Phương pháp nghiên cứu - Tìm hiểu lý thuyết cây, hàng đợi đồ họa qua tài liệu - Trong trình tìm hiểu học hỏi bạn bè, giáo viên mặt lý thuyết thao tác xây dựng đồ án - Thực hành xây dựng t ng bước đến hoàn chỉnh Trang CHƯƠNG 1: HÀNG ĐỢI TỔNG QUAN VỀ CẤU TRÚC HÀNG ĐỢI 1.1 Định nghĩa Là danh sách phép toán thực hai đỉnh danh sách Một đỉnh gọi đầu hàng, đỉnh lại gọi cuối hàng Thêm cuối danh sách tail , cịn bớt phía đầu danh sách head Xếp hàng mua vé xe lửa hình ảnh hàng đợi, người đến trước mua vé trước, người đến sau mua vé sau Ví dụ: head hàng đợi words T cần chèn vào more store in a tail hàng đợi queue Hình 1.1: Hàng đợi trước khơng thêm Trang wods store head hàng đợi in a queue more tail hàng đợi Hình 1.2: Hàng đợi sau thêm từ more head hàng đợi store in a queue tail hàng đợi more Hình 1.3: Hàng đợi sau xóa từ words Trang 1.2 Tính chất Vào trước trước (First in First out: FIFO) 1.3 Trừu tượng hóa cấu trúc hàng đợi Mô tả liệu A = (a0, a1, ,an) Trong đó: a0: Phần tử đầu hàng đợi A an: Phần tử cuối hàng đợi A Ví dụ: A = (1, 3, 5, 7, 9) đó: 1: phân tử đầu hàng đợi 9: phần tử cuối hàng đợi 1.4 Các phép toán hàng đợi Peek: Trả phần tử đầu hàng đợi khơng xóa A = (a0, a1, , an-1, an) peek() a0 Ví dụ: A(1,3,5) peek() Pop: Trả phần tử đầu hàng đợi xóa A = (a0, a1, , an-1, an) A = (a0, a1, , an) Ví dụ: A = (14, 6, 8) pop() A= (6, 8) Push x : Đưa giá trị vào cuối hàng đợi A = (a0, a1, , an) A = (a0, a1, , an, x) Ví dụ: A = (2, 6, 7) push(25) A = (2,6,7,25) 2.5 Cài đặt hàng đợi Có nhiều cách cài đặt hàng đợi: Trang Cài đặt hàng đợi mảng cách sử dụng cặp số theo d i trường hợp đầu đuôi hàng đợi Việc cài đặt hàng đợi mảng xoay tròn sử dụng số đầu hiệu kích thước hàng đợi cố định Cài đặt hàng đợi danh sách liên kết tốt kích thước hàng đợi khơng cố định 2.5.1 Cài đặt hàng đợi mảng Cài đặt hàng đợi cách sử dụng mảng hiệu biết trước số phần tử tối đa hàng đợi Việc loại bỏ phần tử hàng đợi thực đầu mảng việc thêm phần tử vào hàng đợi thực cuối mảng, sử dụng cặp số đầu đuôi khởi tạo mảng vịng Ví dụ: T cần chèn vào First Head hàng đợi Hàng đợi Tail hàng đợi Size Hình 2.5.1: Hàng đợi mảng vịng trước chèn t First Trang 10 Cây nhị phân tìm kiếm cân mà nút độ cao trái phải chênh lệch khơng q Cây cân hồn tồn AVL, AVL chưa cân hồn tồn Tính cân đối AVL nhẹ so với tính cân đối nhị phân cân hoàn toàn 2.4.2.3 Các thao tác AVL Các thao tác AVL bao gồm: Giải thuật chèn Giải thuật xóa Khi thực chèn hay xóa chiều cao cân nên ta có phép quay để tạo lại cân cho uay đơn phải - phải (right - right) uay đơn trái - trái left - left) uay kép trái - phải (left - right) uay kép phải - trái right - left) 2.4.2.4 Cài đặt AVL Định nghĩa AVL public class AVLTree{ private class AVLNode{ private int data; private AVLNode left, right; } AVLNode root; } Khởi tạo AVL public AVLNode(){ data = 0; left = right = null; } Trang 33 public AVLNode(int x){ data = x; left = right = null; } public AVLTree(){ root = null; } Giải thuật tính chiều cao publicint high(AVLNode T){ if (T==null) return 0; return + Math.max(high(T.left),high(T.right)); } Giải thuật tìm kiếm Node nhỏ private Node findMin(Node t){ if(t == null) return t; while(t.pLeft != null) t = t.pLeft; return t; } Giải thuật chèn Việc theo đường tìm kiếm để thấy khóa chưa có sẵn biết "chỗ" để bổ sung vào, tất nhiên thực tương tự việc bổ sung node vào nhị phân Khi chèn node AVL tính cân bị phá vỡ, cần hai phép quay để tái cân AVL, nên ta có thêm giải thuật quay sau: Trường hợp 1(LL): Quay phải Node gốc Trang 34 public AVLNode qL(AVLNode T){ AVLNode x = T; AVLNode y = x.left; x.left = y.right; y.right = x; return y; } Trường hợp (LR): Trước hết thực phép quay trái Node gốc trái để đưa TH1 LL sau thực phép quay phải Node gốc cha public AVLNode qLR(AVLNode T){ AVLNode x = T; AVLNode y = x.right; AVLNode z = y.left; x.right = z.left; y.left = z.right; z.left = x; z.right = y; return z; } Trường hợp 3(RR): Thực phép quay trái Node gốc Trang 35 public AVLNode qR(AVLNode T){ AVLNode x = T; AVLNode y = x.right; x.right = y.left; y.left = x; return y; } Trường hợp (RL): Trước hết thực phép quay phải Node gốc trái để đưa TH3 RR sau thực phép quay trái Node gốc public AVLNode qRL(AVLNode T){ AVLNode x = T; AVLNode y = x.left; AVLNode z = y.right; y.right = z.left; x.left = z.right; z.left = y; z.right = x; return z; } T phép quay ta có giải thuật chèn sau: public AVLNode insert(int x, AVLNode T){ if (T==null) T = new AVLNode(x); else{ if(T.data==x) System.out.println("Trung"); else{ if (x1) Trang 36 if (h1>h2) if (high(T.left.left)>high(T.left.right)) qL(T); else qRL(T); else if (high(T.right.left)>high(T.right.right)) qR(T); else qLR(T); return T; } } } Giải thuật xóa Loại bỏ giống giải thuật loại bỏ nhị phân, khác sau loại bỏ bị cân đối phải tái cân đối phép quay làm bổ sung Việc hủy nút phải cân dây chuyền nút t gốc phần tử bị hủy thêm vào cần lần cân cục private Node remove(int x, Node t){ if(t == null) return t; if(x < t.number) t.pLeft = remove(x, t.pLeft); elseif(x > t.number) t.pRight = remove(x, t.pRight); else if(t.pLeft != null&& t.pRight != null){ t.number = findMin(t.pRight).number; t.pRight = remove(t.number, t.pRight); } else t = (t.pLeft != null) ? t.pLeft : t.pRight; if(getHeight(t.pLeft) - getHeight(t.pRight) > 1) if(getHeight(t.pLeft.pLeft) >= getHeight(t.pLeft.pRight)) t = qL(t); else t = qRL(t); elseif(getHeight(t.pRight) - getHeight(t.pLeft) > 1) if(getHeight(t.pRight.pRight) >= getHeight(t.pRight.pLeft)) t = qR(t); else t = qLR(t); return t; } 2.4.2.5 Đánh giá Cây nhị phân tìm kiếm mà ln có dạng cân đối AVL, chi phí tìm kiếm trường hợp xấu O log2n) Trang 37 Ta biết tìm kiếm nhị phân thơng thường có thuậ lợi lớn mặt lưu trữ truy xuất liệu phép tốn tìm kiếm thêm vào hay loại bỏ phần tử Do đó, tìm kiếm nhị phân xem cấu trúc lưu trữ liệu tốt Tuy nhiên, số trường hợp tìm kiếm nhị phân có số hạn chế Nó hoạt động tốt liệu chèn vào theo thứ tự ngẫu nhiên Tuy nhiên, liệu chèn vào theo thứ tự xếp không hiệu Khi trị số cần chèn xếp nhị phân trở nên khơng cân Khi khơng cân bằng, khả tìm kiếm nhanh (hoặc chèn xóa phần tử cho Trang 38 CHƯƠNG MÔ PHỎNG TRỰC QUAN CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI VÀ CÂY 3.1 Phân tích ý tưởng 3.1.1 Phân tích Chương trình mơ t ng bước thực cách trực quan, sinh động, đồng thời giúp người sử dụng dễ dàng hiểu ý nghĩa thuật toán (xuất bên phải chương trình phần thơng tin góc phải chương trình , mở rộng tư việc học dạy Mục tiêu: Mô thuật toán hàng đợi đồ họa bao gồm: Array Queue Linked Queue Binary Tree Binary Search Tree Balance Binary Search Tree Mục đích chương trình nhằm mơ cách đơn giản thuật toán nên viết ngôn ngữ java eclipse ua đó, người dùng tự thiết kế cài đặt chương trình t bước mơ trực quan mà chương trình mẫu sử dụng đem lại uá trình nhập liệu thêm nút “add random” để nhập liệu ngẫu nhiên t máy tính giúp người sử dụng nhanh chóng nhập liệu so với nhập t bàn phím Thao tác hàng đợi đơn giản Người dùng cần nhấn vào diện tích mơ thao tác sử dụng, khơng chạy lúc thao tác với nhằm hạn chế lỗi xảy giúp việc quan sát t ng bước mô không bị gián đoạn Riêng cây, chương trình bổ sung thêm hai chức giúp việc mô tối ưu hơn: Chức vẽ lại vị trí mặc định tất Node hành đồng thời dịch chuyển hình mơ không thu nhỏ giúp cho người dùng tiện lợi muốn phóng to hay thu nhỏ khung chương trình Chức bật tắt địa Node giúp người dùng tùy chỉnh việc bật tắt việc hiển thị địa Node theo ý muốn không thay đổi địa Node Trang 39 3.1.2.Ý tưởng 3.2 Giao diện Gồm phần chính: jPanel hiển thị q trình mơ giao diện jList hiển thị đoạn code gọi trỏ vào dòng lệnh thực jTextArea hiển thị thông tin thời điểm câu lệnh thực Các Menu Danh sách dịng lệnh Khung hiển thị đồ họa Thơng tin dịng lệnh Nút Reset Nút Play/Pause Thanh điều chỉnh tốc độ Hình 1: Giao diện Chương Trình Trang 40 Hình 2: Giao diện ueue cài đặt mãng Hình 3: uá trình Push giá trị vào Array ueue Trang 41 Hình 4: Giao diện ueue cài đặt LinkedList Hình 5: Giao diện Cây nhị phân Trang 42 Hình 6: Phép tìm kiếm Cây nhị phân tìm kiếm Hình 7: uá trình Xoay Cây Cây nhị phân tìm kiếm tự cân Trang 43 Các thao tác thực Thêm Add thêm t bàn phím Add number s thêm ngẫu nhiên Add random Tìm kiếm node (Find value) Duyệt Traveral Duyệt trước (PreOder) Duyệt (InOrder) Duyệt sau (PostOder) Duyệt theo mức (LevelOrder) Xóa Node Delete Vẽ lại vị trí Repaint Location Hiển thị địa node ẩn địa node (Show address/ Hide address) Trang 44 KẾT LUẬN Ưu điểm Giao diện dễ sử dụng Người học tiếp thu cách nhanh chóng tư tưởng giải thuật Phần lớn tiếng Việt Phần mềm mô cho người dùng thấy tổng quan giải thuật hàng đợi Nhược điểm Giao diện đồ họa chưa thực hấp dẫn Chương trình thực mơ phỏng, chưa có ứng dụng thực tế Hướng phát triển Cải tiến giao diện phần mềm Thêm chức khác hỗ trợ việc dạy làm tập, mini game Trang 45 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Trang 46 NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Trang 47 ... trúc liệu Hàng đợi, Cây, Cây nhị phân , Cây nhị phân cân bằng, Cây nhị phân tìm Trang kiếm, Cây đỏ đen t mơ phép toán Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây. .. cấu trúc liệu giải thuật Hàng đợi Cây 3.2 Phạm vi nghiên cứu - Nghiên cứu làm r khái niệm, tính chất cấu trúc liệu Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây. .. Cây đỏ đen - Nghiên cứu phép tốn chèn, xóa, tìm kiếm Hàng đợi, Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen - Thực mơ phép tốn Hàng đợi, Cây, Cây nhị phân, Cây nhị