BTL CTDL> ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐỀ TÀI CÁC CẤU TRÚC DỮ LIỆU ĐA CHIỀU Mục lục Mục lục 1. Phần II : Các cấu trúc cây 1.Cây 2 chiều (cây nhị phân ) Cây 2 chiều là cây nhị phân. Mỗi dữ liệu điểm 2 chiều gồm các giá trị toạ độ của điểm và các thông tin khác gắn với điểm này mà ta quan tâm. Vì vậy, mỗi đỉnh của cây 2 chiều là một cấu trúc có dạng sau: Struct Node {
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐỀ TÀI: CÁC CẤU TRÚC DỮ LIỆU ĐA CHIỀU Mục lục Mục lục PHẦN I : Cấu trúc liệu đa chiều 1.Định nghĩa 2.Các phép toán liệu đa chiều 1 Phần II : Các cấu trúc 1.Cây chiều (cây nhị phân ) 1.2 Các phép tốn 1.2a Phép tốn tìm kiếm 1.2b Phép tốn xen 1.2c Phép tốn loại 1.2d Phép tìm kiếm phạm vi Cây K-chiều Cây tứ phân 3.1 Phép tốn tìm kiếm phép tốn xen 3.2 Phép toán loại 4.Cây tứ phân MX 4.1 Phép toán loại Cây cân 5.1 Giới thiệu 5.2 AVL Tree 5.3 Hệ số cân 5.3a Phép quay trái 5.3b Phép quay phải 5.3c Phép quay trái-phải 5.3d Phép quay phải-trái 2 2 3 4 5 6 6 7 8 11 Phần III: Phân công công việc 13 PHẦN I : Cấu trúc liệu đa chiều 1.Định nghĩa - CTDL đa chiều cấu trúc dùng để biểu diễn tập liệu điểm k - chiều , tức liệu biểu diễn vectơ giá trị thuộc tính (x1,…, xk) - Đó liệu hình ảnh (image data), liệu video, liệu audio, liệu văn (document data), liệu viết tay (handwritten data)… 2.Các phép toán liệu đa chiều + - Các phép toán từ điển : tìm kiếm , xen , loại Ví dụ : phép tìm kiếm có nghĩa là: tìm tập liệu điểm k - chiều cho liệu biết vectơ giá trị khố (x1, …, xk) Phép tìm kiếm phạm vi (Range Search) :cho trước điểm liệu (x1, …, xk) số thực dương r, cần tìm tập liệu điểm k - chiều cho tất điểm liệu cách (x1, …, xk) khoảng cách không lớn r Trong không gian - chiều, phép tốn tìm kiếm phạm vi, nói theo ngơn ngữ hình học có nghĩa là, cho trước hình trịn tâm (x, y) bán kính r, cần tìm tất điểm liệu nằm hình tròn Phần II : Các cấu trúc 1.Cây chiều (cây nhị phân ) - - Cây - chiều nhị phân Mỗi liệu điểm - chiều gồm giá trị toạ độ điểm thông tin khác gắn với điểm mà ta quan tâm Vì vậy, đỉnh chiều cấu trúc có dạng sau: Struct Node { infoType info; double Xval; double Yval; Node* left; Node* right; }; Trong đó, trường Xval Yval ký hiệu hoành độ tung độ điểm, trỏ left right trỏ tới đỉnh trái phải, cịn trường info lưu thơng tin khác điểm Nội dung trường info xác định cụ thể tuỳ ứng dụng 1.2 Các phép toán 1.2a Phép tốn tìm kiếm - Giả sử T trỏ trỏ tới gốc 2-chiều, cần tìm xem điểm (x, y) có lưu đỉnh T hay khơng Thuật tốn tìm kiếm 2-chiều tương tự thuật tốn tìm kiếm tìm kiếm nhị phân Chúng ta cho trỏ P chạy đỉnh T, ban đầu P trỏ tới gốc Nếu P ≠ NULL, ta kiểm tra xem (P -> Xval, P -> Yval) có trùng với (x, y) khơng Nếu (P -> Xval, P ->Yval) = (x, y) tìm kiếm thành công dừng lại Giả sử chúng khác P mức chẵn, P -> Xval > x ta cho trỏ P trỏ tới đỉnh trái nó, cịn P -> Xval ≤ x cho P trỏ tới đỉnh phải Tương tự, P mức lẻ P -> Yval > y, cho P trỏ tới đỉnh trái cịn P -> Yval ≤ y cho P trỏ tới đỉnh phải Q trình lặp lại Nếu tới thời điểm P = NULL có nghĩa tìm kiếm thất bại dừng lại 1.2b Phép toán xen - Giả sử cần xen vào 2-chiều T đỉnh chứa điểm (x, y) Nếu T rỗng, ta tạo đỉnh chứa điểm (x, y), trường left right chứa NULL, cho trỏ T trỏ tới đỉnh Nếu T không rỗng, ta tiến hành giống tìm kiếm, cho trỏ P chạy đỉnh cây, gốc Nếu P ≠NULL (P -> Xval, P -> Yval) = (x, y) điều có nghĩa điểm (x, y) có sẵn T, ta dừng lại Nếu P ≠ NULL ta cần cho P trỏ tới đỉnh trái nó, P -> left NULL, ta tạo đỉnh chứa điểm (x, y) cho trỏ P -> left trỏ tới đỉnh Còn P ≠ NULL ta cần cho P trỏ tới đỉnh phải P, P đỉnh phải, đỉnh cần xen vào đỉnh phải P 1.2c Phép toán loại - Giả sử T 2-chiều, cần loại khỏi đỉnh chứa điểm (x, y) Phép toán loại phép toán phức tạp phép toán 2-chiều Tư tưởng thuật toán loại 2-chiều tương tự tìm kiếm nhị phân Trước hết ta cần tìm đỉnh cần loại, giả sử đỉnh P Nếu P đỉnh lá, việc loại P đơn giản, ta cần đặt trỏ liên kết từ đỉnh cha P tới P NULL thu hồi nhớ cấp phát cho P Giả sử P khơng phải đỉnh lá, tức hai P không rỗng Ta ký hiệu Tl trái P, Tr phải P Các hành động phụ thuộc vào phải Tr rỗng hay khơng rỗng Ta xét khả năng: • Cây phải Tr không rỗng Trong trường hợp ta thực bước sau: B1: Tìm đỉnh Q thuộc Tr thay cho đỉnh P Đỉnh Q cần phải phân hoạch miền liệu giống P B2: Thay đỉnh P đỉnh Q Điều thực cách chuyển liệu chứa đỉnh Q lên đỉnh P, tức đặt: + P -> info = Q -> info + P -> Xval = Q -> Xval + P-> Yval = Q -> Yva B3: Loại đệ quy đỉnh Q khỏi Tr 1.2d Phép tìm kiếm phạm vi Vấn đề đặt là, cho trước điểm (x, y) số thực dương r, cần tìm tất điểm chứa đỉnh 2-chiều, nằm hình trịn tâm (x,y) với bán kính r Để giải vấn đề này, cần lưu ý rằng, đỉnh 2-chiều biểu diễn miền Miền tương ứng với đỉnh miền hình chữ nhật [X1, X2, Y1,Y2 ], đó: + (X1, Y1) toạ độ góc bên trái hình chữ nhật + (X2, Y2) toạ độ góc bên phải hình chữ nhật, miền gồm tất điểm (x, y) mà X1 ≤ x < X2 Y1 ≤ y < Y2 Cây K-chiều - Cây 2-chiều để biểu diễn liệu điểm chiều Chúng ta cần 3-chiều để biểu diễn điểm (x, y, z) không gian chiều, 4-chiều để biểu diễn điểm (x, y, z, t), với t chiều thời gian chẳng hạn Tổng quát, liệu điểm k-chiều (xo, x1, …, xk-1) (k > 2) biểu diễn CTDL k-chiều Cây k-chiều tổng quát hoá tự nhiên 2- chiều Cây k-chiều nhị phân Mỗi đỉnh k-chiều cấu trúc giống cấu trúc biểu diễn đỉnh 2-chiều, khác thay cho trường Xval Yval sử dụng mảng Xarray[k] để lưu điểm (xo, x1, …, xk-1) Struct Node { infoType info; Double Xarray[k]; Node* left; Node* right; }; - Các thuật tốn tìm kiếm, xen, loại, tìm kiếm phạm vi k-chiều tổng quát hoá tự nhiên thuật toán tương ứng 2- chiều Nhận xét Ưu điểm k-chiều dễ cài đặt Cũng tìm kiếm nhị phân, dễ dàng thấy rằng, thời gian thực phép tốn tìm kiếm, xen, loại k-chiều O(h), h độ cao Trong trường hợp xấu nhất, k-chiều với n đỉnh có độ cao n, thời gian thực phép tốn tìm kiếm, xen, loại O(n) - Cây tứ phân - CTDL tứ phân (quadtree) sử dụng để biểu diễn điểm 2- chiều Trong 2-chiều, đỉnh phân hoạch miền mà biểu diễn thành hai phần theo đường thẳng đứng (theo chiều x), theo đường nằm ngang (theo chiều y), 2-chiều nhị phân Trong tứ phân, điểm phân hoạch miền mà đại diện thành bốn phần theo hai chiều: phần tây-bắc (NW), phần đông-bắc (NE), phần đông- nam (SE) phần tây-nam (SW) - Cấu trúc đỉnh tứ phân tương tự cấu trúc đỉnh 2- chiều, khác ta cần đưa vào bốn trỏ trỏ tới bốn đỉnh Struct Node { infoType info; double Xval; double Yval; Node* NW-pointer; Node* NE-pointer; Node* SE-pointer; Node* SW-pointer; }; 3.1 Phép tốn tìm kiếm phép tốn xen Hai phép toán tiến hành theo phương pháp 2-chiều Để tìm kiếm (hoặc để xen vào) điểm, cần tìm miền chứa điểm Mỗi điểm đại diện cho miền hình chữ nhật Nếu điểm P có tọa độ (xP, yP) biểu diễn miền hình chữ nhật [X1, X2; Y1, Y2 ] điểm P chia miền thành bốn miền sau: Miền NW = [X1,xP; yP, Y2 ] Miền NE = [xP, X2; yP, Y2 ] Miền SW = [X1, xP; Y1, yP ] Miền SE = [xP, X2; Y1, yP ] Muốn biết tứ phân có chứa điểm (x, y) hay khơng, xem xét đỉnh cây, kể từ gốc Nếu đỉnh xem xét đỉnh P điểm (xP, yP) (x, y) có nghĩa ta tìm kiếm thành cơng Nếu khơng, tuỳ thuộc điểm (x, y) nằm miền bốn miền NW, NE, SE, SW mà ta xem xét đỉnh P tương ứng với miền Nếu đỉnh cần xem xét khơng có, ta kết luận điểm (x, y) khơng có tứ phân 3.2 Phép toán loại Loại đỉnh P(x, y) khỏi tứ phân phức tạp Nhớ lại rằng, để loại đỉnh P khỏi 2-chiều P khơng phải đỉnh lá, ta tìm đỉnh Q phải Tr P cho Q cho phân hoạch miền liệu giống P, thay P Q loại đệ quy Q khỏi Tr Đối với tứ phân ta áp dụng kỹ thuật khơng? Tức là, để loại đỉnh P khỏi tứ phân P đỉnh (nếu P đỉnh việc loại tầm thường), ta tìm đỉnh Q thuộc NW, NE, SE, SW đỉnh P, thay cho đỉnh P, tức Q phân hoạch miền liệu giống P? Nếu tìm đỉnh Q thế, ta thay P Q loại đệ quy Q khỏi chứa Song đáng tiếc khơng phải lúc ta tìm đỉnh Q thay cho đỉnh P 4.Cây tứ phân MX - - Cây tứ phân MX có ưu điểm hình dạng khơng phụ thuộc vào thứ tự điểm xen vào cây, hay nói cách khác, tập điểm biểu diễn tứ phân MX Một ưu điểm khác là, phép toán tứ phân MX tìm kiếm tìm kiếm phạm vi, xen vào dễ dàng tứ phân, cịn phép tốn loại đơn giản hiệu Ý tưởng biểu diễn tập điểm mặt phẳng tứ phân MX sau Chúng ta giả sử tập điểm mà quan tâm nằm miền hình vng Chia hình vng thành lưới 2k x 2k vng (với k đó), điểm góc bên trái xem có toạ độ (0, 0), điểm góc bên phải có toạ độ (2k , 2k ) Trong ứng dụng ta cần chọn k thích hợp cho điểm mà ta quan tâm tương ứng với điểm (i, j) lưới với ≤i, j ≤ 2k – 4.1 Phép toán loại Phép toán loại tứ phân MX thực đơn giản Trước hết ta cần lưu ý đến tính chất tứ phân MX: tất đỉnh nằm mức (mức k) đỉnh chứa điểm liệu Khi thực phép loại, phải đảm bảo sau loại cịn thoả mãn tính chất Thủ tục loại khỏi tứ phân MX đỉnh chứa điểm (x, y) sau Tìm đỉnh chứa điểm (x, y), giả sử đỉnh P Giả sử cha đỉnh P đỉnh Q Để loại đỉnh P, ta cần đặt trỏ đỉnh Q trỏ tới P NULL thu hội vùng nhớ đỉnh P Sau kiểm tra, đỉnh Q cịn chứa trỏ khác NULL khơng cần làm nữa, bốn trỏ Q NULL, tức Q trở thành đỉnh lá, ta lại loại đỉnh Q Lặp lại trình trên, trường hợp xấu trình dẫn ta tới xem xét gốc có đỉnh hay khơng Cây cân 5.1 Giới thiệu - Định dạng cấu trúc thay đổi phụ thuộc vào thứ tự chèn liệu Trong trường hợp xấu nhất, có dạng đường tuyến tính (giống với danh sách liên kết), thao tác có hiệu thấp Trong trường hợp trung bình ta có độ phức tạp thời gian thao tác chèn, xóa, tìm kiếm phần tử O(logn), trường hợp xấu O(n).Một áp dụng thuật toán giúp định dạng cân Được gọi cân 5.2 AVL Tree - Cây AVL nhị phân tìm kiếm mà khác biệt chiều cao trái bên phải không vượt Các thao tác với AVL thêm node xóa node khỏi giống với nhị phân tìm kiếm, có khác biệt ta cần trì cân (sự khác biệt chiều cao bên trái bên phải node không vượt 1) - Ưu điểm AVL: Hiệu tìm kiếm ln đảm bảo kể trường hợp xấu (bằng O(logN)) Nhược điểm: Khi chèn phần tử xóa phần tử khỏi cần thêm thao tác giữ cho cân - 5.3 Hệ số cân - - Gọi B là giá trị của ( chiều cao bên trái - chiều cao bên phải) Để trì khác biệt chiều cao trái phải node nhỏ 1, node lưu giá trị B Giá trị này được gọi là hệ số cân bằng, những node có trị tuyệt đối của hệ số cân bằng vượt quá thì cần được điều chỉnh lại.Hệ số cân bằng của các node ở mức cuối cùng (node lá) luôn bằng không Các phép quay AVL Khi có yếu tố gây cân cây, AVL thực trình tự điều chỉnh để lấy lại cân phép quay, bao gồm: + + + + Quay trái Quay phải Quay trái-phải Quay phải-trái 5.3a Phép quay trái Trong trường hợp trạng thái không cân node chèn vào làm phải có node gốc node phải Lúc ta phải thực phép quay trái để đưa trở lại trạng thái cân Ở ví dụ trên, node A trở thành node khơng cân có node chèn vào bên phải Chúng ta thực phép quay trái đưa node A trở thành trái node B, để đưa trạng thái cân 5.3b Phép quay phải Trong trường hợp trạng thái không cân node chèn vào làm trái có node gốc node trái Lúc ta phải thực phép quay phải để đưa trở lại trạng thái cân Ở ví dụ trên, thực phép quay phải ta đưa node A (node cân bằng) trở thành phải node B 5.3c Phép quay trái-phải Khi node chèn vào làm phải trái Điều làm cho node C bị cân Trong tình ta phải thực phép quay kết hợp trái - phải, để đưa trở trạng thái cân Đầu tiên, trái node C, ta thực phép quay trái để khiến A trở thành trái B Sau thực xong phép quay trái, chưa trạng thái cân Để đưa trở trạng thái cân bằng, ta cần tiếp tục thực phép quay phải Phép quay phải đưa B trở thành node gốc Node C trở thành phải B 10 Sau phép quay kết hợp, có trạng thái cân 5.3d Phép quay phải-trái 11 Khi node chèn vào làm trái phải Điều làm cho node A bị cân Trong tình ta phải thực phép quay kết hợp phải - trái, để đưa trở trạng thái cân Đầu tiên, phải node A, ta thực phép quay phải để khiến C trở thành phải B Sau thực xong phép quay phải, chưa trạng thái cân Để đưa trở trạng thái cân bằng, ta cần tiếp tục thực phép quay trái Phép quay trái tiếp theo đưa B trở thành node gôc Node A trở thành trái B 12 Sau phép quay kết hợp, có trạng thái cân Phần III: Phân công công việc Quân: tổng hợp lý thuyết Tú+Đức: tìm hiểu ứng dụng code 13