CHƯƠNG 2. THUẬT TOÁN KHAI TRIỂN ĐA CỰC NHANH VÀ PHƯƠNG PHÁP CÂY BÁT PHÂN
2.2. Biểu diễn cây bát phân
Cây bát phân (oct-tree) là dạng cây được biểu diễn bắt đầu bởi một node gốc
khi đó T0 được gọi là node cha. Tiếp tục tại mức l, mỗi node Ti,l có các 8 node con và số node ở mức l là 8l. Các node ở mức cao nhất h của cây được gọi là lá, khi đó n được gọi là độ cao của cây. Hình 2.4 minh họa một cây bát phân có độ cao n = 3 với số node ở mức này là 83.
Trong bài toán mô phỏng N-body trong không gian 3 chiều, các phương pháp phổ biến đã cải thiện khá tốt độ phức tạp thời gian tính toán biểu diễn các body trong hệ theo dạng cây bát phân. Coi không gian hệ N-body được bao hàm trong một khối hình hộp, khối ban đầu này được gọi là gốc. Hình hộp được chia thành 8 hình hộp con và 8 node con tương ứng của gốc được hình thành. Thực hiện tiếp tục chia các hình hộp con có chứa lớn hơn 1 body một cách đệ quy và tiếp tục xây dựng cây cho đến khi thỏa mãn điều kiện dừng. Điều kiện dừng này tùy thuộc vào thuật toán, ví dụ với thuật toán BH thì điều kiện dừng là số body trong hộp là bằng 1 còn đối với thuật toán FMM thì khi độ cao của cây bằng n ≈ log8N (N là số body trong hệ).
Hình 2.5 – Biểu diễn cây bát phân
Level 2 Level 1 Root T0 – Level 0
Hình 2.4 - Cây bát phân độ cao n = 3
Tại đây ta đã hiểu về việc xây dựng cây bát phân cho hệ N-body trong không gian 3 chiều. Cụ thể xây dựng cây bát phân song song như thế nào để giải quyết tốt vấn đề cân bằng tải sẽ được đề cập trong những phần tiếp sau.
2.2.2. Khóa và Bảng băm
Trong phần 2.1, luân văn đã giới thiệu cách xây dựng và thực hiện tính toán trên cây của thuật toán FMM. Qua phần 2.2.1, ta cũng đã hình dung ra cây bát phân trong không gian 3 chiều có hình dạng ra sao. Trước đây việc biểu diễn cấu trúc cây thông qua danh sách con trỏ móc nối nhưng khi tính đến việc cấu trúc cây được phân chia cho các bộ xử lý để thực hiện tính toán song song thì cách biểu diễn này không thích hợp. Hai tác giả Michael S.Warren và John K.Salmon [12] đã giới thiệu cách biểu diễn dạng cây bằng việc sử dụng khóa (key) và bảng băm (hash table). Ta vẫn phân chia mỗi hộp (trong không gian 3 chiều) thành 8 hộp nhỏ hơn để xây dựng cây. Thay vì biểu diễn cây bằng danh sách các con trỏ, ta sẽ nhận biết mỗi ô bằng một khóa. Dạng của cây được biểu diễn bằng việc ánh xạ vị trí không gian ô và các mức vào khóa. Từ các khóa, để xác định vị trí của ô tương ứng với khóa ta sẽ thực hiện việc tìm kiếm thông qua bảng băm. Như vậy, với một khóa cho trước ta có thể tìm kiếm dữ liệu một cách nhanh chóng.
Dưới đây, luận văn giới thiệu phương pháp tạo khóa và bảng băm.
Khóa được định nghĩa là kết quả của việc ánh xạ d điểm (tọa độ trong không gian d chiều) vào một tập các bit. Hàm ánh xạ đổi các số điểm thành số nhị phân và sau đó chèn các bit d số nguyên vào một khóa đơn (hình 2.6).
Biểu diễn hệ tọa độ nhị phân
x y z
10011001 01101001 11101100
1.101.011.011.100.111.001.000.110 khóa nhị phân
bit vị trí bit chèn vào
Hàm ánh xạ này ánh xạ mỗi body trong hệ vào một khóa duy nhất. Ta cũng có thể dùng hàm ánh xạ này để biểu diễn các node của cây. Để tránh sự nhập nhằng giữa các khóa mà các bit của chúng đều là 0, ta thêm một bit đặc biệt 1 (hay còn gọi là bit vị trí) vào vị trí đầu tiên của mỗi khóa.
Một bảng băm được dùng để lưu giữ các vị trí vật lý của các ô tương ứng, ta có thể xác định vị trí của bất kỳ ô nào từ bảng băm. Bàng băm có độ dài các bit nhỏ hơn nhiều so với độ dài các bit mà khóa sử dụng. Để ánh xạ khóa vào bảng băm, ta dùng một hàm để ánh xạ k-bit khóa vào h-bit độ dài địa chỉ bảng băm. Một hàm rất đơn giản đó là sử dụng toán tử AND giữa khóa với 2h-1 bit-mặt nạ. Không gian khóa rất thuận tiện cho việc duyệt cây. Để tìm các node con, khóa cha được dịch sang trái (left-shifted) d bit (3 bit, trong không gian 3 chiều), và kết quả được cộng vào các số của con từ 0 đến 2d-1. Đây là ưu điểm của cây bát phân băm trong việc tìm kiếm các node con. Nếu tổ chức cây theo cách thông thường, để tìm một node nào đó ta phải duyệt cây từ gốc nhưng với cách biểu diễn cây bằng khóa như thế này thì ta có thể tìm bất cứ node nào của cây ngay lập tức (O(1)) bởi mỗi khóa xác định duy nhất một node.
Vì ánh xạ k-bit khóa vào h-bit bảng băm (k < h) nên khả năng xảy ra sự nhập nhằng trong bảng băm là rất lớn. Ví dụ, sau khi hai khóa được ánh xạ vào trong bảng băm, giá trị của chúng là 1001010011011011001 và 1001010011011011011.
Nhưng độ dài các bit trong bảng băm chỉ là 16, giá trị thật sự được lưu vào trong bảng băm của cả hai khóa chỉ là 1001010011011011 nên ta không thể phân biệt được hai kết quả đó. Để giải quyết sự nhập nhằng, ta dùng một danh sách liên kết [hình 2.7].
Một thực thể trong bảng băm (gọi là hcell) gồm:
(1). Một con trỏ (Cell pointer) chỉ tới cell hoặc dữ liệu body
(2). Một con trỏ (Next cell) chỉ tới một danh sách liên kết mà giải quyết sự nhập nhằng, chỉ tới phần bị cắt tỉa của hcell bị trùng.
(3). Một khóa và một số các cờ (flag) mô tả thuộc tính của hcell và ô tương ứng của nó.
Việc tổ chức cây bởi khóa và bảng băm sẽ rất thuận tiện cho công việc duyệt và tìm kiếm các node trong cây. Ta có thể tìm kiếm một node bất kỳ một cách nhanh chóng thông qua khóa và có thể đưa ra thông tin của các node thông qua bảng băm.
Vì ta sẽ xây dựng cây song song nên việc truy tìm dữ liệu không cục bộ (nằm tronng BXL khác) lúc duyệt cây là liên tục và cần thiết cho nên việc tổ chức cây như vậy giải quyết tốt nhu cầu này mà nếu tổ chức cây theo như truyền thống sẽ làm
Cellss Hash Table hcells
collision hcellss
Key Cell pointer
Next cell
Key Cell pointer
Next cell
Key Cell pointer
Next cell
Key Cell pointer
Next cell
Key Cell pointer
Next cell
Key Cell pointer
Next cell
mass x y z
mass x y z
mass x y z
mass x y z
Hình 2.7 – Minh họa cấu trúc dữ liệu trong cây băm 1
3
2