Math Workshop for Kids CẤU TRÚC DỮ LIỆU ĐA CHIỀU 1 Các phép toán trên dữ liệu đa chiều Giống như trong dữ liệu 1 chiều, dữ liệu đa chiều cũng sử dụng các phép toàn từ điển như 02 Tìm Kiếm Tìm trong tậ[.]
Trang 1CẤU TRÚC DỮ LIỆU ĐA CHIỀU
Trang 21 Các phép toán trên dữ liệu đa chiều
Trang 3Giống như trong dữ liệu 1 chiều, dữ liệu
đa chiều cũng sử dụng các phép toàn từ điển như :
02
Tìm Kiếm
Tìm trong tập dữ liệu điểm k
- chiều đã cho một dữ liệu khi biết vectơ các giá trị khoá của nó là (x1, …, xk).
Tóm lại : Dữ liệu đa chiều không có gì khác so với 1 chiều chỉ có điều khác là ở đây chúng ta cần tiến hành tìm kiếm, xen, loại dựa vào k giá trị khoá đã cho
Trang 4Tìm kiếm phạm vi (Range Search)
Là phép toán quan trọng trong dữ liệu k chiều
Cho trước một điểm dữ liệu (x1, …, xk) và một số thực dương r, cần tìm trong tập dữ liệu điểm k - chiều đã cho tất cả các điểm dữ liệu cách (x1, …, xk) một khoảng cách không lớn hơn r
Ví dụ minh hoạ range search trong 2 chiều :
Trang 52 Cây K
chiều
Có thể hiểu đơn giản cây k - chiều để biểu
diễn tập dữ liệu điểm k - chiều
Trang 62.1 Cây 2 chiều
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 Mỗi đỉnh của cây 2 chiều có dạng :
struct Node { infoType info ; double Xval ; double Yval ; Node* left ; Node* right ; } ;
Trong đó :
Xval: Hoành độ
Yval: Tung độ
Node*left : Pointer chỉ tới đỉnh trái
Node *right : Pointer chỉ tới đỉnh
phải
Trang 8Cây 2 chiều tương ứng
Trang 9Cây 2 chiều là cây nhị phân cần thoả
mãn các điều kiệnNếu P là đỉnh ở mức chẵn và Q là đỉnh bất kỳ thuộc cây con trái của đỉnh P thì Q -> Xval <
P -> Xval, còn nếu Q là đỉnh bất kỳ thuộc cây con phải của đỉnh P thì Q -> Xval ≥ P -> Xval
Nếu P là đỉnh ở mức lẻ và Q là đỉnh bất kỳ thuộc cây con trái của P thì Q -> Yval < P -> Yval, và nếu Q là đỉnh bất kỳ thuộc cây con phải của P thì Q -> Yval ≥ P -> Yval
Trang 10Phép toán tìm kiếm
Cũng như trong cây nhị phân bắt đầu từ gốc Nếu khóa cần tìm bằng khóa của gốc thì khóa đó trên cây, nếu khóa cần tìm nhỏ hơn khoa ở gốc, ta phải tìm nó trên cây con trái, nếu khóa cần tìm lớn hơn khóa ở gốc, ta phải tìm nó trên cây con phải Nếu cây con (trái hoặc phải) là rỗng thì khóa cần tìm không có trên cây
Mã giả tìm kiếm
Trang 11Phép toán xen
Phép xen bắt đầu giống như phép tìm kiếm; Nếu khóa của gốc khác khóa cần chèn ta tìm nó trong cây con trái hoặc phải Nếu cây con trái hoặc phải tương ứng là rỗng (không tìm thấy) thì thêm một nút và gán cho nút ấy khóa cần chèn
Code phép xen
Trang 12Ví Dụ :
Chèn C(20,26) và D(8,12)
Vì 8<15 nên D vào bên trái A,
vì 20<24 nên C vào bên trái B
Trang 13● TH1: Loại P không có con
Phép loại
Nếu P là đỉnh lá, việc loại P rất đơn giản, ta chỉ cần đặt con trỏ liên kết từ đỉnh cha của P tới P bằng NULL và thu hồi bộ nhớ đã cấp phát cho P
● TH2: Cây con phải Tr không rỗng
Bước 1 Tìm đỉnh Q thuộc Tr có thể thay thế cho đỉnh P Đỉnh Q cần phải phân hoạch miền dữ liệu giống như P
Bước 2 Thay thế đỉnh P bởi đỉnh Q Điều này được thực hiện bằng cách chuyển dữ liệu chứa trong đỉnh Q lên đỉnh P,
Bước 3 Loại đệ quy đỉnh Q khỏi cây con Tr
Trang 14Ví Dụ :
Nếu muốn loại A thì cần có 1 đỉnh phân hoạch miền dữ liệu giống A như C
C có Xval > 8 và Yval < 45 (A ở mức chẵn)
Trang 15● TH3: Cây con phải Tr rỗng và cây con trái Tr
Bước 2 Thay thế đỉnh P bởi đỉnh Q Chuyển cây con trái của P thành cây con phải của P
Bước 3 Loại đệ quy đỉnh Q khỏi cây con phải của P
Trang 16Phép tìm kiếm phạm vi
Được biểu diễn bằng
RangeSearch (T, H){
if (RT ∩ H = φ))return ;
Trang 172.2 Cây k chiều
Mỗi đỉnh của cây k chiều có dạng :
struct Node { infoType info ; double Xarray[k]
; Node* left ; Node* right ; } ;
Các thuật toán tìm kiếm, xen, loại, tìm kiếm phạm vi trên cây k chiều là sự tổng quát hoá tự nhiên của các thuật toán tương ứng trên cây 2- chiều
Trang 18Nhận xét về cây k chiều
- Có ưu điểm dễ cài đặt
- Cũng như trên cây tìm kiếm nhị phân, thời gian thực hiện các phép toán tìm kiếm, xen, loại trên cây k-chiều là O(h) với h là chiều cao của cây
- Nếu chiều cao của cây là n thì thời gian thực hiện các phép toán là O(n)
- Thời gian thực hiện phép toán tìm kiếm phạm vị trên 378 cây k-chiều với n đỉnh là O( 1/k )
Trang 19kn1-14.3 CÂY TỨ PHÂN
Trang 20�- Để biểu diễn các điểm 2 chiều
�- So sánh với cây 2 chiều:
I Định Nghĩa
Cây 2 chiều Cây tứ phân
- Mỗi đỉnh của cây phân hoạch
miền của nó biểu diễn thành 2 thành phần (theo trục x,y)
- Là 1 dạng của cây nhị phân
Phân hoạch miền nó đại diện
-> 4 phần theo cả 2 chiều -4 phần bao gồm: Tây Bắc, Đông Bắc, Tây Nam, Đông Nam
=> Mỗi đỉnh trong cây tứ phân
sẽ có 4 con tương ứng với một trong 4 miền đó
Trang 21� => Cấu trúc tương tự cây 2 chiều
� => Khác biệt là phải đưa vào 4 con trỏ
Trang 22�Cây tứ phân với tập điểm A,B,C,D,E,F:
�Chú ý:
+ Có nhiều cách biểu diễn cây tứ phân với một tập điểm
Trang 23�1 Phép tìm kiếm, xen:
�- Tiến hành phương pháp giống cây 2 chiều:
◦ Tìm đền miền chứa điểm cần tìm:
◦ Ví dụ: Tìm điểm G(18,23) có thuộc cây tứ phân 14.4?
◦ Điểm gốc cây A(15,31) != G(18,23) => G thuộc miền SE chứa điểm C(20,26)
◦ G != C => G thuộc miền SW của C nhưng SW point = NULL
◦ => G(18,23) không có trong cây
II Ứng dụng của các phép toán trên cây tứ phân.
Trang 24�-Phép toán xen:
◦ Ví dụ:
● Cho cây rỗng
● Add điểm C(20,26) => Chia cây thành 4 miền
● Lần lượt add các điểm B,A,D,E vào các miền lần lượt NE, NW,
SW, SE của đỉnh C
● => Cây tứ phân của đỉnh C
● Chèn F(13,9) thuộc miền SW của C trỏ tới D và sẽ nằm ở miền
SE của D
● => F sẽ là cây con SE của D theo hình vẽ dưới
Trang 26Cây 2 chiều + tứ phân Cây tứ phân Mx
- Hình dạng cây phụ thuộc vào
điểm xen
- Hiệu quả phép toán phụ thuộc
vào độ cao của cây
-Hình dạng cây không phụ thuộc vào thứ tự điểm
⇒ được biểu diễn duy nhất 1 cây
- Các phép toán được thực hiện
dễ dàng hơn
14.4 Cây tứ phân Mx
Trang 27�Ví dụ:
◦ Xây dựng cây Mx:
●Tập điểm thuộc miền hình vuông dạng (2^k.2^k) ô
●Điểm O(0,0) nằm ở góc dưới trái
●Điểm K(2^k,2^k) nằm ở góc trên phải
●Chọn k sao cho 0<=i,j<=2^k-1 ( với i,j là tung độ và hoành
độ max của tập điểm)
Hình 14.6: lưới 22 x 22 ô vuông (k = 2) với các điểm được quan tâm là A(1, 2), B(2, 2), C(1, 0), D(2, 3) và E(0, 1)
Trang 28�Cấu trúc đỉnh của cây tứ phân MX giống như cấu trúc đỉnh của cây tứ phân ta đã đưa ra
�Mỗi đỉnh của cây tứ phân MX biểu diễn miền hình vuông với điểm dưới bên trái (i, j) cạnh a, ta ký hiệu hình vuông này là [(i, j), a], và sẽ phân chia hình vuông này thành bốn hình vuông con bằng nhau(14.7)
Trang 29�Hình 14.8 Cây tứ phân MX biểu diễn các điểm A,
B, C, D, E trên lưới hình 14.6
Trang 30�Kết luận:
◦ cây tứ phân MX biểu diễn tập điểm dữ liệu trên lưới 2k x 2k là cây tứ phân có độ cao k
◦ tất cả các đỉnh lá đều nằm trên cùng một mức (mức k) và các điểm dữ liệu chỉ chứa trong các đỉnh lá
Trang 31�Ví dụ: Xen các điểm A(1, 2), B(2, 2), C(1, 0), D(2, 3), E(0, 1) vào 1 cây rỗng
◦ Thực hiện
●Tạo ra gốc cây biểu diễn hình vuông [(0, 0), 22 ]
●=> chia hình vuông thành 4 hình vuông con
●A nằm trong hình vuông NW
●Tạo đỉnh con NW biểu diễn hình vuông [(0, 1), 2]
●Đỉnh chia hình vuông thành bống hình vuông con cạnh là 1
●Điểm A thuộc hình vuông con NE
●Xen điểm B(2, 2) Điểm B nằm trong hình vuông con NE của hình vuông được biểu diễn bởi gốc.
●Điểm B nằm trong hình vuông con SW, và do đó con trỏ SW của đỉnh đó
sẽ trỏ tới một đỉnh lá chứa điểm B, ta nhận được cây hình 14.9b
●Thực hiện lặp lại các bước => nếu thay đổi thú tự xen của các đỉnh ta vãn thu được cây nhu hình 14.8
Phép toán tìm kiếm và phép
toán xen
Trang 33�Tính chất cây MX:Tất cả đỉnh thuộc lá đều có cùng mức và chỉ đỉnh lá mới chứa các điểm dữ liệu.
◦ Tìm đỉnh lá chứa điểm (x, y), giả sử đó là đỉnh P
◦ Giả sử cha của đỉnh P là đỉnh Q
◦ đặt con trỏ trong đỉnh Q trỏ tới P bằng NULL và thu hội vùng nhớ của đỉnh P
◦ nếu đỉnh Q còn chứa con trỏ khác NULL thì không cần làm gì nữa, nếu bốn con trỏ trong Q đều là NULL, tức Q trở thành đỉnh lá, thì ta lại loại đỉnh Q
◦ Lặp lại quá trình trên, trường hợp xấu nhất quá trình trên dẫn
ta tới xem xét gốc cây có là đỉnh lá hay không
Phép toán loại
Trang 34�Các bước thực hiện:
Phép toán tìm kiếm phạm vi