Để cây cân bằng sau khi thực hiện việc thêm, xóa ta cần các phép toán cânbằng cây: quay trái, quay phải.. Phép quay cây giúp cây cân bằng sau khi thực hiện các phép thêm hoặc xóa.Phép qu
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ SÀI GÒN
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2ĐỒ ÁN TIN HỌC
Trang 3NGÀNH CÔNG NGHỆ THÔNG TIN
Trang 4Lời nói đầu
Trong thời đại ngày nay, quản lý thông tin nói chung và quản lý thông tin sinh viên nóiriêng là một công việc khó khăn đối với các tổ chức giáo dục và các doanh nghiệp liênquan Để nâng cao hiệu suất trong việc tìm kiếm dữ liệu, ta sử dụng cây AVL để thựchiện điều này Là một cấu trúc dữ liệu tự cân bằng, cây AVL giúp giảm thời gian tìmkiếm và đồng thời đảm bảo rằng cơ sở dữ liệu duy trì sự ổn định
Đồ án này nhằm mục đích khám phá và phân tích ứng dụng của cây AVL trong việc quản
lý thông tin sinh viên, đặc biệt là trong việc tối ưu hóa thời gian truy vấn và đảm bảo tínhcân bằng của cơ sở dữ liệu Chúng ta sẽ khám phá cách cây AVL giúp duy trì tính cânbằng và làm thế nào nó ảnh hưởng đến hiệu suất của các thao tác tìm kiếm và truy cập dữliệu Bên cạnh đó, chúng ta cũng sẽ xem xét những lợi ích chi tiết và ứng dụng thực tếcủa việc tích hợp cây AVL trong quản lý thông tin sinh viên
Hãy cùng nhau khám phá và hiểu rõ hơn về cách áp dụng cây AVL vào ứng dụng quản lýsinh viên, để có thể cải thiện khả năng quản lý dữ liệu trong lĩnh vực quản lý sinh viên vàcác ứng dụng khác trong hệ thống thông tin phức tạp
Trang 5MỤC LỤC
1 Khái niệm cây AVL 7
a Phép quay cây: 7
i Phép quay trái: 7
ii Phép quay phải: 8
b Phép thêm và tính cân bằng của cây 8
Cây lệch phải: 9
Cây lệch trái: 10
Cây lệch trái phải-trái: 10
Cây lệch trái-phải: 11
c Phép xóa trên cây 11
Lệch trái: 12
Lệch phải: 12
Lệch phải trái: 12
Lệch trái phải: 13
d Phép tìm kiếm 13
Thực hiện tương tự như trong cây nhị phân tìm kiếm: 13 2 Cơ sở dữ liệu 13
a Danh sách sinh viên 14
3 Giao diện 16
a Thêm 17
b Xóa 18
c Cập nhật thông tin 18
Trang 6d Tìm kiếm 19
e Lưu 21
f Thoát 22
4 Xử lý 22
a Chức năng thêm 23
b Chức năng xóa 24
c Chức năng cập nhật thông tin 25
d Chức năng tìm kiếm 26
e Chức năng lưu 27
f Thoát 28
g Các chức năng khác 29
5 Liên kết cây AVL với danh sách sinh viên 29
a Lớp node 29
Các thuộc tính của lớp node: 29
b Cây AVL 31
Phương thức thêm của cây AVL: 32
Phương thức tìm kiếm của cây: 37
c Liên kết cây AVL vào danh sách sinh viên 38
Trang 7MỤC LỤC HÌNH ẢNH
Hình 1-1 thực hiện phép quay trái 7
Hình 1-2 thực hiện phép quay phải 8
Hình 1-3 thực hiện phép quay cây khi cây lệch phải 9
Hình 1-4 thực hiện phép quay cây khi cây lệch trái 10
Hình 1-5 thực hiện phép quay cây khi cây lệch phải-trái 10
Hình 1-6 thực hiện phép quay cây khi cây lệch trái-phải 11
Hình 1-7 thực hiện phép quay cây khi cây lệch trái sau khi xóa 12
Hình 1-8 thực hiện phép quay cây khi cây lệch phải sau khi xóa 12
Hình 1-9 thực hiện phép quay cây khi cây lệch phải-trái sau khi xóa 12
Hình 1-10 thực hiện phép quay cây khi cây lệch trái-phải sau khi xóa 13
Hình 3-1 giao diện chính của ứng dụng 16
Hình 3-2 giao diện của form thêm 17
Hình 3-3 giao diện của form xóa 18
Hình 3-4 giao diện của form cập nhật thông tin 19
Hình 3-5 cửa sổ tìm kiếm 19
Hình 3-6 cửa sổ tìm kiếm theo mã số 20
Hình 3-7 cửa sổ tìm kiếm theo lớp 20
Hình 3-8 cửa sổ tìm kiếm theo tên 21
Hình 3-9 quá trình lưu dữ liệu 21
Hình 3-10 thoát ứng dụng 22
Hình 4-1 cửa sổ các chức năng tìm kiếm 26
Trang 81 Khái niệm cây AVL
Khái niệm: cây AVL là cây tìm kiếm nhị phân có khả năng tự cân bằng, được nângcấp và phát triển dựa trên cây nhị phân tìm kiếm (BST), là câu trúc dữ liệu đầu tiên
có khả năng này Trong cây AVL tại mỗi node chiều cao của 2 cây con không lệchquá 1 Do vậy khi thực hiện các phép toán thêm, xóa, tìm luôn chỉ tốn thời gian O(log n) Để cây cân bằng sau khi thực hiện việc thêm, xóa ta cần các phép toán cânbằng cây: quay trái, quay phải
Để biết được node của cây có cân bằng hay chưa ta dùng hệ số cân bằng Hệ số cânbằng của một node là hiệu chiều cao của cây con bên trái và cây con bên phải củanode đó
Hệ số cân bằng = chiều cao con trái – chiều cao con phải
a Phép quay cây:
Bao gồm 2 phép quay cây: quay trái, quay phải
Phép quay cây giúp cây cân bằng sau khi thực hiện các phép thêm hoặc xóa.Phép quay cây chuyển một nút cha thành nút con, bảo toàn thứ tự giữ các nodetrên cây
i Phép quay trái:
H ÌNH 1-1 THỰ HIỆN PHÉP QUAY TRÁI
Ta có node gốc là (z) và con phải là (y), phép quay trái chuyển node (y) thànhnode gốc và (z) thành con trái của (y) Để giữ nguyên tính chất của cây nhịphân ta chuyển con trái của (y) trước khi quay (T2) thành con phải của (z).Sau đó ta gán con trái của (y) bằng (z), ta được như hình trên
Thực hiện phép quay trái trong C#
Trang 9ii Phép quay phải:
H ÌNH 1-2 THỰC HIỆN PHÉP QUAY PHẢI
Ta có node gốc là (z) và con trái là (y), phép quay phải chuyển node (y) thànhnode gốc và (z) thành con phải của (y) Để giữ nguyên tính chất của cây nhịphân ta chuyển con phải của (y) trước khi quay (T3) thành con trái của (z).Sau đó ta gán con trái của (y) bằng (z), ta được như hình trên
Ta thực hiện phép quay trái trong C#
b Phép thêm và tính cân bằng của cây
Cây AVL là cây nhị phân tự cân bằng, để duy trì sự cân bằng của cây khi thêm,
ta sử dụng các phép quay để cây cân bằng
Trang 10Cấu trúc của một node trong cây:
Dữ liệu
Con trái và con phải
Chiều cao của node
Thêm node mới vào cây:
Đầu tiên ta thêm node mới vào cây như cây nhị phân thông thường, tuynhiên việc này có thể làm cây mất cân bằng
Tiếp theo ta cập nhật chiều cao cho node mới thêm và di chuyển lên dầnlên gốc cây để cập nhật chiều cao cho từng node
Kiểm tra xem node hiện tại có bị mất cân bằng hay không, nếu node bịmất cân bằng thực hiện phép quay để duy trì cân bằng của cây Có 4 loạiphép quay duy trì cân bằng: quay trái, quay phải, quay trái-phải, quayphải-trái
Lặp lại các bước trên từ node mới thêm đến gốc cho đến khi cây cân bằng
Tính cân bằng của cây:
Cây lệch phải:
H ÌNH 1-3 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH PHẢI
Ta có cây đang ở trạng thái cân bằng, khi ta thêm (F) vào cây, cây mấtcân bằng tại node (B) Ta thấy hệ số cân bằng của (B) là -2 (chiều caocon trái trừ chiều cao con phải) và (F) lại lớn hơn con trái của (B) là(D), suy ra cây lệch phải Để khôi phục trạng thái cân bằng ta thực hiệnphép quay trái tại node (B) Ta được như hình
Trang 11Cây lệch trái:
H ÌNH 1-4 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH TRÁI
Ta có cây đang ở trạng thái cân bằng, khi ta thêm (A) vào cây, cây mấtcân bằng tại node (E) Ta thấy hệ số cân bằng của (E) là 2 (chiều caocon trái trừ chiều cao con phải) và (A) lại bé hơn con phải của (E) là(C), suy ra cây lệch trái Để khôi phục trạng thái cân bằng ta thực hiệnphép quay phải tại node (E) Ta được như hình
Cây lệch trái phải-trái:
H ÌNH 1-5 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH PHẢI - TRÁI
Ta có cây đang ở trạng thái cân bằng, khi ta thêm (F) vào cây, cây mấtcân bằng tại node (C) Ta thấy hệ số cân bằng của (C) là -2 (chiều caocon trái trừ chiều cao con phải) và (F) lại bé hơn con trái của (C) là (G),suy ra cây lệch phải-trái Để khôi phục trạng thái cân bằng ta thực hiệnphép quay kép, quay phải tại node (G) sau đó tiếp tục quay trái tại node(C) Ta được như hình
Trang 12Cây lệch trái-phải:
H ÌNH 1-6 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH TRÁI PHẢI -
Ta có cây đang ở trạng thái cân bằng, khi ta thêm (E) vào cây, cây mấtcân bằng tại node (F) Ta thấy hệ số cân bằng của (F) là 2 (chiều caocon trái trừ chiều cao con phải) và (E) lại lớn hơn con trái của (F) là(B), suy ra cây lệch trái-phải Để khôi phục trạng thái cân bằng ta thựchiện phép quay kép, quay trái tại node (B) sau đó tiếp tục quay phải tạinode (F) Ta được như hình
c Phép xóa trên cây
Quá trình xóa một nút khỏi cây cũng có thể làm mất sự cân bằng của cây Đầutiên phép xóa trên cây AVL cũng tương tự trên cây nhị phân tìm kiếm (BST),cũng có 3 trường hợp: node lá, node có một con và node có 2 con
Node lá ta chỉ cần xóa trực tiếp node đó, node có một con ta chỉ cần lấy nodecon của node đó thế chỗ node cha
Trường hợp node có 2 con, ta phải tìm node lớn nhất bên con trái hoặc nhỏnhất bên con phải để làm node thế mạng Ta gán dữ liệu node thế mạng vàonode cần xóa và xóa node thế mạng ở cây con
Sau đó ta tiến hành cập nhật lại chiều cao cho các node cha từ node đã đượcxóa cho đến node gốc
Tiếp theo ta kiểm tra hệ số cân bằng của từng các node trên đường đi từ nodecha đến node gốc Nếu cây mất cân bằng ta thực hiện phép quay để khôi phụccân bằng cho cây
Khi xóa cây sẽ bị một trong bốn trường hợp sau:
Trang 13Lệch trái:
H ÌNH 1-7 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH TRÁI SAU KHI XÓA
Cây đang ở trạng thái cân bằng, ta thực hiện xóa node (E) Cây bị mấtcân bằng ở node (D), ta thấy hệ số cân bằng (D) là 2 Ta thực hiện phépquay phải tại (D) để khôi phục sự cân bằng của của cây
Lệch phải:
H ÌNH 1-8 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH PHẢI SAU KHI XÓA
Cây đang ở trạng thái cân bằng, ta thực hiện xóa node (A) Cây bị mấtcân bằng ở node (B), ta thấy hệ số cân bằng (B) là -2 Ta thực hiệnphép quay trái tại (B) để khôi phục sự cân bằng của của cây
Lệch phải trái:
H ÌNH 1-9 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH PHẢI - TRÁI SAU KHI XÓA
Cây đang ở trạng thái cân bằng, ta thực hiện xóa node (A) Cây bị mấtcân bằng ở node (B), ta thấy hệ số cân bằng (B) là -2 Ta thực hiệnphép quay phải tại (D) sau đó tiếp tục quay trái tại (B) để khôi phục sựcân bằng của của cây
Trang 14Lệch trái phải:
H ÌNH 1-10 THỰC HIỆN PHÉP QUAY CÂY KHI CÂY LỆCH TRÁI - PHẢI SAU KHI XÓA
Cây đang ở trạng thái cân bằng, ta thực hiện xóa node (D) Cây bị mấtcân bằng ở node (C), ta thấy hệ số cân bằng (C) là 2 Ta thực hiện phépquay trái tại (A) sau đó tiếp tục quay phải tại (C) để khôi phục sự cânbằng của của cây
Các trường hợp này áp dụng sau khi cập nhật chiều cao Việc thực hiệnđúng phép quay nhằm duy trì tính cân bằng của cây đảm bảo thuật toántìm kiếm luôn có thời gian tối ưu
d Phép tìm kiếm
Thực hiện tương tự như trong cây nhị phân tìm kiếm:
Bước 1: Bắt đầu từ node gốc
Bước 2: So sánh giá trị cần tìm với node hiện tại Nếu node cần tìm bằngnode hiện tại Ta đã tìm thấy và trả về node hiện tại.Nếu không tìm thấy
ta di chuyển sang node tiếp theo
Bước 3: Di chuyển xuống Nếu node hiện tại lớn hơn node cần tìm, ta dichuyển đến con trái của node hiện tại, ngược lại ta di chuyển đến conphải của node hiện tại
Bước 4: Lặp lại bước 2 và 3 cho đến khi tìm thấy node hoặc duyệt đếngiá trị null
Kết quả của phép tìm là node cần tìm (nếu tìm thấy) hoặc null (nếu không tìm thấy).
Thiết kế ứng dụng ta sử dụng mô hình 3 lớp Với lớp cơ sở dữ liệu ta sử dụng mẫusingleton để lưu trữ dữ liệu
Trang 15Mẫu Singleton có đặc điểm đảm bảo dữ liệu là duy nhất, không bị trùng lặp ở mọinơi trong chương trình, cung cấp một điểm truy cập toàn cục đến nó Các ưu điểm:Đảm bảo sự duy nhất: điều này đảm bảo rằng chỉ có duy nhất một thể hiện của lớpđược tạo ra.
Tiết kiệm tài nguyên: việc sử dụng mẫu singleton tránh lãng phí tài nguyên bằngcách chỉ sử dụng một biến và tái sử dụng nó
Dễ dàng quản lý toàn cục: thuật tiện truy cập từ mọi nơi trong chương trình
a Danh sách sinh viên.
Ta sử dụng mẫu singleton để quản lý danh sách sinh viên trong ứng dụng.Trước khi lập một danh sách ta thiết kế một lớp để lưu trữ từng sinh viên.Một sinh viên gồm có các thông tin cơ bản : mã số, họ tên, lớp, giới tính, địachỉ, ngày sinh
Trang 16Xây dựng danh sách sinh viên ứng dụng mẫu singleton.
Trang 173 Giao diện.
Trang 18Giao diện chính của ứng dụng Gồm thanh chức năng, ô thông tin chi tiết và danhsách sinh viên.
Thanh chức năng: sử dụng thanh menustrip để hiển thị các chức năng: thêm, xóa,cập nhật thông tin, tìm kiếm, lưu và thoát Để người dùng có thể dễ thao tác.Thông tin chi tiết: sử dụng các label, textbox và radio button để hiển thị thông tinsinh viên, các thông tin này được lấy từ datagridview
Danh sách sinh viên: sử dụng datagridview để hiển thị danh sách sinh viên từ lớp
và chọn giới tính của sinh viên, sau đó nhấn nút thêm Khi thêm thành công sẽ
có thông báo thêm thành công (khi thêm thất bại sẽ có thông báo thêm thấtbại) Khi ấn nút thêm form sẽ đóng và hiển thị sinh viên vừa thêm trên danhsách ở form chính Muốn đóng form ta ấn vào nút quay lại trên thanhmenustrip Form sẽ đóng và quay lại form chính
H ÌNH 3-12 GIAO DIỆN CỦA FORM THÊM
Trang 19b Xóa.
Để thực hiện chức năng xóa, ta click chuột vào nút xóa trên thanh menustrip.Form xóa sẽ hiển thị để thực hiện chức năng xóa
H ÌNH 3-13 GIAO DIỆN CỦA FORM XÓA
Để xóa một sinh viên ta click chọn vào sinh viên cần xóa trong danh sách sinhviên được hiển trên datagridview Thông tin chi tiết của sinh viên được hiển thị
ở trên Sau khi xác nhận sinh viên cần xóa, ta nhấn nút xóa, ứng dụng thôngbáo xóa thành công (hoặc thất bại)
c Cập nhật thông tin.
Để cập nhật thông tin của sinh viên ta thực hiện click chuột vào nút cập nhậtthông tin trên thanh menustrip Form cập nhật thông tin của sinh viên sẽ hiệnlên
Trang 20H ÌNH 3-14 GIAO DIỆN CỦA FORM CẬP NHẬT THÔNG TIN
Để cập nhật thông tin cho một sinh viên cụ thể ta chỉ cần chọn sinh viên đó trêndanh sách sinh viên được hiển thị lên datagridview Sau đó ta nhập thông tincần chỉnh sửa của sinh viên đó trên ô thông tin chi tiết, ấn nút cập nhật để hoàntất việc cập nhật Muốn thoát form ta ấn nút quay lại để quay lại form chính
Trang 21Tìm kiếm theo mã số: ta nhập mã số cần tìm vào thanh tìm kiếm Ấn
nút tìm, nếu tìm thấy sẽ trả về sinh viên vào datagridview và thông tinchi tiết của sinh viên trên ô thông tin chi tiết, nếu không sẽ trả về thôngbáo (mã không tồn tại)
H ÌNH 3-16 CỬA SỔ TÌM KIẾM THEO MÃ SỐ
Tìm kiếm theo lớp: ta nhập tên lớp vào thanh tìm kiếm Rồi ấn nút tìm
kiếm, nếu tìm thấy sẽ trả về tất cả sinh viên trong lớp đó và hiển thị lêndatagridview Nếu không tìm thấy sẽ trả về một danh sách rỗng Thoátform ta ấn nút quay lại để quay lại form chính
Trang 22Tìm kiếm theo tên: ta nhập tên sinh viên vào thanh tìm kiếm Rồi ấn nút
tìm kiếm, nếu tìm thấy sẽ trả về tất cả sinh viên có tên giống với sinhviên cần tìm và hiển thị lên datagridview Nếu không tìm thấy sẽ trả vềmột danh sách rỗng Thoát form ta ấn nút quay lại để quay lại formchính
H ÌNH 3-18 CỬA SỔ TÌM KIẾM THEO TÊN
e Lưu.
Để lưu file ta chỉ cần ấn vào nút lưu file trên menustrip và chọn yes Nếu lưufile thành công ứng dụng sẽ thông báo lưu file thành công, nếu lưu thất bại ứngdụng sẽ thông báo lưu file thất bại
H ÌNH 3-19 QUÁ TRÌNH LƯU DỮ LIỆU
Trang 23Thuộc tính “dssv” dùng lưu trữ danh sách sinh viên.
Phương thức khởi tạo sẽ tiến hành kết nối lớp xử lý và lớp cơ sở dữ liệu thông quabiến data
Trang 24a Chức năng thêm.
Để thực hiện chức năng thêm ta đợi sự kiện click chuột vào nút thêm Khi nhậnđược sự kiện hàm thêm trong lớp xử lý sẽ được gọi Nếu thành công sẽ xuấtthông báo thành công, nếu thất bại xuất thông báo thất bại
Hàm thêm trong lớp xử lý
Trước tiên ta kiểm tra xem mã có tồn tại trong danh sách sinh viên hay chưa.Nếu đã tồn tại ta trả về false nghĩa là hàm thêm thất bại Ngược lại ta thực hiệnthêm sinh viên vào danh sách, trả về true Ta viết thêm cấu trúc try … catch….tránh các trường hợp ngoại lệ
Để thoát được form thêm người dùng cần click chuột vào nút quay lại Khiclick chuột sự kiện của nút quay được thực hiện:
Trang 25Ta sẽ báo cho form chính biết form thêm đã được đóng thông qua delegatedongFormTen().
Hàm xóa trong lớp xử lý