Thuật toán của DP trie

Một phần của tài liệu Đồ án tốt nghiệp đại học NGHIÊN cứu cấu TRÚC dữ LIỆU PHỤC vụ tìm KIẾM đa CHIỀU và ỨNG DỤNG (Trang 26 - 69)

2.5.2.1. Chèn 1 khoá mới

Để chèn một khoá mới cần xử lý 3 bước:

- Lấy kích thước của tiền tố dài nhất giữa khoá cần chèn và các khoá đã có.

- Chèn khoá mới vào vị trí thích hợp

ClosestKey(node, key) {

if (|key Index(node)|) then

if (Key(node, key) π NIL) then return (Key(node, key))

else

return (Key(node, BitComplement(key

else

return (any key of node or NIL if none exists)

}

ClosestSubTrie(node, key) {

if (|key Index(node)|) then

if (Subtrie(node, key) π NIL) then return (SubTrie(node, key))

else

return (SubTrie(node, BitComplement(key))) /*

else

return (any key of node or NIL if none exists)

}

Allocate Node (index, key) {local node

NEWNODE(node)/* allocate space for a new node*/

LeftKey(node) := RightKey(node) := NIL

Parent(node) := LeftSubTrie(node) := RightSubTrie(node) := NIL

Index(node) := index;

Key(node, key) := key

return(node)

Insert(key) {

local node, distpos, index

if ( Root = NIL ) then Root := AllocateNode(|key|, key)

else

node := Root /* start at the root */

while (Not LeafNode(node))

do node := ClosestSubTrie(node, key) distpos := DistPos(key, ClosetKey(node, key)) index := Min(|key|, distpos) /*

while( index < Index(node) and node π Root)

do node := Parent(node)

if (node = Root) then

InsertInOrAbove(node, key, distpos)

elseif(SubTrie(node, key) = NIL) then

InsertWithEmptySubTrie(node, key, distpos)

else

InsertWithNonEmptySubTrie(node, key, distpos)

}

2.5.2.2. Xoá một khoá

DeleteKey(key) {

local node, collnode := NIL, storedkey := NIL Node := Root

if(node π NIL and |key| ≥ Index(node)) then

while (SubTrie(node, key) π NIL and |key| ≥

Index(SubTrie(node, key) )

do node := SubTrie(node, key)

if( node = NIL or Key(node, key) π key ) return (NotFound) /* Bước 2: Xoá khoá và rác*/

Key(node, key) := NIL

if ( Empty(node)) then

if(node π Root) then

SubTrie(Parent(node), key) := NIL

collnode := Parent(node)

else

Root := NIL

DeallocateNode(node)

elseif (ChainNode(node)) then

if(node π Root)

SubTrie(Parent(node), key) := ClosestSubTrie(node, key)

Parent(ClosestSubTrie(node, key)) := Parent(node) collnode := ClosestSubTrie(node, key)

else

Root := ClosestSubTrie(node, key)

Parent(Root) := NIL

DeallocateNode(node)

elseif(SingleKeyLeafNode(node)) then

storedkey := Key(node, BitComplement(key))

LeftKey(node) := RightKey(node) := NIL

Index(node) := |storedkey|

Key(node, storedkey) := storedkey Collnode := node

elseif( SubTrie(node, key) π NIL and SingleKeyLeafNode(Sub Trie(node, key)) then

collnode := SubTrie(node, key)

if(collnode π NIL and SingleKeyLeafNode(collnode)) then

if(Parent(conllnode) π NIL and Key(Parent(collnode), storedkey)

= NIL ) then Key(Parent(collnode), storedkey) := storedkey

SubTrie(Parent(collnode), stoedkey) := NIL

DeallocateNode(collnode)

}

2.5.2.3. Tìm kiếm

SearchKey(key) {

local node := Root

if( node = NIL or |key|<Index(node) ) then return(NIL)

while(SubTrie(node, key) π NIL) and (|key| ≥ Index(SubTrie(node, key))

do node := SubTrie(node, key)

while ((node π NIL) and ((Key(node, key) = NIL) or (Key(node, key) = key)))

do node := Parent(node)

if(node π NIL) then return (Key(node, key))

else return(NIL) }

Chương 3: GIỚI THIỆU PHÂN LOẠI GÓI TIN 3.1. Giới thiệu

Theo truyền thống, Internet chỉ cung cấp một dịch vụ nỗ lực tối đa (best – effort) để giải quyết với tất cả các gói tin đến cùng một đích đã định rõ và phục vụ theo phương thức đến trước phục vụ trước (FCFS). Tuy nhiên, sự phát triển nhanh chóng của Internet là nguyên nhân làm tăng sự tắc nghẽn và mất gói tin tại các router. Kết quả là một số người sử dụng phải đồng ý trả chi phí rất cao để nhận được các dịch vụ tốt hơn từ mạng. Để tối đa thu nhập thì các nhà cung cấp dịch vụ cũng mong muốn cung cấp các mức phục vụ khác nhau với giá thành khác nhau dựa trên yêu cầu của người sử dụng, trong khi vẫn sử dụng cơ sở hạ tầng mạng thông thường.

Để cung cấp các dịch vụ khác nhau, Router yêu cầu phải bổ sung thêm kỹ thuật mới. Các kỹ thuật này bao gồm: điều khiển đầu vào, sự điều tiết (định lượng, đánh dấu, định hình giao thông, và quyết định giải pháp), cung cấp tài nguyên (tối ưu hóa), quản lý hàng đợi và lập lịch hợp lý. Các kỹ thuật này đòi hỏi khả năng phân biệt và tách riêng các giao thông thuộc về những người sử dụng khác nhau dựa trên sự thống nhất dịch vụ giữa nhà cung cấp dịch vụ và người sử dụng. Điều này dẫn đến yêu cầu khả năng nhận biết theo luồng của các thiết bị định tuyến, biểu diễn chúng thành các tập luật dựa trên các thông tin của gói tin đến. Các tập luật này chúng ta gọi là phân loại luồng.

Hình 3.1 Một số trường của header của gói tin sử dụng để phân loại gói tin. Mỗi luật chỉ định rõ một luồng mà một gói tin sẽ thuộc về luồng đó dựa trên các tiêu chuẩn chứa trong header của gói tin. Tất cả các gói tin thuộc về cùng một luồng được xử lý như nhau. Luồng được chỉ định của một gói tin đến chỉ rõ một action sẽ được áp dụng cho gói tin. Ví dụ, một router firewall có thể thực hiện action là từ chối hoặc cho phép truy nhập một mạng được bảo vệ. Việc xác định action này gọi là phân loại gói tin – tức là khả năng của router để xác định action tương ứng với luật tốt nhất mà một gói tin đến khớp. Phân loại gói tin cho phép nhà cung cấp dịch vụ có thể phân biệt khả năng cạnh tranh và thu được lợi nhuận từ việc cung cấp các dịch vụ gia tăng đến các khách hàng khác nhau.

Xác định địa chỉ bước tiếp theo và cổng đầu ra

Router Lookup

Phân loại gói tin để nhận được action

Classification

Dựa vào action để áp dụng dịch vụ cho gói tin

Special Processing

Chuyển gói tin ra cổng đầu ra

Switching

Hình 3.2 Đường dữ liệu của một gói tin thông qua quá trình định tuyến theo luồng.

3.2.1. Định nghĩa phân loại gói tin

Phân loại gói tin là một hoạt động của router nhằm phân loại gói tin dựa trên header của gói tin thành các lớp tương đương gọi là các luồng (flow).

Mỗi luồng phải tuân theo ít nhất một luật, hoặc một tập luật trong bảng luật. Tất cả các gói tin thuộc một luồng đều được xử lý như nhau.

3.2.2. Bài toán phân loại gói tin

Phân loại gói tin cho phép một số lượng bổ sung các dịch vụ mạng không nỗ lực tối đa hơn là cung cấp các chất lượng dịch vụ khác nhau. Một ứng dụng nổi bật của phân loại gói tin là firewall. Các dịch vụ mạng khác yêu cầu phân loại gói tin bao gồm định tuyến dựa trên sách lược, chính sách và mức độ hạn chế giao thông, định hình giao thông và lập hóa đơn. Trong mỗi trường hợp, cần thiết phải xác định gói tin đến thuộc luồng nào để xác định action cho gói tin đó. Ví dụ: chuyển tiếp hay lọc, chuyển tiếp đến đâu, kiểu dịch vụ phục vụ gói tin là gì, hay chi phí để vận chuyển gói tin là bao nhiêu?

Bài toán phân loại gói tin: mỗi luật của một phép phân loại có d thành phần. Thành phần thứ i của luật R (kí hiệu là R[i]), là một biểu thức chính quy trong trường thứ i của header của gói tin. Một gói tin P được gọi là khớp với một luật R nếu với mọi i, trường thứ i của header của gói tin P thỏa mãn biểu thức R[i].

Bảng 3.1 Ví dụ về phân loại

Bảng 3.2 Ví dụ về phân loại gói tin các gói tin đến dựa trên bảng phân loại ở hình 3.1

Ta có thể thấy rằng tìm kiếm định tuyến là một trường hợp của phân loại gói tin một chiều. Trong trường hợp này, tất cả các gói tin được đưa đến tập địa chỉ được mô tả bằng tiền tố phổ biến có thể được xem như là một phần của cùng một luồng. Mỗi luật có một route – prefix, địa chỉ next hop. Nếu ta định nghĩa độ ưu tiên của luật tương ứng với chiều dài của route – prefix thì việc xác định tiền tố khớp dài nhất cho một gói tin đến

tương đương với việc xác định luật khớp tốt nhất trong phép phân loại. Do đó bài toán phân loại gói tin là tổng quát của bài toán tìm kiếm định tuyến.

3.3. Một số cấu trúc cơ bản sử dụng trong phân loại gói tin 3.3.1. Giới thiệu

Một Router Internet phân loại các gói tin đến thành các luồng, sử dụng thông tin chứa trong header của gói tin và một bảng luật. Bảng này được gọi là bảng định tuyến (hay bảng luật). Mỗi luật của bảng định tuyến là một cặp giá trị có dạng (f,a), với f là một phép lọc và a là một action. Thành phần action của luật được định nghĩa là hoạt động được thực hiện khi một gói tin thoả mãn phép lọc. Các hoạt động a có thể là thả một gói tin, chuyển tiếp gói tin lên phía trước hoặc hủy gói tin. Thành phần lọc của một luật là bộ k trường, có thể biểu diễn địa chỉ nguồn của gói tin, địa chỉ đích, giao thức truyền, và số hiệu cổng. Mỗi trường của một bộ k có thể được cụ thể hoá là một giá trị đơn, một dải hoặc một tiền tố. Một trường địa chỉ đích được cụ thể hoá bằng tiền tố r khớp với tất cả các địa chỉ đích bắt đầu với r. Một bộ lọc f khớp với một gói p nếu mỗi trường của f khớp với giá trị tương ứng của p (nghĩa là trường đích của f khớp với địa chỉ đích của p, trường địa chỉ nguồn của f khớp với địa chỉ nguồn của p, số hiệu cổng của f khớp với số hiệu cổng của p…). Ta giả sử rằng không có hai luật nào của bảng định tuyến có cùng phép lọc.

Vì một định tuyến internet có thể chứa một số luật khớp với một gói p sẵn có, biện pháp quyết định là chọn một trong các biện pháp so khớp sau:

1. Chọn luật đầu tiên trong bảng khớp với p 2. Chọn luật ưu tiên cao nhất khớp với p

Trong bài toán phân loại gói tin, ta mong muốn xác định luật nào của bảng định tuyến được áp dụng cho gói tin cho sẵn. Cấu trúc dữ liệu để biểu diễn các bảng định tuyến 1D mà mỗi bộ lọc có một trường đơn, đặc trưng cho địa chỉ đích của gói tin được phân loại. Mặc dù bộ lọc tiền tố 1D thích hợp cho địa chỉ đích dựa trên gói tin phía trước, các bộ lọc chiều cao hơn được yêu cầu cho firewall, chất lượng dịch vụ, và ứng dụng mạng riêng ảo. Ví dụ như IP multicast sử dụng các luật trong đó F bao gồm tiền tố nguồn và tiền tố đích; router QoS có thể sử dụng 5 trường lọc luật (tiền tố địa chỉ nguồn, tiền tố địa chỉ đích, đoạn cổng nguồn, đoạn cổng đích, và giao thức); và bộ lọc firewall có thể sử dụng một hoặc nhiều trường, bộ lọc tiền tố 2D có thể được sử dụng để biểu diễn host to host, network to network, các bộ lọc chiều cao hơn được yêu cầu nếu các luồng này biểu diễn với độ chi tiết cao hơn. Tiếp theo ta sử dụng luật các phần tử luật và bộ lọc có thể hoán đổi cho nhau vì các bộ lọc trong bảng luật là duy nhất và trong phần này ta không đề cập đến hoạt động liên kết với luật.

3.3.2. Đoạn

3.3.2.1 Lý thuyết về đoạn

Định nghĩa 1: Một đoạn r=[ ]u v, là một cặp địa chỉ u và v, u v.

Một đoạn r biểu diễn các địa chỉ {u, u+1, …, v}. start(r)=u là điểm bắt đầu của đoạn và finish(r) = v là điểm cuối của đoạn. Đoạn r chứa hoặc là khớp với tất cả các địa chỉ d sao cho u d v≤ ≤ . range(q) xác nhận là đúng nếu q là một đoạn.

Chú ý: Mọi tiền tố của bảng định tuyến tiền tố có thể biểu diễn một đoạn.

Ví dụ: khi W=6, tiền tố P = 1101* khớp với các địa chỉ trong đoạn [52, 55]. Do dó, chúng ta nói P = 1101* = [52, 55], start(P) = 52, finish(P) = 55.

Khi một đoạn biểu diễn một tập liên tiếp các điểm, ta sử dụng các phép toán, quan hệ tập hợp chuẩn như ∩và ⊂ khi xử lý trên đoạn. ví dụ [2, 6] ∩[4, 8] = [4, 6].

Một số phép toán giữa các đoạn không phải là một đoạn. ví dụ: [2, 6] ∪[8, 10] = {2, 3, 4, 5, 6, 7, 8, 9, 10}

Định nghĩa 2: Cho r = [u, v] và s = [x, y] là hai đoạn. Đặt overlap(r, s) = rs.

(a)disjoint(r, s) – hai đoạn rời nhau. Khẳng định disjoint(r, s) là đúng nếu r và s là rời nhau.

disjoint(r, s) ⇔overlap(r, s) = ∅ ⇔v < xy<u (b)nested(r, s) – hai đoạn chứa nhau.

Khẳng định nested(r, s) là đúng nếu một đoạn được chứa bên trong đoạn kia.

nested(r, s) ⇔ overlap(r, s) = r overlap(r, s) = s

r s s r

⇔ ⊆ ∨ ⊆

x u v y u x y v

⇔ ≤ ≤ ≤ ∨ ≤ ≤ ≤

(c)intersect(r, s) – hai đoạn giao nhau khẳng định intersect(r, s) đúng nếu r và s có phần giao nhau khác rỗng

intersect(r, s)⇔ ∩ ≠ ∅ ∧ ∩ ≠ ∧ ∩ ≠r s r s r r s s

⇔ ¬disjoint r, s( )∧¬nested r, s( )

Chú ý overlap(r, s) = [x, v] khi u<xv<y và overlap(r, s) = [u, y] khi x<u

y<v

Ví dụ: [2, 4] và [6, 9] là rời nhau; [2, 4] và [3, 4] là chứa nhau; [2, 4] và [2, 2] là chứa nhau; [2, 8] và [4, 6] là chứa nhau; [2, 4] và [4, 6] là giao nhau; [3, 8] và [2, 4] là giao nhau. [4, 4] = overlap của [2, 4] và [4, 6]; overlap ([3, 8], [2, 4]) = [3, 4]

Hình 2.3. Mối quan hệ giữa các cặp đoạn. (A) Hai đoạn rời nhau.

(B) Hai đoạn chứa nhau. (C) Hai đoạn giao nhau

Bổ đề 1: r, s là hai đoạn thì một trong các hàm sau sẽ đúng

i) disjoint(r,s) ii) nested(r, s) iii) intersect(r, s)

3.3.2.2 Đoạn không giao nhau

Trong phần này chỉ đề cập đến phân loại gói tin sử dụng cấu trúc đoạn không giao nhau (nonintersection ranges )

Cho msr(d) là đoạn khớp nhất mà khớp với địa chỉ đích d. Với bảng tĩnh, ta có thể biểu diễn n đoạn lên đến 2n-1 khoảng cơ bản mà chúng được quy vào. Với mỗi khoảng cơ bản, ta xác định đoạn đặc trưng nhất khớp tất cả các điểm trong khoảng. Các đoạn này lên đến 2n-1 khoảng cơ bản và được biểu diễn như 4n-2 tiền tố với thuộc tính msr(d) được xác định duy nhất bởi LMP(d). Bây giờ, ta có thể sử dụng bất kỳ cấu trúc dữ liệu nào cho bảng tĩnh trong đó các bộ lọc là các tiền tố. Do đó, trong phần này ta chỉ thảo luận các cấu trúc dữ liệu này cho bảng động

Cho R là một tập các đoạn không giao nhau. Để đơn giản, giả sử R bao gồm các đoạn z khớp với tất cả các địa chỉ đích (z=[0, 232-1] trong trường hợp IPv4). Với giả sử này msr(d) được định nghĩa cho mọi d. Tương tự với trường hợp tiền tố, với các đoạn không giao nhau thì msr(d)

Việc chèn một đoạn r chỉ được thực hiện nếu r không giao với một đoạn bất kỳ đoạn nào của R. Việc chèn đoạn tương tự như chèn đoạn trong cây tìm kiếm ưu tiên.

Để xóa một đoạn r, ta phải xóa đoạn r như trong cây tìm kiếm ưu tiên.

Độ phức tạp của thao tác tìm kiếm msr(d), chèn một đoạn, và xóa một đoạn tương tự như trường hợp R là một tập đoạn tương ứng với các tiền tố.

Chương 4: THUẬT TOÁN TÌM KIẾM NHỊ PHÂN THEO MỨC (BINARY SEARCH ON LEVELS)

Ta sử dụng một tập các bảng băm để biểu diễn một bảng phân loại gói tin đa chiều. Các bảng băm được thừa kế từ một biểu diễn cây của phân loại lớp đa chiều. Chiều cao của cây là O(W), với W là tổng của chiều dài lớn nhất có thể (tính theo bit) của mỗi các trường của một bộ lọc. Các lá tại mức i của cây cùng với đánh dấu cho một số lá tại mức j (j>i) được lưu trữ trong một bảng băm Hi. Việc sắp đặt các đánh dấu xem như là tìm kiếm nhị phân của việc xác định thành công bộ lọc ưu tiên cao nhất mà khớp với tất cả các gói tin của Hi. Số lượng các bảng băm bằng chiều cao của cây, O(W). Do đó, một gói có thể được phân loại bằng cách thực hiện O(log W) lần tìm kiếm bảng băm. Vì thế độ phức tạp tìm kiếm mong muốn của phân loại gói tin đa chiều là O(logW).

4.1 Giới thiệu chung

Trong bài này, ta đưa ra sơ đồ BSOL cho các bộ lọc đa chiều. Sơ đồ dựa trên một cây ưu tiên mà các mức của cây được tìm kiếm dựa trên phương pháp tìm kiếm nhị phân. Sự khác nhau dựa trên phương pháp định nghĩa cây. Với định nghĩa ta sử dụng, sơ đồ 1D dễ dàng mở rộng thành trường hợp đa chiều. Độ phức tạp tìm kiếm của sơ đồ là O(logW), với W là tổng của độ dài lớn nhất có thể của các trường của một phép lọc. Đối với địa chỉ đích một chiều tiền tố IPv4, W=32; với địa chỉ đích Ipv4 hai chiều (địa chỉ nguồn, địa chỉ đích), W=64; và với bộ lọc 4 chiều (địa chỉ đích, địa chỉ nguồn, cổng nguồn, cổng đích) với mỗi số hiệu cổng tại ít nhất 16 bit W=96.

Trong phần 3.2, ta mô tả sơ đồ BSOL. Kết quả thực nghiệm được trình bày trong phần 3.3 và kết luận trong phần 3.4

Trong phần 3.2.1, ta mô tả sơ đồ BSOL cho phân loại 1 chiều. Trong phần 3.2.2, ta trình bày phương pháp dùng sơ đồ BSOL một chiều để tạo ra sơ đồ 2 hoặc nhiều chiều.

4.2.1 BSOL một chiều

Cho F ={f0, f1,...,fn−1}là một tập lọc, với mỗi phép lọc filà một đoạn

[bi,ei].4 Giả sử rằng mỗi đoạn [bi,ei] là một đoạn của địa chỉ đích. Đặt

] 1 2 , 0 [ − = W default

f bất kỳ. Vì fdefault khớp với tất cả các gói tin, ta có thể loại bỏ tất cả các phép lọc mà độ ưu tiên của nó thấp hơn độ ưu tiên của fdefault.

default

f không cần lưu trữ trong BSOL. Bất kỳ gói tin nào không khớp với phép lọc trong BSOL là tự động khớp với fdefault. Tiếp theo, ta giả sử rằng F không chứa fdefault. Đầu tiên ta ánh xạ F vào cây. Để đơn giản ta mô tả một

Một phần của tài liệu Đồ án tốt nghiệp đại học NGHIÊN cứu cấu TRÚC dữ LIỆU PHỤC vụ tìm KIẾM đa CHIỀU và ỨNG DỤNG (Trang 26 - 69)

Tải bản đầy đủ (DOC)

(69 trang)
w