Chia để trị m-nhánh

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 36)

Kĩ thuật chia để trị cũng có thể được áp dụng vào các bài toán mà khi một tác vụ được chia nhỏ thành nhiều hơn hai phần ở mỗi bước. Ví dụ một tác vụ được chia nhỏ thành bốn phần, định nghĩa đệ quy tuần tự có thể là

Int add(int∗s) {

if (number(s)=<4) return (n1+n2+n3+n4); else {

divide(s, s1, s2, s3, s4); /∗Chia s thành 2 phần s1, s2, s3, s4 ∗/

part_sum1 = add(s1); /∗Các lời gọi đệ quy để cộng các danh sách con∗/

part_sum2=add(s2); part_sum3=add(s3); part_sum4=add(s4);

return (part_sum1+part_sum2+part_sum3+part_sum4); }

}

Câym-nhánh được hình thành nếu phép chia là phép chia nhỏ thànhm phần. Cây

Hình 2.7:Quadtree và ứng dụng để chia miền 2-chiều

m-nhánh có những ứng dụng cụ thể riêng.

Trong cây mỗi node cha có bốn node con, gọi là quadtree được ứng dụng để chia các miền 2−chiều thành bốn miền con (Hình...); octree là cây trong đó mỗi node cha có tám node con được ứng dụng trong việc chia không gian 3−chiều đệ quy (Hình...).

Thuật toán xây dựng cây quadtree(octtree được làm tương tự).

Procedure Quad_Tree_Build Quad_Tree=empty

for j=1 to N . . . vòng lặp với tất cả N hạt

Quad_Tree_Insert(j, root) . . . chèn hạt i vào QuadTree endfor

Hình 2.8:Octree và ứng dụng để chia không gian 3-chiều

. . . có 0 hạt nếu các node chị em ruột có 1 hạt

Duyệt cây Quad_Tree xóa bỏ các lá rỗng . . . sử dụng, Breadth First Search

Procedure Quad_Tree_Insert(j, n) . . . Chèn hạt thứ j vào node thứ n trong cây Quad_Tree

if n là node trong . . . n có 4 node con xác định node con c của node n chứa hạt j Quad_Tree_Insert(j, c)

else if n chứa 1 hạt . . . n là node lá

thêm 4 node con của n vào the Quad_Tree chuyển hạt trong n tới node con chứa nó đặt c là node con của n chứa j

Quad_Tree_Insert(j, c) else . . . n rỗng

lưu hạt j ở node n end

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 36)