1. Trang chủ
  2. » Công Nghệ Thông Tin

Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp

61 182 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 1,92 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thuật toán này có những ưu điểm nổi bật là có thể tìm kiếm đồng thời sự xuất hiện của nhiều từ mẫu và có thời gian tính toán là tuyến tính tỉ lệ thuận với chiều dài của dữ liệu vào.. Điề

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

-

LÊ QUỐC THI

NGHIÊN CỨU THUẬT TOÁN SONG SONG TRÊN MÔI TRƯỜNG MPI CHO BÀI TOÁN SO KHỚP XÂU

Chuyên ngành : Công nghệ thông tin

LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC

TS NGUYỄN TUẤN DŨNG

Hà Nội – Năm 2014

Trang 2

LỜI CAM ĐOAN

Tôi – Lê Quốc Thi - Cam kết luận văn này là công trình nghiên cứu của bản thân tôi dưới sự hướng dẫn của TS Nguyễn Tuấn Dũng

Các kết quả nêu trong luận văn là trung thực, không phải là sao chép toàn văn của bất kỳ công trình nào khác

Trang 3

LỜI CẢM ƠN

Trước hết, tôi xin gửi lời cảm ơn trân trọng nhất tới TS.Nguyễn Tuấn Dũng, bộ môn Khoa học máy tính, Viện Công nghệ thông tin và Truyền thông, trường Đại học Bách Khoa Hà Nội, người đã hướng dẫn, tận tình chỉ bảo và hỗ trợ tôi trong suốt quá trình làm luận văn tốt nghiệp

Tôi xin gửi lời cám ơn tới các thầy cô trong Viện Công nghệ thông tin và Truyền thông cùng toàn thể các thầy cô trường Đại học Bách Khoa Hà Nội đã cùng giúp

đỡ, hỗ trợ tôi trong suốt quá trình nghiên cứu và thực hiện luận văn này

Hà Nội, tháng 02 năm 2014

Học viên : Lê Quốc Thi

Trang 4

MỤC LỤC

MỤC LỤC 4

DANH MỤC HÌNH VẼ 5

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ 6

Chương 1 - Đặt vấn đề và định hướng giải pháp 7

1.1 Bài toán so khớp xâu 7

1.2 Một số thuật toán so khớp xâu 11

1.2.1 Các cách tiếp cận cơ bản 11

1.2.2 Phương pháp Aho-corasick 15

1.2.3 Phương pháp phân tách Head-Body 19

1.2.4 Thực hiện bài toán so khớp xâu trong môi trường song song 26

Chương 2 - Cài đặt và phân tích các thuật toán cho bài toán so khớp xâu 30

2.1 Phân tích, cài đặt và đánh giá thuật toán tuần tự 30

2.1.1 Phân tích phương pháp Aho-corasick 30

2.1.2 Phân tích phương pháp phân tách Head-Body 37

2.2 Xây dựng bài toán MSM trong môi trường song song 43

2.2.1 Cài đặt thuật toán trong môi trường song song MPI 43

2.2.2 Phương pháp Head Body trong môi trường song song 43

2.2.3 Phương pháp song song Master – Slave cho thuật toán Head Body 44

2.2.4 Cài đặt phương pháp Head Body với MPI 46

Chương 3 - Kết quả thu được từ thực nghiệm và ứng dụng của bài toán 51

3.1 Kết quả thu được từ thực nghiệm 51

3.2 Ứng dụng của bài toán 57

Chương 4 - Kết luận và hướng phát triển 59

4.1 Kết luận 59

4.2 Hướng phát triển 59

TÀI LIỆU THAM KHẢO 61

Trang 5

DANH MỤC HÌNH VẼ

Hình 1 Các hàm goto, failure, output sinh ra từ thuật toán AC 16

Hình 2 Ảnh hưởng tỉ lệ so khớp tới hiệu năng của thuật toán [6] 20

Hình 3: Automat AC-DFA cho từ điển S [6] 24

Hình 4: H-DFA và B-NFA cho từ điển S [6] 24

Hình 5 Phương pháp song song cho thuật toán Head-Body 44

Hình 6: Biểu đồ so sánh hiệu năng của phương pháp song song Head-Body với tỉ lệ so khớp và kích thước subtext 51

Hình 7: Biểu đồ so sánh hiệu năng phương pháp song song và tuần tự với số processor khác nhau 52

Hình 8: Biểu đồ so sánh phương pháp HB song song và AC song song 53

Hình 9: Biểu đồ so sánh hiệu năng phương pháp HB song song và AC song song trong môi trường nhiều máy 56

Hình 10 Mô hình kiến trúc hệ thống IDS 57

Trang 6

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ

MSM Multi String Matching Bài toán tìm kiếm nhiều từ mẫu

AC Aho-Corasick algromith Thuật toán Aho-Corasick

DFA Deterministic finite

automata

Automat hữu hạn tiền định

NFA Nondeterministic finite

automata

Automat hữu hạn không tiền định

HB Head-Body algromith Thuật toán phân tách Head Body

H-DFA Head DFA Phần head có dạng DFA trong

thuật toán Head-Body

B-NFA Body NFA Phần body có dạng NFA trong

thuật toán Head-Body STT State transition table Bảng chuyển trạng thái

Trang 7

Chương 1 - Đặt vấn đề và định hướng giải pháp

1.1 Bài toán so khớp xâu

Bài toán so khớp xâu (Multi String Matching) là bài toán xuất hiện nhiều trong các ứng dụng thực tế Giải thuật string matching kiểm tra và phát hiện sự xuất hiện của nhiều kí tự liên tiếp trong một tập dữ liệu Bên cạnh những ứng dụng nổi tiếng về cơ sở dữ liêu và xử lý văn bản, các giải thuật này chính là cơ sở trong nhiều ứng dụng thực tế khác Các giải thuật

là chìa khóa trong việc phân tích thành phần các chuỗi DNA và protein, data mining, các hệ thống bảo mật cũng như các hệ thống phát hiện xâm nhập: Intrusion Detection Systems (IDS) cho mạng (Networs IDS - NIDS), ứng dụng (Applications - APIDS), giao thức (Protocol IDS - PIDS) hay hệ thống Host (Host-based IDS - HIDS), phầm mềm diệt virus

và các vấn đề về học máy (machine learning) Tất cả các ứng dụng này đều

có đặc điểm chung là phải xử lý một lượng dữ liệu rất lớn dạng văn bản với yêu cầu rất cao về hiệu năng nhằm đưa ra kết quả tốt trong khoảng thời gian

có thể chấp nhận được Với yêu cầu đó, đã có rất nhiều thuật toán về string matching được đưa ra, một trong số các thuật toán hiệu quả nhất là Aho-corasick (AC) , đặc biệt trong việc xử lý text và các ứng dụng bảo mật Thuật toán này có những ưu điểm nổi bật là có thể tìm kiếm đồng thời sự xuất hiện của nhiều từ mẫu và có thời gian tính toán là tuyến tính tỉ lệ thuận với chiều dài của dữ liệu vào

Rất nhiều nghiên cứu đã được thực hiện với thuật toán AC, trên nhiều khía cạnh nhua trong đó có việc thực thi thuật toán trên nhiều nền tảng Các nền tảng đã sử dụng bao gồm vi mạch dùng cấu trúc mảng phần tử logic lập trình được FPGA, các hệ thống đa bộ xử lý (bxl) như Cray XMT, heterogeneous processors như Cell Broadband Engine Gần đây, các bộ xử lý đồ họa (GPU) cũng được sử dụng, đặc biệt là các bộ xử lý của NVIDIA với công nghệ CUDA hỗ trợ lập trình song song Hầu hết các phương pháp này đều tập trung vào việc cải thiện tốc độ Chỉ vài năm gần đây, các khía cạnh khác

Trang 8

như sự ổn định hiệu suất, khả năng làm việc với các từ điển lớn bắt đầu được quan tâm, đặc biệt là vấn đề từ điển lớn Tuy nhiên, thuật toán AC thường chỉ cho hiệu năng tốt khi có ít sự so khớp trên đầu vào, tức là kích thước của các mẫu tìm được trên kích thước dữ liệu đầu vào là thấp Khi tỷ lệ này tăng lên, hiệu năng của thuật toán thường bị giảm nhanh chóng Điều này rất dễ gây ra các tấn công từ chối dịch vụ (DoS) trên các hệ thống bảo mật mạng có sử dụng MSM

Hơn nữa, việc hiệu suất thay đổi khi thực hiện với các dữ liệu đầu vào và từ điển có kích thước khác nhau luôn là một nhược điểm của các phương pháp dựa trên phần mềm Điều này đặc biệt đúng với các kiến trúc dựa trên bộ nhớ cache: khi phép toán tìm kiếm được thực hiện bên trong bộ nhớ cache, thuật toán sẽ thực hiện rất hiệu quả Tuy nhiên nếu việc tìm kiếm thực hiện ở bộ nhớ chính - main memory, hiệu năng của thuật toán khá thấp Điều này là dễ xảy

ra với các ứng dụng mà dữ liệu đầu vào không thể đoán trước, như các ứng dụng lọc các gói tin trên mạng, lượng dữ liệu biến thiên liên tục theo thời gian Lúc này thuật toán sẽ phải truy nhập dữ liệu từ những vị trí trong bộ nhớ chính, dẫn đến sự thay đổi về hiệu năng

Để khắc phục được các nhược điểm này, nhiều phương pháp giúp cải thiện thuật toán AC đã được đưa ra Trong đó có hai thuật toán là sử dụng bảng băm và thuật toán phân tách Head-Body

Việc sử dụng bảng băm giúp giảm kích thước dữ liệu phải xử lý do thuật toán

AC sinh ra, tuy nhiên việc hàm băm có chi phí cao và dễ xảy ra va chạm băm làm cho thuật toán này trong nhiều trường hợp không tỏ ra hiệu quả Một phương pháp mới là phân tách Head-Body sẽ tiếp cận bài toán theo hướng khác với hàm băm, vẫn giảm kích thước dữ liệu để đủ cho việc tìm kiếm có thể diễn ra trong bộ nhớ cache đồng thời hiệu năng không thay đổi nhiều trên các từ điển và các dữ liệu đầu vào khác nhau

Luận văn sẽ trình bày cơ sở lý thuyết và tập trung vào hướng tiếp cận thứ hai – Head Body Phương pháp và kỹ thuật trong hướng tiếp cận này sẽ được phân tích, so sánh và đánh giá với thuật toán AC

Với việc xây dựng bài toán MSM dựa trên phần mềm, một phương pháp cải

Trang 9

thiện hiệu năng tất yếu được nghĩ tới là sử dụng nhiều máy tính cùng thực hiện bài toán

Đây chính là mục đích của tính toán song song phân cụm (Cluster), một hệ thống máy tính song song được xây dựng từ các nút tính toán và thiết bị mạng thông dụng, mỗi nút tính toán đóng vai trò điều khiển vào/ra là một hệ thống làm việc hoàn chỉnh, có khả năng làm việc độc lập

Việc thiết lập hệ thống tính toán song song phân cụm từ những máy tính có cấu trúc đơn giản, sử dụng công nghệ mạng phổ biến đã được bắt đầu từ năm

1994 với mô hình Beowulf Cluster của Thomas Sterling cùng Donal Becker Một hệ thống như vậy rẻ hơn nhiều so với một siêu máy tính cùng sức mạnh, điều này làm cho chúng phổ biến và đặc biệt phù hợp với các nước đang phát triển cũng như các trường đại học Tuy nhiên các hệ thống tính toán cluster cũng có các nhược điểm như quá trình triển khai, cấu hình hệ thống tương đối phức tạp, hệ thống hoạt động không ổn định bằng các siêu máy tính

và nhược điểm lớn nhất là chi phí truyền thông giữa các nút tính toán

Tuy nhiên, luận văn sẽ không đi sâu về phía phần cứng mà tập trung vào việc thiết kế phần mềm chạy trên các bộ xử lý đa nhân với cấu trúc như các cluster, với thư viện lập trình song song được sử dụng là Message Passing Interface-MPI

Bài toán MSM có thể được thực hiện song song bằng cách chia đoạn dữ liệu đầu vào thành tập hợp các đoạn dữ liệu nhỏ hơn dữ liệu ban đầu và được gửi đến mỗi bộ xử lý để thực hiện tìm kiếm Tuy nhiên, để có được hiệu suất tối

đa trên tất cả các bộ xử lý cần đòi hỏi những thuật toán hiệu quả trong việc cân bằng tải

Luận văn sẽ đưa ra các thuật toán song song áp dụng cho bài toán MSM và thực hiện so sánh, phân tích hiệu quả các thuật toán đó trên dữ liệu đầu vào, từ điển và số bộ xử lý khác nhau Ngoài ra, luận văn sẽ xây dựng mô hình song song cho thuật toán Head-Body để kiểm tra hiệu quả của nó trên cơ chế truyền thông điệp Về ứng dụng của bài toán, trong những năm gần đây, bài toán MSM ngày càng được quan tâm hơn do sự bùng nổ của lượng thông tin trên mạng internet và nhu cầu tìm kiếm của người dùng

Trang 10

Với những nôi dung trình bày ở trên, luận văn bao gồm các phần tóm tắt như sau:

Chương 1: Đặt vấn đề và định hướng giải pháp, phần này bao gồm các cơ

sở lý thuyết và các thuật toán cho bài toán MSM

Chương 2: Cài đặt và phân tích các thuật toán cho bài toán Multi String Matching

Chương 3: Kết quả thu được từ thực nghiệm và ứng dụng của bài toán Chương 4: Kết luận và hướng phát triển của đề tài

Trang 11

1.2 Một số thuật tốn so khớp xâu

1.2.1 Các cách tiếp cận cơ bản

1.2.1.1 Cách tiếp cận ngây thơ

Phương pháp đầu tiên và đơn giản nhất cĩ thể nghĩ đến ngay là lần lượt xét từng vị trí i trong xâu ký tự gốc từ 1 đến n-m+1, so sánh T[i…(i+m-1)] với P[1 m] bằng cách xét từng cặp ký tự một và đưa ra kết quả tìm kiếm Người ta cịn gọi phương pháp này là cách tiếp cận ngây thơ (Nạve string search) Dưới đây là thủ tục đặc tả của phương pháp này :

9 return false // khơng cĩ vị trí nào thỏa mãn

Dễ thấy độ phức tạp trung bình của thuật tốn là O(n+m), nhưng trong trường hợp tồi nhất độ phức tạp là O(n.m), ví dụ như tìm kiếm mẫu “”aaaab” trong xâu “aaaaaaaaab”

1.2.1.2 Thuật tốn Rabin-Karp

Tư tưởng chính của phương pháp này là sử dụng phương pháp băm (hashing) Tức là mỗi một xâu sẽ được gán với một giá trị của hàm băm (hash function), ví dụ xâu “hello” được gán với giá trị 5, và hai xâu được gọi là bằng nhau nếu giá trị băm của nĩ bằng nhau Như vậy thay vì việc phải đối sánh các xâu con của T với mẫu P, ta chỉ cần so sánh giá trị hàm băm của chúng và đưa

ra kết luận

Đặc tả chúng thuật tốn như sau :

Trang 12

1 function Rabin_Karp(string T[1 n], string P[1 m])

2 hsub := hash(P[1 m]) // giá trị băm của xâu P

3 hs := hash(T[1 m]) // giá trị băm của xâu T

4 for i from 1 to n-m+1

5 if hs = hsub

6 if T[i i+m-1] = P

7 return i

8 hs := hash(T[i+1 i+m]) // giá trị băm của xâu T[i+1 i+m]

9 return not found

Vấn đề đặt ra ở đây là khi có quá nhiều xâu sẽ tồn tại các trường hợp các xâu khác nhau có giá trị băm giống nhau, do đó khi tìm thấy hai xâu có giá trị băm giống nhau vẫn phải kiểm tra lại xem chúng có thực sự bằng nhau hay không (dòng 6), may mắn là trường hợp này rất ít xảy ra với một hàm băm thiết kế đủ tốt

Phân tích thuật toán ta thấy : dòng 2,3,6,8 có độ phức tạp là O(m), nhưng dòng 2,3 chỉ thực hiện duy nhất một lần, dòng 6 chỉ thực hiện khi giá trị băm bằng nhau (rất ít), chủ yếu là dòng số 8 sẽ quyết định độ phức tạp của thuật toán Bởi khi tính giá trị băm cho T[i+1 i+m] ta mất thời gian là O(m), công việc này được thực hiện trong n-m+1 lần như vậy độ phức tạp không hơn gì so với phương pháp ở phần 2

Như vậy ta phải tính lại giá trị hs trong thời gian hằng số (constant time), cách giải quyết ở đây là tính giá trị băm của T[i+1 i+m] dựa vào giá trị băm của T[i i+m-1] bằng cách sử dụng cách băm tròn (rolling hash, là cách băm mà giá trị đầu vào được băm với một kích thước cửa số cổ định trượt trên độ dài của giá trị cần băm) Cụ thể trong bài toán này, ta sử dụng công thức sau để tính giá trị băm tiếp theo trong một khoảng thời gian hằng số :

hash(T[i+1…i+m]) = hash(T[i+1…i+m-1]) – ASCII(T[i]) + ASCII (T[i+m]), trong đó ASCII(i) là mã ASCII của ký tự i

Như vậy trong trường hợp này độ phức tạp chỉ còn là O(n) Đó là một cách băm đơn giản, dưới đây sẽ trình bày một hàm băm phức tạp và tốt hơn cho các trường hợp dữ liệu lớn Đó là sử dụng các số nguyên tố lớn

Trang 13

Ví dụ như xâu “hi” băm bằng số nguyên tố 101 sẽ có giá trị băm là 104 × 1011 + 105 × 1010 = 10609 (ASCII của ký tự 'h' là 104 và của ký tự 'í là 105)

Thêm nữa, ta có thể tính giá trị băm của một xâu con dựa vào các xâu con trước nó, ví dụ như ta có xâu "abracadabra", ta cần tìm một mẫu tìm kiếm có

độ dài là 3 Ta có thể tính giá trị băm của xâu “bra” dựa vào giá trị băm của xâu “abr” (xâu con trước nó) bằng cách lấy giá trị băm của “abr” trừ đi giá trị băm của ký tự „a‟ đầu tiên (ví dụ như 97 × 1012 (97 là giá trị ASCII của ký tự 'á và 101 là số nguyên tố đang sử dụng) và cộng thêm giá trị băm cảu ký tự „a‟ cuối cùng trong xâu “bra” (ví dụ như 97 × 1010 = 97)

1.2.1.3 Thuật toán Knuth-Morris-Pratt

Ý tưởng chính của phương pháp này như sau: trong quá trình tìm kiếm vị trí của mẫu P trong xâu gốc T, nếu tìm thấy một vị trí sai ta chuyển sang vị trí tìm kiếm tiếp theo và quá trình tìm kiếm sau này sẽ được tận dụng thông tin từ quá trình tìm kiếm trước để không phải xét các trường hợp không cần thiết

Ví dụ : tìm mẫu P = “ABCDABD” trong xâu T = “ABC ABCDAB ABCDABCDABDE” giả sử m và i là chỉ số chạy thuật toán tương ứng đối với xâu T và P Ta lần lượt có các bước của thuật toán như sau :

+ Đầu tiên, m=0, i=0

m: 01234567890123456789012

T: ABC ABCDAB ABCDABCDABDE

P: ABCDABD

i: 0123456

Ta thấy m=3 và i=3 xâu T và mẫu P không khớp nhau (T[3] = space, P[3] =

„D‟), nên sẽ dừng so sánh và bắt đầu lại với m=1 Ta chú ý là ký tự đầu tiên của P là „A‟ không xuất hiện trong T từ vị trí 0 đến 3 nên ta chuyển đến xét m=4

+ m=4, i=0

m: 01234567890123456789012

S: ABC ABCDAB ABCDABCDABDE

W: ABCDABD

Trang 14

i: 0123456

Tại m=10, i=6 xâu T và mẫu P không khớp nhau (T[10] = space, P[6] = „D‟)

Ta lại thấy chuỗi “AB” trong mẫu P không xuất hiện trong T từ vị trí 5 đến vị trí 7, nên ta chuyển sang m=8

Ta tìm được kết quả mẫu P xuất hiện trong xâu T ở vị trí 15

Như vậy qua ví dụ ta thấy vấn đề chủ yếu ở đây là tìm vị trí tiếp theo để kiểm tra sau khi bắt gặp một vị trí sai Ta hãy xem cách giải quyết của KMP

Bây giờ ta giả sử có bảng đối sánh thành phần (partial match table) chỉ cho ta biết điểm xuất phát tiếp theo khi gặp một ví trí đối sánh sai (mismatch) F[1 m] trong đó giá trị F[i] là tổng số ký tự ta lùi lại để xét tiếp trên xâu T sau khi gặp một vị trí sai trong khi đang xét đến ký tự thứ i trong xâu mẫu tìm kiếm Tức là nếu ở vị trí m mà T[m+i] khác P[i] thì ta sẽ xét tiếp vị trí m+i-F[i] trên xâu T

Có hai ưu điểm ở đây : thứ nhất là F[0]=-1 tức là nếu P[0] là vị trí sai thì ta sẽ chuyển ngay đến ký tự tiếp theo, thứ hai là mặc dù ta quay lại vị trí m+i-F[i] là

Trang 15

vị trí kiểm tra tiếp theo nhưng thực sự ta chỉ cần đối sánh mẫu từ vị trí P[F[i]] Chi tiết về xây dựng bảng này sẽ được đề cập đến ở phần cuối của mục này

Cụ thể với bảng trên, lược đồ thuật toán KMP như sau :

1 Bắt đầu với i = m = 0; giả sử P có n ký tự và T có k ký tự

2 If m + i = k then

- Thoát, không có trường hợp nào thỏa mãn Else

- So sánh P[i] với T[m + i]:

- If (bằng nhau) then i ← i+1 If i = n then ta tìm được xâu con của T thỏa mãn bắt đầu từ vị trí m;

- If (không bằng nhau), gán e = T[i] m=m+i-e, if i > 0, gán i = e

Tùy từng trường hợp mà bộ chữ này là khác nhau Đối với bài toán tìm kiếm từ trên đoạn văn bản, bộ chữ là bảng mã ASCII với 256 kí tự, nhưng đối với bài toán tìm kiếm mà mẫu là các chuỗi bit (như bài toán kiểm tra file xem có chứa mã độc hay không) thì bộ chữ này chỉ bao gồm các bit 0 và 1

Gọi từ điển K = { y1, y2, y3, …., y4 } là tập hợp hữu hạn các từ mẫu Gọi x là một xâu đầu vào Yêu cầu của bài toán là xác định tất cả các từ mẫu trong K mà

là xâu con của x kèm theo vị trí của xâu con đó trong x Các từ mẫu này có thể chồng lên nhau, tức là một từ mẫu A mà là tiền tố của từ mẫu B thì sự xuất hiện của từ mẫu B phải tính cả sự xuất hiện của A

Mô hình tìm kiếm này sẽ được biểu diễn bởi một tập hợp các trạng thái được đánh chỉ số Mô hình sẽ xử lý đầu vào x bằng cách thực hiện việc đọc từng kí tự của x và dựa vào kí tự này để thực hiện việc chuyển trạng thái thông qua hàm dịch chuyển, nếu gặp trạng thái phù hợp sẽ đưa ra output của trạng thái đó

Trang 16

Một mô hình tìm kiếm như vậy được mô tả bởi ba hàm :

(c).Output function

Hình 1 Các hàm goto, failure, output sinh ra từ thuật toán AC

Với hàm goto được biểu diễn bởi cây như hình a, có một trạng thái được gọi là trạng thái bắt đầu, thường được kí hiệu là 0 Các trạng thái còn lại lần lượt là

1, 2, … , 7 Để định nghĩa một cách hình thức cho hàm goto, ta có thể coi hàm này là tập hợp các cặp, mỗi một cặp bao gồm một trạng thái và một kí

Trang 17

tự đầu vào hoặc một trạng thái và một thông điệp “fail”

Ví dụ, như hình (a) thì với cạnh có nhãn h đi từ đỉnh 0 đến đỉnh 1 thì hàm goto tương ứng là :g(0, h) = 1

Ví dụ với state 1 thì ngoài 2 kí tự là e và h được biểu diễn trên hình,các kí tự còn lại là tập các kí tự fail với state 1 và được biểu diễn g(1, σ) = fail với σ là tập tất cả các kí tự trong bảng chữ trừ h và e

Riêng đối với trạng thái 0, ngoài các kí tự để trạng thái 0 chuyển sang trạng thái khác, tất cả các kí tự còn lại đều thuộc hàm goto mà trạng thái chuyển đến chính là trạng thái 0 Tính chất này nhằm đảm bảo cho bất kì kí

tự nào trong xâu đầu vào cũng được xử lý

Hàm failure cũng là hàm chuyển trạng thái Hàm này được xây dựng khi hàm goto trả lại thông điệp fail

Một số trạng thái được chỉ định là trạng thái output, tức là trạng thái mà sẽ cho ra một số từ mẫu trong từ điển K nếu nó được thăm Hàm output sẽ kết hợp mỗi trạng thái với một tập từ mẫu Tập từ mẫu này có thể rỗng để thể hiện trạng thái đó không có output Ví dụ với đồ thị ở trên, khi xâu đầu vào đi đến trạng thái 7 thì tức là các kí tự đầu vào trước đó là t, h, e, Do đó output của 7

là xâu “the” output(7) = “the”

Ngoài 3 trạng thái có output như ở bảng (c) – Hình 1 - thì các trạng thái còn lại đều có hàm output là rỗng Một chu trình trên thuật toán AC sẽ được thực hiện như sau:

Gọi s là trạng thái hiện tại của mô hình và a là kí tự hiện tại đang được xử lý của xâu đầu vào x Khởi tạo, trạng thái hiện tại là trạng thái 0 và kí hiệu hiện tại là kí hiệu đầu tiên của x

1 Nếu g(s, a) = s‟ thì AC sẽ thực hiện một hàm dịch chuyển Lúc này s‟ trở thành trạng thái hiện tại và kí tự sau a trong xâu x sẽ là kí tự được xử lý Sau đó, chúng ta sẽ thực hiện kiểm tra output(s‟) Nếu output(s‟) khác rỗng thì chúng ta sẽ có được tập các từ mẫu xuất hiện trong x là kết quả của hàm output(s‟) và vị trí xuất hiện từ mẫu chính là vị trí của kí tự đầu vào trừ đi chiều dài từ mẫu Một chu trình được hoàn thành

2 Nếu g(s,a) = fail, mô hình sẽ gọi đến hàm failure và thực hiện quá

Trang 18

trình chuyển trạng thái failure Nếu f(s) = s‟ thì lúc này ta coi s‟ như trạng thái hiện tại và a là kí tự đang được xử lý và quay trở lại bước 1

Ví dụ : Với xâu đầu vào x=”there”

Quá trình thực hiện của mô hình tìm kiếm:

x tương ứng với hàm output(7) là {the}

Với trạng thái hiện tại là 7, kí tự được xử lý là r Vì g(7,r)=fail nên mô hình

sẽ gọi đến hàm failure Hàm failure được gọi sẽ cho kết quả f(7) = 2 và vì g(2,r)

= 3 nên 3 sẽ là trạng thái hiện tại và kí tự tiếp theo trong xâu là r được chọn để làm kí tự xử lý

Tương tự, output(3) khác rỗng và cho ta kết quả là {her} Ta có từ mẫu thứ 2 tìm được là: “her” Tiếp đó, g(3.r)=4 nên ta có 4 là trang thái tiếp theo được xử lý, output(4) khác rỗng, cho ra kết quả là các từ mẫu {her,here} Kết thúc quá trình là g(4,r)=fail

Trang 19

1.2.3 Phương pháp phân tách Head-Body

1.2.3.1 Tổng quan về phương pháp phân tách Head – Body (HB)

Bài toán MSM có thể được giải quyết hiệu quả bởi thuật toán corasick sử dụng DFA khi không gian tương đối nhỏ, tức là số trạng thái sinh ra bởi AC-DFA là không nhiều Khi làm việc trên các không gian lớn, việc tìm kiếm trạng thái tiếp theo của hàm δ(s,a) có thể sử dụng bảng băm để tạo ra bảng chỉ chứa các trạng thái dịch chuyển hợp lệ

Aho-Với cả hai phương pháp sử dụng bảng đầy đủ hay sử dụng bảng băm của bảng dịch chuyển trạng thái (STT) trên các từ điển lớn thì đều gặp khó khăn trên các hệ thống/thiết bị có bộ nhớ nhỏ (như các mạch phần cứng)

1) Nếu sử dụng một bảng STT đầy đủ, kích thước của bảng này có thể trở lên rất lớn và khó khăn trong việc thực hiện thuật toán trên bộ nhớ nhỏ Giả sử ta sử dụng một bảng chữ ASCII với 256 kí tự thì với mỗi một trạng thái sẽ có 256 trạng thái chuyển đổi tương ứng

Nếu mỗi trạng thái được biểu diễn bởi 4byte thì 256 trạng thái chuyển đổi sẽ cần một bộ nhớ 256 x 4=1k bytes

Như vậy với một bộ nhớ cache 10MB sẽ chỉ lưu trữ được 10.000 state Trong khi một MSM với hàng chục ngàn mẫu có thể sinh ra tới trăm ngàn trạng thái 2) Nếu chúng ta sử dụng bảng băm, mỗi lần truy nhập STT yêu cầu một lượng thời gian nhất định để băm Giả sử mất 30 chu kì CPU để tính toán địa chỉ băm, 3 chu kì để phát hiện xung đột băm và 12 chu kì để so sánh các nhãn chuyển tiếp và thiết lập các biến trạng thái tiếp theo Trên một bộ nhớ 2.6GHz, hiệu suất tốt nhất có thể bị giới hạn bởi 2600/(30+15)=58MBytes/sec (chưa tính trường hợp va chạm băm hoặc cache miss)

Ngược lại, sử dụng môt bảng STT không băm sẽ chỉ mất 2600/12 ~ 217 Mb/giây Một yếu tố quan trọng khác ảnh hưởng đến hiệu năng của thuật toán AC là tỉ lệ so khớp-match ratio, là tỉ lệ giữa kích thước các từ mẫu tìm được trên toàn bộ kích thước dữ liệu đầu vào Tỉ lệ này tỉ lệ nghịch với hiệu năng của thuật toán Điều này được biểu diễn thông qua đồ thị sau với hiệu năng được tính bằng số dự liệu xử lý được trên 1 giây:

Trang 20

Hình 2 Ảnh hưởng tỉ lệ so khớp tới hiệu năng của thuật toán [6]

Thuật toán Head Body (HB) được xây dựng để khắc phục hạn chế của hai phương pháp này Với phương pháp HB, chúng ta sẽ chia AC-DFA thành hai phần: một phần nhỏ “head” xử lý dữ liệu đầu vào để tìm các từ có khả năng

Ngoài ra, việc tách automat thành hai phần riêng biệt giúp thuật toán Head- Body có nhiều thuận lợi để song song hóa Thay vì phải thực hiện lần lượt phần head sau đó đến body, mỗi bxl có thể thực hiện riêng một phần và trao đổi phần xâu khả năng làm từ mẫu với nhau

Trang 21

1.2.3.2 Xây dựng H-DFA và B-NFA

Thuật toán phân chia head-body bao gồm việc xây dựng head DFA DFA) và body NFA (B-NFA) từ một AC-DFA

(H-a Xây dựng H-DFA

Gọi S là từ điển dùng để xây dựng AC-DFA, P được gọi là một compatible prefixs của S nếu P là tập hợp các xâu tiền tố của các từ mẫu trong S và trong các xâu thuộc P, không có xâu nào vừa là tiền tố thực sự của một xâu trong S, vừa là hậu tố thực sự của một xâu khác trong P

Ở đây, tiền tố thực sự và hậu tố thực sự là tiền tố và hậu tố mà có chiều dài nhỏ hơn xâu ban đầu (một xâu có thể được coi là tiền tố hoặc hậu tố của chính nó)

Với Prefix(s, i) là xâu tiền tố của từ mẫu s có chiều dài i và Prefix(s, *) và Suffix(s, *) là tập hợp các xâu tiền tố và hậu tố có chiều dài bất kỳ của từ mẫu s

Một phương pháp để xây dựng một tập xâu tiền tố từ một từ điển S thỏa mãn yêu cầu trên được thực hiện như sau:

1 Khởi tạo một tập rỗng P, xác định một số lH làm chiều dài xâu tiền tố

2 Với mỗi xâu s thuộc tập từ điển S

a) Nếu chiều dài của s ≤ lH thì thêm chính s vào P

b) Nếu chiều dài của s > lH thì thêm Prefix(s, lH) vào P

P là tập xâu tiền tố của S thỏa mãn định nghĩa hình thức trên vì rõ ràng P là tập hợp các xâu tiền tố của các từ mẫu trong S Các xâu tiền tố thực sự có chiều dài đúng bằng lH vì nếu nhỏ hơn lH thì xâu tiền tố chính là từ mẫu Do

đó các xâu tiền tố này không thể là hậu tố thực sự của nhau

Sau khi tìm được P, H-DFA có thể được xây dựng bằng thuật toán AC-DFA trên các từ trong P

Định Nghĩa: Với một tập S được biểu diễn bởi một AC-DFA gồm 8 phần

(Q, Σ, q0, δ,M, λ, g, f ) thì H-DFA có 6 phần (QH, Σ, q0, δH, MH, QR) trong đó:

Trang 22

- Bảng chữ Σ giống như AC-DFA

- Trạng thái bắt đầu q0 như AC-DFA

- Một tập hợp hữu hạn các trạng thái QH là tập con của Q, tức là với mọi qa thuộc QH, qb thuộc đường dẫn ngắn nhất từ q0 đến qa thì qb cũng thuộc QH

- Một hàm dịch chuyển trạng thái δH : QH x Σ => QH

- Một tập hợp các trạng thái kết thúc MH = {QH ∩ M}

- Một tập hợp các trạng thái body-root QR là tập con của {QH\q0} thỏa mãn: Với g(q,*) là tập hợp tất cả các trạng thái được sinh ra từ hàm goto của trạng thái q

b Xây dựng B-NFA

Gọi T là tập hợp các xâu hậu tố của S tương ứng với P nếu việc ghép mỗi xâu trong P với một xâu trong T sinh ra từ điển S Định nghĩa hình thức cho tập T: Ở đây, biểu thức p.t là ghép nối hai xâu p và t

Việc xây dựng B-NFA là sự mở rộng từ tập hợp các body-root của H-DFA Mỗi một body-root trở thành gốc của một cây trong tập hợp các cây B-NFA B-NFA lúc này được xây dựng như xây dựng hàm goto của thuật toán Aho-corasick

Mô tả hình thức B-NFA :

Với một AC-DFA (Q, Σ, q0, δ, M, λ, g, f ) và một H-DFA (QH, Σ, q0, δH,MH,QR) Thành phần B-NFA tương ứng gồm 5 phần (QB, QR, Σ, gB, MB) được mô tả như sau :

- Bảng chữ Σ như AC-DFA

- Tập hợp các body-root QR như H-DFA

- Một tập hợp các trạng thái QB = {Q\QH} ∪ QR

- Một hàm goto gB: QB x Σ → { QB\ QR} và ∀ q ∈ QB , c ∈ Σ thì gB ( q, c) = q' ⇒ g (q, c) = q'

- Một tập hợp trạng thái kết thúc MB = {M\MH}

B-NFA xây dựng như trên bao gồm một số các cây body-tree, đầu của mỗi cây này là một body-root thuộc QR Mỗi trạng thái được mô tả bởi một nút

Trang 23

goto

c Thực hiện tìm kiếm trên H-DFA và B-NFA

H-DFA nhận dữ liệu đầu vào, bắt đầu từ trạng thái q0 và thực hiện các hàm dịch chuyển trạng thái giống như với thuật toán AC-DFA Khi đến được một body- root, body-root và vị trí đầu vào sẽ được lưu lại và gửi tới B-NFA

để tìm kiếm ở phần body Bắt đầu từ body-root, B-NFA sẽ thực hiện tìm kiếm phần xâu còn lại qua một loạt các trạng thái bằng hàm goto.Việc tìm kiếm trên phần body sẽ kết thúc khi kí tự đầu vào không khớp với nhãn chuyển tiếp Cùng lúc với tìm kiếm phần body, H-DFA sẽ tiếp tục xử lý xâu đầu vào để tạo ra các tìm kiếm trên các B-NFA với body-root khác

Bất kỳ sự tìm kiếm nào xảy ra thành công trong cả H-DFA và B-NFA đều được ghi lại và coi như là tìm thấy một từ mẫu

Một ví dụ minh họa về phương pháp phân tách Head-Body:

Ta có một từ điển S={aril, act, account, interact, illustrate, ill, counting, counter, coincide} với bảng chữ là các chữ cái tiếng anh

Thuật toán AC-DFA được xây dựng như trên hình 4 Để tránh phức tạp, các hàm dịch chuyển quay trở lại các nút có chiều sâu 0 và 1 được loại bỏ (rất nhiều), các đường mũi tên màu xám không ghi kí tự vì nó cùng kí tự với các hàm mũi tên màu đen có cùng trạng thái đích AC-DFA ở trên được chia thành 2 phần head và body

Phần head bao gồm tập hợp các xâu tiền tố của S là P = {aril, act, acco, inte, illu, ill, coun, coun, coin}

Trang 24

Hình 3: Automat AC-DFA cho từ điển S [6]

Hình 4: H-DFA và B-NFA cho từ điển S [6]

Trang 25

Ở đây, ta chọn chiều dài xâu tiền tố là 4 Với những từ có nhỏ hơn 4 kí tự,bản thân từ này sẽ được đưa vào trong P Kết quả ta được H-DFA được tạo ra như hình vẽ (bên trái)

Các body-root được tô màu vàng và đi kèm theo sau là các body NFA tương ứng với body-root này Các phần body sẽ được xây dựng bằng cách mở rộng các body-root để thực hiện tiếp việc so khớp với phần suffix còn lại.Với chú

ý rằng chỉ có ánh xạ 1-1 từ body-root trong phần head tới một body-tree trong phần body

Việc tìm kiếm được bắt đầu ở phần head và được thực hiện như với một DFA thông thường

Giả sử xâu đầu vào là “accountillustrate”.Các trạng thái trong phần head sẽ là:

0-a-2-c-7-c-11-o-19-u-9-n-21-t-0-i-1-l-4-l-15-u-17-s-0 -a-2-t-0-e-0

Ở đây có 3 body-root đến được là 19,21 và 17 tương ứng với 3 body tree như hình vẽ Hai từ “account” và “illustrate” sẽ được so khớp trong phần body, trong khi từ “ill” sẽ được so khớp trong phần head

Sẽ không có bất kỳ một hàm chuyển nào đi từ B-NFA quay trở lại H-DFA hoặc hàm chuyển nào đi từ trạng thái của cây này đến cây khác

Tính chất “hướng về trước ” (foward-only) này làm giảm số lượng các bước dịch chuyển trong B-NFA

Như vậy, ưu điểm chính của phương pháp head-body này là giảm từ AC-DFA xuống một H-DFA đủ nhỏ để chứa trong bộ nhớ có thể truy cập nhanh như cache và một cấu trúc đơn giản các body-tree dễ dàng trong việc xử lý và lưu trữ hiệu quả

Trang 26

1.2.4 Thực hiện bài toán so khớp xâu trong môi trường

song song

1.2.4.1 Ý tưởng của phương pháp song song Master Slave

Để nâng cao tốc độ cho bài toán MSM, một ý tưởng tất yếu là thực thi bài toán trong môi trường song song Với dung lượng lưu trữ dường như không giới hạn và dễ dàng nâng cấp, dung lượng của dữ liệu không phải là vấn đề với hệ thống này, trong khi điều này là một thách thức với các hệ thống phần cứng như mạch FPGA hoặc GPU Tốc độ của việc song song hóa cũng dễ dàng được nâng cao khi chúng ta tăng số bộ xử lý hoặc số máy tính thực hiện lên Đặc biệt với sự xuất hiện của các bộ xử lý đa nhân, ta cũng có thể song song hóa bài toán ngay trên một máy tính Sau khi tìm hiểu các thuật toán cho bài toán MSM trong môi trường tuần tự, chúng ta sẽ tiến hành cải thiện hiệu năng trong môi trường song song trên các bộ xử lý(bxl) đa nhân Ý tưởng cơ bản của thuật toán là chia đoạn text thành các text nhỏ và phân phối mỗi text cho một bộ xử lý (bxl), mỗi bxl thực hiện việc tìm kiếm tuần tự trên cùng một AC-DFA nếu sử dụng thuật toán Aho-corasick hoặc cùng một H-DFA và B-NFA nếu sử dụng thuật toán Head-Body Tuy nhiên, hiệu năng trên mỗi đoạn subtext phụ thuộc nhiều vào số các từ mẫu tìm được Mỗi lần tìm kiếm được

từ mẫu, chương trình phải mất thời gian xử lý như kiểm tra trạng thái và ghi ra tệp tin Do vậy nếu số lượng từ mẫu tìm được ở mỗi bxl chênh lệch nhau nhiều thì có thể gây mất cân bằng về chi phí tính toán, ảnh hưởng đến hiệu năng của thuật toán song song

Với kiến trúc phân tán bộ nhớ, chúng ta có thể sử dụng một cơ chế để cân bằng tải giữa các bxl bằng MPI Chúng ta sẽ phát triển một cơ chế Master-Slave, trong đó master sẽ chịu trách nhiệm phân bổ text nhỏ còn slave sẽ chịu trách nhiệm tính toán Mỗi slave sẽ tương ứng với một nhân trong bộ xử lý hoặc một máy tính độc lập và thực hiện việc tìm kiếm Việc tính toán và xây dựng các automat được phía master thực hiện, sau khi tính toán xong, các automat sẽ được gửi đến các slave

Trang 27

Sau đó phía Master sẽ chia các đoạn text thành các khối có kích thước cố định gửi đến slave, số các khối này có kích thước đủ nhỏ để đảm bảo sự cân bằng

về số lượng từ mẫu tìm được giữa các slave Vì số lượng các khối có thể vượt quá số slave nên mỗi khi một slave thực hiện xong, nó sẽ thông báo cho master biết để master tiếp tục phân phối các khối dữ liệu tiếp theo Hơn nữa, ngay cả khi việc tính toán trên mỗi slave được tối ưu thì thời gian truyền khối

dữ liệu giữa master/slave cũng có thể gây giảm hiệu năng Vì vậy một phương pháp để giảm thời gian tính là việc tính toán và truyền dữ liệu được gối lên nhau, điều này có thể được thực hiện với cơ chế gửi nhận non blocking trong MPI

Trong giai đoạn master tính toán automat và gửi đến các slave, việc sử dụng các automat có kích thước nhỏ như thuật toán Head-Body sẽ giúp giảm thời gian truyền thông, thuận lợi trong các hệ thống mà số lượng từ mẫu thay đổi nhiều và thường xuyên Ở đây chúng ta không thực hiện tính toán automat cùng lúc trên cả master và slave vì điều này gây tốn tài nguyên mà không cải thiện được hiệu năng tính toán, đồng thời cũng khó khăn trong việc thay đổi, cập nhật từ mẫu

1.2.4.2 Thuật toán song song cho bài toán song song MSM

Một thuật toán song song cụ thể cho bài toán MSM bao gồm hai phần chính: chiến lược cân bằng tải động và chiến lược phân bổ dữ liệu Trong chiến lược cân bằng tải động, đoạn text đầu vào được chia thành các subtext và các subtext này được gửi tới những slave mà đang ở chế độ nghỉ, mục đích là để cho tất cả các slave đều xử lý và thời gian tính giữa các slave không quá chênh lệch Vì việc gán subtext cho các slave này không phải là cố định

mà tùy thuộc vào các tình trạng hiện tại của các slave nên được gọi là cân bằng tải động

Kích cỡ của subtext được gửi tới mỗi slave là sb+m-1 trong đó sb là kích thước subtext được chọn trước và m-1 số kí tự gối chồng giữa các subtext Tham số m dùng để chỉ chiều dài lớn nhất của từ mẫu, mục đích để tránh bị mất các từ mẫu mà nằm giữa hai đoạn subtext Kích cỡ sb là một tham số

Trang 28

quan trọng ảnh hưởng tới hiệu năng của thuật toán,liên quan nhiều đến I/O và các thành phần truyền dữ liệu Về cơ chế phân bổ dữ liệu giữa master và slave, ta có thể thực hiện theo hai phương pháp : phân bổ theo subtext và phân

bổ theo text pointer

a Phân bổ theo subtext

Giả sử số các slave là p và được xác định bởi chỉ số id từ 1 tới p Bên trong master sẽ chứa tất cả các khối được chia ra từ đoạn text Thuật toán sẽ được chia ra làm hai phần: Thuật toán thực hiện trên master và thuật toán thực hiện trên slave

Phía master sẽ thực hiện việc tính toán để xây dựng các H-DFA và B-NFA hoặc AC-DFA, sau đó nó sẽ broadcast các automat này tới các slave Giai đoạn này trên master sẽ kết thúc khi không còn bất kì một slave nào chưa nhận được automat Tuy nhiên để biết được việc phân bổ đã hoàn thành, số lượng các slave nhận được automat phải đếm được ở master, điều này được thực hiện bằng cách đếm số các kết quả slave đã nhận được trả về Việc thực hiện tính toán automat chỉ trên một máy master mà không thực hiện đồng thời trên tất cả slave vì nhiều lý do:

- Dễ dàng cho việc thay đổi và sửa lỗi, khi chúng ta thêm các từ mẫu vào file pattern thì chúng ta chỉ cần tính toán trên một máy và thông báo cho các máy khác sự thay đổi Ngược lại, chúng ta phải gửi các pattern mới tới các máy và tất cả đều cùng tính toán lại

- Khi các máy cùng thực hiện công việc giống nhau, thời gian tính không được giảm bớt mà gây ra hao phí tài nguyên Do vậy ta chỉ cần một máy để tính toán, các máy còn lại có thể thực hiện các công việc khác (mặc dù phải mất thêm thời gian truyền kết quả)

Master sau đó sẽ thực hiện phân bổ các subtext Các slave sau khi nhận subtext sẽ thực hiện việc so khớp tuần tự bằng thuật toán HB hoặc AC Sau khi quá trình so khớp được thực hiện xong, slave này sẽ gửi thông báo tới master để master gửi tiếp các subtext khác Quá trình này sẽ kết thúc khi tất cả slave gửi thông báo đã thực hiện xong nhưng tất cả các subtext đã được xử lý, lúc này master sẽ gửi thông báo kết thúc tới các slave

Trang 29

Các bước thực hiện đều tương tự với subtext, tuy nhiên thay vì master gửi tới slave các subtext, nó sẽ chỉ gửi con trỏ trỏ đến vị trí hiện tại trong đoạn text đang xét Khi nhận được vị trí này, các slave sẽ đến đọc file text của master qua các dịch vụ chia sẻ file trong NFS, sau đó lấy ra subtext bắt đầu từ vị trí mình nhận được

Luận văn sẽ tập trung vào phương pháp phân bổ theo subtext vì trong môi trường bxl đa nhân, việc truyền thông qua cơ chế NFS của master và slave không

có sự khác biệt rõ ràng về tốc độ với truyền thông trong MPI

Ngoài ra, với việc các automat H-DFA và B-NFA có thể thực hiện tìm kiếm cùng lúc, chúng ta sẽ tiến hành xây dựng thử nghiệm thuật toán song song cho Head-Body trên môi trường MPI (Chương 2 tiếp sau đây)

Trang 30

Chương 2 - Cài đặt và phân tích các thuật toán cho bài toán so khớp xâu

Ngôn ngữ và môi trường cài đặt

Chương trình được xây dựng trên ngôn ngữ C++ và biên dịch bằng gcc 4.2 trên môi trường Linux Thuật toán song song được thực hiện trên bxl 4 nhân core i3 sử dụng mpich 2.0 Các kết quả tính toán được thực hiện trên tập từ điển tiếng anh với dữ liệu đầu vào là các file text với match ratio khác nhau

2.1 Phân tích, cài đặt và đánh giá thuật toán tuần tự

2.1.1 Phân tích phương pháp Aho-corasick

2.1.1.1 Phân tích thuật toán Aho-corasick

Theo chương 1, chúng ta có 2 phương pháp để xây dựng thuật toán AC là xây dựng từ ba hàm goto, failure và output hoặc xây dựng từ một DFA Ở cả 2 phương pháp, phép toán cơ bản là phép so sánh giữa kí tự đầu vào với nhãn trên cạnh nối giữa hai trạng thái Vì vậy thời gian tính của thuật toán AC phụ thuộc vào số lần dịch chuyển trạng thái

Với thuật toán tạo bởi ba hàm, số trạng thái cần dịch chuyển trong quá trình tìm kiếm là độc lập với số từ mẫu

Định lý 1 Thuật toán AC sử dụng các hàm goto, failure có ít hơn 2n bước dịch

chuyển trạng thái với n là chiều dài xâu đầu vào [2]

Trong mỗi một chu trình của thuật toán tìm kiếm, có thể không có hoặc có nhiều dịch chuyển failure được tạo ra Giả sử trạng thái hiện tại s có chiều sâu d, khi

đó số lần dịch chuyển goto để đến được trạng thái là không nhỏ hơn d (theo định nghĩa chiều sâu) trong khi đó số lần dịch chuyển hàm failure không quá d lần (dịch nhiều nhất là đến độ sâu 0) Chính vì vậy số lần dịch chuyển failure phải không lớn hơn số lần dịch chuyển goto Mà trong việc xử lý một xâu có chiều dài n thì cần n dịch chuyển goto Vì vậy tổng số lần dịch chuyển (bao gồm

cả goto và failure) luôn không lớn hơn 2n

Ngày đăng: 25/07/2017, 21:47

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. A. V. Aho and M. J. Corasick, “Efficient String Matching: An Aid to Bibliographic Search”, Communications of the ACM, vol. 18, no. 6,pp.333-340, 1975 Sách, tạp chí
Tiêu đề: Efficient String Matching: An Aid to Bibliographic Search
[2]. Atonino Tumeo, Oreste Villa and Daniel G. Chavarria-Miranda, “Aho-Corasic String Matching on Shared andDistributed-Memory Parallel Architectures”, Parallel and Distributed Systems, pp.436-443, March 2012 Sách, tạp chí
Tiêu đề: Aho-Corasic String Matching on Shared andDistributed-Memory Parallel Architectures
[4]. Panagiotis D. Michailidis and Konstantinos G. Margaritis, “ PerformanceEvaluation of Multiple Approximate String Matching Algorithms implemented with MPI Paradigm in an Experimental Cluster Environment” , Panhellenic Conference, pp. 168-172, August 2008 Sách, tạp chí
Tiêu đề: Performance Evaluation of Multiple Approximate String Matching Algorithms implemented with MPI Paradigm in an Experimental Cluster Environment
[5]. Vassilis Dimopoulos, Ioannis Papefstathiou and Dionisios Pnevmatikatos, “A Memory-Efficient Reconfigurable Aho-Corasick FSM Implementation for Instrusion Detection Systems”, Embedded Computer System: Architectures, Modeling and Simulation, pp.186-193, July 2007 Sách, tạp chí
Tiêu đề: A Memory-Efficient Reconfigurable Aho-Corasick FSM Implementation for Instrusion Detection Systems
[6]. Yi-Hua E.Yang, Viktor K. Prasanna, and Chenqian Jiang, “Head- Body Partitioned String Matching for Deep Packet Inspection with Scalable and Attack-Resilient Performance” , Parallel & Distributed Processing (IPDPS), pp.1-11, April 2010 Sách, tạp chí
Tiêu đề: Head-Body Partitioned String Matching for Deep Packet Inspection with Scalable and Attack-Resilient Performance
[7]. Weirong Jiang, Yi-Hua E. Yang and Viktor K. Prasanna, “Scalable Multi-Pipeline Architecture for High Performance Multi-Pattern String Matching”, Parallel & Distributed Processing, pp.1-12, April 2010 Sách, tạp chí
Tiêu đề: Scalable Multi-Pipeline Architecture for High Performance Multi-Pattern String Matching

HÌNH ẢNH LIÊN QUAN

Hình 1. Các hàm goto, failure, output sinh ra từ thuật toán AC - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 1. Các hàm goto, failure, output sinh ra từ thuật toán AC (Trang 16)
Hình 2. Ảnh hưởng tỉ lệ so khớp tới hiệu năng của thuật toán [6] - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 2. Ảnh hưởng tỉ lệ so khớp tới hiệu năng của thuật toán [6] (Trang 20)
Hình 5. Phương pháp song song cho thuật toán Head-Body - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 5. Phương pháp song song cho thuật toán Head-Body (Trang 44)
Hình 6: Biểu đồ so sánh hiệu năng của phương pháp song song Head- - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 6 Biểu đồ so sánh hiệu năng của phương pháp song song Head- (Trang 51)
Hình 7: Biểu đồ so sánh hiệu năng phương pháp song song và tuần tự với - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 7 Biểu đồ so sánh hiệu năng phương pháp song song và tuần tự với (Trang 52)
Hình 8: Biểu đồ so sánh phương pháp HB song song và AC song song - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 8 Biểu đồ so sánh phương pháp HB song song và AC song song (Trang 53)
Đồ thị dưới áp dụng với bộ 2 processor trên 2 máy chạy song song. - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
th ị dưới áp dụng với bộ 2 processor trên 2 máy chạy song song (Trang 56)
Hình 10. Mô hình kiến trúc hệ thống IDS - Nghiên cứu thuật toán song song trên môi trường MPI cho bài toán so khớp
Hình 10. Mô hình kiến trúc hệ thống IDS (Trang 57)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w