Một số kiến thức cơ sở về cây tìm kiếm nhị phân

Một phần của tài liệu Nghiên cứu một số thuật toán chọn K láng giếng gần trong 2D và áp dụng cho phương pháp RBF FD giải phương trình Poisson (Trang 28 - 32)

Trong chương này ta trình bày một số thuật toán tìm kiếm "k-láng giềng gần". Bao gồm có 3 thuật toán, về cơ bản các thuật toán tìm kiếm trên đều tắnh độ sai khác giữa một phần tử truy vấn (tâm tìm kiếm) mà ta nhập vào và một tập hợp các phần tử các láng giềng tìm được chắnh là các phần tử có độ sai khác thỏa mãn điều kiện nào đó. Các thuật toán có thể có cách tắnh giống nhau và tùy vào mỗi bài toán cụ thể ta sẽ có độđo và cách tắnh thắch hợp.

Đây là thuật toán cơ bản nhất tìm kiếm k láng giềng gần nhất từ 1 tập hợp các phần tử. Các Thuật toán sau đây sử dụng 2 cách tắnh khoảng cách đểđo sự sai khác giữa phần tử truy vấn và phần tử của tập hợp.

Input:

Tập hợp X gồm m điểm, mỗi điểm được coi là 1 phần tử Xi, trong không gian n chiều. Mỗi điểm đặc trưng cơ bản bởi các thuộc tắnh sau

{ 1,..., }

i i i

n

X = X X .

Cho điểm z là điểm đầu vào hay gọi là điểm phần tử truy vấn trong không gian n chiều.

{ 1,..., n}

z = z z

Output:

K láng giềng có thể, thỏa mãn điều kiện của thuật toán.

Khoảng cách

Cơ sở thuật toán: Thuật toán tìm K láng giềng gần nhất là một thuật toán tìm kiếm dựa trên việc tắnh toán khoảng cách giữa một phần tử truy vấn và phần tử trong tập hợp dữ liệu

Có rất nhiều cách tắnh khoảng cách giữa 2 phần tử nhưng trong phạm vi các thuật toán này ta chỉ xét 2 cách tắnh khoảng cách

Cho 2 điểm nếu p=(p p1, ,...,2 pn) và q=(q q1, ,...,2 qn) Khoảng cách tuyệt đối tắnh theo công thức sau: d(p, q) = 1 n i i p q- ạ Khoảng cách Ơcơlắt: d(p, q) = 2 1 ( ) n i i p -q

Giá trị trung bình được định nghĩa theo công thức sau: 1 1 n n i x x n = ạ

Và chúng ta có thể tắnh toán độ lệch tiêu chuẩn theo công thức sau: 2 1 1 ( )x n (xi x) n s = ạ - * Cây tìm kiếm nhị phân

Trước khi đi vào thuật toán ta sẽ sơ qua đôi chút về Cây tìm kiếm nhị phân

Cây tìm kiếm ứng với n khóa k=(k k1, ,...,2 kn) là cây nhị phân mà mỗi nút đều được gán một khóa sao cho với mỗi nút k:

Mọi khóa trên cây con trái đều nhỏ hơn khóa trên nút k Mọi khóa trên cây con phải đều lớn hơn khóa trên nút k

Cây tìm kiếm nhị phân là một cấu trúc dữ liệu cơ bản được sử dụng để xây dựng các cấu trúc dữ liệu trừu tượng hơn như các tập hợp, đa tập hợp, các dãy kết hợp. Nếu một cây tìm kiếm nhị phân có chứa các giá trị giống nhau thì nó biểu diễn một đa tập hợp. Cây loại này sử dụng các bất đẳng thức không nghiêm ngặt. Mọi nút trong cây con trái có khóa nhỏ hơn khóa của nút cha, mọi nút trên cây con phải có nút lớn hơn hoặc bằng khóa của nút cha.

Nếu một cây tìm kiếm nhị phân không chứa các giá trị giống nhau thì nó biểu diễn một tập hợp đơn trị như trong lý thuyết tập hợp. Cây loại này sử dụng các bất đẳng thức nghiêm ngặt. Mọi nút trong cây con trái có khóa nhỏ hơn khóa của nút cha, mọi nút trên cây con phải có nút lớn hơn khóa của nút cha.

Việc chọn đưa các giá trị bằng nhau vào cây con phải (hay trái) là tùy theo mỗi người. Một số người cũng đưa các giá trị bằng nhau vào cả hai phắa, nhưng khi đó việc tìm kiếm trở nên phức tạp hơn. Hình 2.1: Cây tìm kiếm nhị phân 35 15 54 42 23 19 9 4 7

Việc tìm một khóa trên cây tìm kiếm nhị phân có thể thực hiện nhờ đệ quy. Chúng ta 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 khóa ở 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.

Giả mã:

Search_binary_tree(node, key); if node is Null then

return; None % key rỗng

if key < node.key:

return search binary_tree(node.left, key); else (adsbygoogle = window.adsbygoogle || []).push({});

if key > node.key return

search_binary_tree(node.right, key) else % key is equal to node key return node.value; % found key

Thời gian tìm kiếm trung bình là O(log n)

Cây tìm kiếm KD -TREE: KD- tree là viết tắt của K - Dimensional Tree.

KD - Tree là một cấu trúc dữ liệu phân hoạch không gian, dùng để tổ chức các điểm trong không gian k-chiều.

Mỗi node sẽ tạo ra một mặt phẳng phân chia mà sẽ chia không gian ra thành 2 không gian con. Những điểm bên trái sẽ đại diện cho cây con trái của node và những điểm bên phải sẽ đại diện cho cây con phải của node. Thực chất KD-tree là một cây nhị phân, mà ở mỗi mức nó sẽ phân hoạch dữ liệu theo một chiều nào đó trong số các k chiều.

Vắ dụ: Nếu trục được chọn để phân hoạch là ỀXỂ thì tất cả những điểm có giá trị x nhỏ hơn sẽ nằm bên cây con trái, và những điểm có giá trị x lớn hơn sẽ nằm bên cây con phải

Với k = 2, phân hoạch theo x ày àx ày Ẩ Minh họa việc tạo dựng kd-tree

Cho tập {(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}.

Hình 2.2: Phân hoạch Kdtree

Một phần của tài liệu Nghiên cứu một số thuật toán chọn K láng giếng gần trong 2D và áp dụng cho phương pháp RBF FD giải phương trình Poisson (Trang 28 - 32)