Các cấu trúc dữ liệu và giải thuật hiệu quả cho bài toán tìm kiếm Các cấu trúc dữ liệu và giải thuật hiệu quả cho bài toán tìm kiếm Các cấu trúc dữ liệu và giải thuật hiệu quả cho bài toán tìm kiếm Các cấu trúc dữ liệu và giải thuật hiệu quả cho bài toán tìm kiếm Các cấu trúc dữ liệu và giải thuật hiệu quả cho bài toán tìm kiếm
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN THỊ THANH VÂN CÁC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT HIỆU QUẢ CHO BÀI TỐN TÌM KIẾM Chun ngành: CƠNG NGHỆ THƠNG TIN Mã đề tài: CNTTVINH13B-10 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 THỊ THANH HUYỀN Hà Nội – Năm 2015 LỜI CAM ĐOAN Luận văn thạc sỹ em nghiên cứu thực dƣới hƣớng dẫn Cơ giáo TS Nguyễn Thị Thanh Huyền Với mục đích học tập, nghiên cứu để nâng cao kiến thức trình độ chun mơn nên em làm luận văn cách nghiêm túc hoàn toàn trung thực Để hoàn thành luận văn này, tài liệu tham khảo liệt kê, em cam đoan không chép tồn văn cơng trình thiết kế tốt nghiệp ngƣời khác Hà nội, tháng năm 2015 Học viên Nguyễn Thị Thanh Vân LỜI CẢM ƠN Đầu tiên, em xin gửi lời cảm ơn đến thầy, cô giáo Viện Công nghệ Thông tin Truyền thông tận tình dạy dỗ, dìu dắt chúng em suốt trình học tập Viện Đặc biệt, em xin bày tỏ lịng biết ơn sâu sắc tới giáo Tiến sĩ Nguyễn Thị Thanh Huyền, Viện Toán ứng dụng Tin học, Trƣờng Đại học Bách khoa Hà Nội tận tình hƣớng dẫn, đƣa góp ý, chỉnh sửa vô quý báu cho em trình làm luận văn Cuối cùng, xin chân thành cảm ơn gia đình, bạn bè giúp đỡ, chia sẻ với em trình học tập nghiên cứu làm luận văn DANH MỤC CÁC HÌNH VẼ Hình 1.1 Kết thực chƣơng trình với ví dụ 1.1………………….……… Hình 1.2 Kết thực chƣơng trình với ví dụ 1.2………………….……… Hình 1.3 Kết thực chƣơng trình với ví dụ 1.2………………….………10 Hình 1.4 Thứ tự ƣu tiên hàng cột cho bảng chữ nhật ……………….………11 Hình 1.5 Mảng truy xuất cho bảng chữ nhật ………………………….….… 13 Hình 1.6 Các bảng tam giác với nhiều dạng khác ……………… ….……14 Hình 1.7 Hiện thực liên tục bảng tam giác ……………………….…… 15 Hình 1.8 Mảng truy xuất cho bảng lồi lõm ………………………………… 16 Hình 1.9 Mảng truy xuất cho nhiều khóa bảng chuyển đổi ……………………18 Hình 1.10 Mơ tả hàm băm …………………….………………………………19 Hình 1.11 Hàm băm dạng bảng tra đƣợc tổ chức dƣới dạng danh sách kề 21 Hình 1.12 Kết thực chƣơng trình chèn khóa k vào bảng ………….… 30 Hình 1.13 Kết thực chƣơng trình trƣờng hợp khơng tìm thấy khóa k bảng ……………………………………………………………32 Hình 1.14 Kết thực chƣơng trình trƣờng hợp khơng tìm thấy khóa k bảng …………………………………………………… …… 33 Hình 2.1 Cây nhị phân đầy đủ …………………….……………………………36 Hình 2.2 Cây nhị phân khơng đầy đủ …………………………………… 36 Hình 2.3 Các nhị phân suy biến …………………………………… …… 37 Hình 2.4 Đánh số nút nhị phân đầy đủ biểu diễn mảng ….….38 Hình 2.5 Biểu diễn nhị phân cấu trúc liên kết ……………………….40 Hình 2.6 Cây nhị phân tìm kiếm …………………….……………………… 43 Hình 2.7 Kết thực chƣơng trình tìm kiếm nhị phân……… 46 Hình 2.8 Sau thêm nút vào nhị phân tìm kiếm ……….………… 48 Hình 2.9 Kết thực chƣơng trình chèn thêm nút nhị phân… 50 Hình 2.10 Sau xóa nút nhị phân tìm kiếm ………………… … 51 Hình 2.11 Xóa nút có nút …………………….………………….… 52 Hình 2.12 Xóa nút có hai …………………….……………………….… 52 Hình 2.13 Kết thực chƣơng trình xóa nút nhị phân.…… 57 Hình 2.14 Kết thực chƣơng trình xóa nút có nhị phân ……………………………………………………… ….58 Hình 2.15 Kết thực chƣơng trình xóa nút có hai trái phải nhị phân …………………………………………………… 58 Hình 2.16 Cây nhị phân cân AVL…………………………………… … 59 Hình 3.1 Cấu trúc kiểu thứ bậc …………………….……………………… ….64 Hình 3.2 Kiến trúc Lucene …………………….…………………….…… … 69 Hình 3.3 Kiến trúc file Index …………………….………………………… 70 Hình 3.4 Chỉ mục đảo ngƣợc ….………………….……………………… … 72 Hình 4.1 Ý nghĩa mảng next …………………….….………………….….76 Hình 4.2 Ý nghĩa mảng next vị trí m+1 ………….……………….……76 Hình 4.3 Kết thực thuật tốn KMP_trƣờng hợp tìm thấy chuỗi……….81 Hình 4.4 Kết thực thuật tốn KMPtrƣờng hợp khơng tìm thấy chuỗi…82 Hình 4.5 Giao diện sử dụng phần mềm ……………… ………………… 92 Hình 4.6 Kết tìm kiếm có giá trị “Anh” ……………… ……………… 98 Hình 4.7 Kết tìm kiếm có giá trị “Vân” ……………… ……………… 99 Hình 4.8 Kết tìm kiếm theo số điện thoại…………………………… 100 MỤC LỤC MỞ ĐẦU .1 CHƢƠNG TỔNG QUAN VỀ CÁC GIẢI THUẬT TÌM KIẾM CƠ BẢN 1.1.Tìm kiếm tuyến tính 1.2 Tìm kiếm nhị phân 1.3 Tìm kiếm thông tin bảng 10 1.3.1 Bảng chữ nhật 11 1.3.2 Các bảng tam giác 14 1.3.3 Các bảng lồi lõm .16 1.3.4 Các bảng chuyển đổi 17 1.4 Tìm kiếm theo phƣơng pháp băm 18 1.4.1 Bảng băm 19 1.4.2 Hàm băm 20 1.4.3 Bảng băm mở 23 1.4.4 Bảng băm đóng 25 1.5 Phƣơng pháp địa mở 27 1.6.Tìm kiếm xâu 34 CHƢƠNG CÂY NHỊ PHÂN TÌM KIẾM 36 2.1 Cây nhị phân 36 2.1.1 Khái niệm 36 2.1.2 Khái niệm nhị phân .36 2.1.3 Biểu diễn nhị phân 38 2.2 Cấu trúc liệu nhị phân tìm kiếm 43 2.2.1 Khái niệm nhị phân tìm kiếm 43 2.2.2 Các thao tác nhị phân tìm kiếm 43 2.3 Cây nhị phân cân AVL 59 2.3.1 Khái niệm cân 59 2.3.2 Cấu trúc liệu biểu diễn nhị phân cân 60 2.3.3 Các thao tác nhị phân cân 60 2.4 Cây nhị phân tìm kiếm tối ƣu 61 CHƢƠNG TÌM KIẾM INDEX TRONG CƠ SỞ DỮ LIỆU 63 3.1 Khái niệm index 63 3.2 Index SQL Server 63 3.2.1 Giới thiệu 63 3.2.2 Các kiểu index 65 3.2.3.Phƣơng pháp thiết kế index .67 3.2.4 Truy vấn với cấu trúc index .68 3.3 Index Lucene 69 3.3.1 Giới thiệu Lucene 69 3.3.2 Kiến trúc Lucene 69 3.3.3 Kiến trúc File Index 70 3.3.4 Chỉ mục đảo ngƣợc 72 CHƢƠNG TÌM KIẾM XÂU MẪU 73 4.1 Bài tốn đối sánh mẫu vấn đề tìm kiếm 73 4.1.1 Giới thiệu tổng quan toán đối sánh mẫu vấn đề tìm kiếm 73 4.1.2 Bài tốn đối sánh mẫu 74 4.1.3 So đơn mẫu 75 4.2 Thuật toán đối sánh mẫu KMP (Knuth Morris Pratt) 75 4.3 Thuật toán đối sánh mẫu BM (Boyer-Moore) 82 4.4 Thuật toán KMP mờ 85 4.4.1 Khái niệm tập mờ 85 4.4.2 Tiếp cận mờ cho tốn tìm kiếm 87 4.4.3 Mơ hình Otomat mờ so mẫu 87 4.4.4 Thuật toán KMP mờ 89 4.5 Ứng dụng thuật tốn tìm kiếm xâu 92 4.5.1 Cài đặt ứng dụng 93 4.5.2 Kết tìm kiếm 98 KẾT LUẬN .101 TÀI LIỆU THAM KHẢO .102 MỞ ĐẦU Lý chọn đề tài Máy tính ngày đƣợc sử dụng hầu hết tất lĩnh vực góp phần quan trọng vào việc thúc đẩy phát triển kinh tế, xã hội, khoa học kỹ thuật, … Máy tính đời nhằm phục vụ cho mục đích định ngƣời Từ thu thập thông tin đến xử lý thông tin, đặc biệt giúp ngƣời việc tìm kiếm thơng tin với khối lƣợng lớn, độ xác cao thời gian nhanh Ngày nay, kích thƣớc hệ thống thông tin ngày lớn, nhu cầu tìm kiếm ngƣời dùng địi hỏi ngày cao phức tạp Ngƣời dùng mong muốn nhận đƣợc kết trả thời gian nhanh, đáp ứng linh hoạt, đa dạng yêu cầu tìm kiếm Vậy nghiên cứu ứng dụng Các cấu trúc liệu giải thuật hiệu cho tốn tìm kiếm cần thiết Mục đích nghiên cứu - Nghiên cứu cấu trúc liệu lƣu trữ hiệu cho việc tìm kiếm - Tìm hiểu tốn tìm kiếm, nghiên cứu, cài đặt số thuật tốn tìm kiếm Phạm vi nghiên cứu Luận văn tập trung nghiên cứu kỹ thuật cho tốn tìm kiếm, cấu trúc biểu diễn, thao tác nhị phân tìm kiếm, tìm kiếm theo phƣơng pháp băm, kỹ thuật index sở liệu, tìm kiếm xâu Nội dung luận văn gồm có phần mở đầu, chƣơng, phần kết luận, tài liệu tham khảo phụ lục Chƣơng Tổng quan giải thuật tìm kiếm Chƣơng trình bày: Tìm kiếm tuyến tính, Tìm kiếm nhị phân, Tìm kiếm thơng tin bảng, Tìm kiếm theo phƣơng pháp băm, Phƣơng pháp địa mở, Tìm kiếm xâu Chƣơng Cây nhị phân tìm kiếm Chƣơng trình bày: khái niệm cây, nhị phân tìm kiếm, cấu trúc liệu biểu diễn nhị phân tìm kiếm, thao tác nhị phân tìm kiếm, khái niệm cân AVL, cấu trúc liệu biểu diễn nhị phân cân bằng, thao tác nhị phân cân nhị phân tìm kiếm tối ƣu Chƣơng Tìm kiếm index sở liệu Chƣơng trình bày: khái niệm index, phƣơng pháp thiết kế index truy vấn với cấu trúc index Giới thiệu Index Lucene, kiến trúc Lucene, kiến trúc File Index mục đảo ngƣợc Chƣơng Tìm kiếm xâu mẫu Chƣơng trình bày: tổng quan vấn đề tìm kiếm, tốn đối sánh mẫu vấn đề tìm kiếm - so đơn mẫu, số thuật tốn đối sánh mẫu điển hình: KMP (Knuth Morris Pratt), BM (Boyer-Moore), khái niệm tập mờ, tiếp cận mờ cho tốn tìm kiếm, mơ hình Otomat mờ so mẫu thuật toán KMP mờ Luận văn cài đặt thuật toán KMP thử nghiệm xây dựng ứng dụng tìm kiếm danh bạ điện thoại - Duyệt S, lần kí tự, S1 Giả sử trạng thái otomat q đọc đƣợc kí tự Sj, trạng thái (ứng với vị trí j S) q‟ = δ(q, Sj) (δ hàm chuyển otomat) - Tại vị trí j S, trạng thái otomat q, có nghĩa khúc đầu dài xuất S P có độ dài q Nếu q = m, báo hiệu lần xuất mẫu, vị trí j – m + Mơ hình otomat mờ cần đƣợc xây dựng cách thích hợp để đáp ứng đƣợc yêu cầu sánh mẫu nhƣ Định nghĩa 4.3 Otomat mờ so mẫu A(P) = (A, Q, q0, δ, F), đó: + Bảng chữ vào A = Ap {#}, + Tập trạng thái Q = {0, 1, …, m} + Trạng thái khởi đầu q0 = 0, + Trạng thái kết thúc F = m, + Hàm chuyển δ: Q × A Q δ(q, a) = TFuzz(q, a) Cách xác định hàm TFuzz: Giả sử độ mờ xuất mẫu P vị trí j S λ Khi độ mờ λ’ vị trí j+1 xác định λ’ = TFuzz(λ, Sj+1), với TFuzz xác định sau: + TFuzz(0,x) = { + TFuzz(i,#) = 0, = 0…m 88 + TFuzz(i,x) = { Việc xác định j dựa vào bảng next (nhƣ thuật tốn KMP) vịng lặp 4.4.4 Thuật toán KMP mờ Khi cài đặt thuật toán cần lƣu ý lựa chọn cấu trúc liệu phù hợp để truy cập nhanh chóng bảng TFuzz Gọi A[0 k] mảng lƣu trữ giữ bảng chữ A otomat, k số kí tự phân biệt mẫu P Mảng đƣợc theo chiều tăng kí tự A[k] = ‟#‟ Để thuận tiện truy nhập đến chữ A, sử dụng mảng index xác định vị trí chữ bảng [] Index[c] = { [ ] [ ] [ ] TFuzz mảng [0 m, k], TFuzz[i,j] độ mờ độ mờ i gặp kí tự x có index[x] = j Chi tiết thuật tốn tạo bảng TFuzz tìm kiếm dựa vào bảng TFuzz nhƣ sau: Thuật toán 4.5 Tạo lập TFuzz Procedure initTFuzz(); Begin For i := to m TFuzz[i,k] := 0; For i := to k TFuzz[0,j] := 0; TFuzz[0, index[P[1]] := 1; For i := to m 89 For t := to k – Begin If i = m then j := next[i + 1] Else j := i + 1; While (j > 0) and (P[j] ≠ A[t]) j := next[j]; TFuzz[i, index[A[t]] := j; End; End; Thuật tốn 4.6 Tìm kiếm mẫu dựa vào bảng TFuzz Procedure FKMP(); Begin j := 1; counter := 0; fuz[0] := 0; For j := to n Begin Fuz[j] := TFuzz[fuz[j – ], index[S[j]]; If fuz[j] = m then Begin counter := counter + 1; Ghi nhận vị trí j – m + 1; End; End; {for} Ghi nhận counter; End; Độ phức tạp thuật toán Xét sau tiền xử lý mẫu độ phức tạp thuật tốn KMP mờ O(n) 90 Ví dụ 4.2 Với mẫu P = aababaab, A = {a, b, #}, Ap= {a, b}, bảng TFuzz đƣợc tính tốn dựa mảng next cho kết nhƣ sau: Q A A b # 0 0 3 0 5 0 0 8 0 Cho xâu đích S = aabaababaababaabab Gọi j trỏ xâu S, độ mờ xuất mẫu P vị trí j S Q trình so mẫu P dịng liệu S diễn nhƣ sau: J 10 11 12 13 14 15 16 17 18 S A A B A A B A B a A b a b A A b a b 4 8 5 Ghi nhận ghi nhận 11-8+1=4 16-8+1=9 Nhƣ vậy, mẫu P xuất xâu S hai lần, bắt đầu vị trí 91 So sánh đánh giá thuật tốn tìm hiểu: Vậy so với thuật tốn KMP thuật tốn KMP mờ tốt hiệu thuật tốn KMP cải tiến từ thuật toán KMP kết hợp với otomat mờ nên sau tính bảng next, tính tốn bảng TFuzz khơng cịn hình ảnh dịch chuyển mẫu Xét sau tiền xử lý mẫu độ phức tạp thuật toán KMP O(m+n) thuật toán KMP mờ O(n) 4.5 Ứng dụng thuật tốn tìm kiếm xâu Trong sống nay, việc lƣu giữ thông tin mối quan hệ cần thiết Với phát triển lớn mạnh công nghệ di động, thơng tin đƣợc lƣu trữ thiết bị nhƣ điện thoại, máy tính bảng nhƣ máy tính Khi lƣợng thơng tin lƣu trữ lớn, nhớ cách xác thơng tin tìm kiếm Vì vậy, ngày việc tìm kiếm thơng tin gần nhu cầu khơng thể thiếu Hiện nay, có số cơng cụ tìm kiếm hữu ích sống nhƣ : Google, Yahoo Search, Các phần mềm search danh bạ điện thoại,… Trong nội dung luận văn này, xây dựng phần mềm sử dụng thuật tốn tìm kiếm KMP tốn mơ tìm kiếm danh bạ điện thoại 92 4.5.1 Cài đặt ứng dụng 4.5.1.1 Giao diện sử dụng Hình 4.5 Giao diện sử dụng phần mềm - Danh bạ đƣợc hiển thị khởi động chƣơng trình - Tƣơng ứng với liên lạc bao gồm thông tin: Tên, Địa email, Số điện thoại - Thống kê tổng số lƣợng liên lạc có danh bạ - Chức tìm kiếm thơng tin: Khi nhập nội dung tìm kiếm vào search kết tìm kiếm hiển thị Ngồi vùng thơng tin chi tiết có hiển thị kết tìm kiếm có kết đƣợc tìm thấy - Ở phần nội dung tìm kiếm: nhập tìm kiếm theo Tên, theo địa email tìm kiếm theo số điện thoại 93 4.5.1.2 Cài đặt chương trình - Ứng dụng đƣợc phát triển ngôn ngữ C# sử dụng tool development Visual studio 2012 - Các lớp đƣợc cài đặt chƣơng trình : + Cns.cs: Lớp Constant, khai báo giá trị sử dụng source code + User.cs: Lớp chứa thông tin liên lạc: Tên, Email, Phone + KMP.cs: Lớp cài đặt thuật tốn tìm kiếm Knuth Morris Pratt + frmMain.cs: Lớp cài đặt thao tác form gọi đến xử lý tìm kiếm lớp KMP - Mã source code lớp xử lý chƣơng trình ứng dụng + KMP.cs: /// /// Xử lý tìm kiếm KMP (Hàm public ) /// /// Nội dung chuỗi tìm kiếm /// Chuỗi nguồn để tìm kiếm /// Mảng trả vị trí tìm thấy chuỗi nguồn public static ArrayList Knuth_Morris_Pratt(string pattern, string targetString) { return Knuth_Morris_Pratt_Detail(pattern, targetString); } /// /// Xử lý tìm kiếm KMP ( Hàm private class ) /// /// Nội dung chuỗi tìm kiếm /// Chuỗi nguồn để tìm kiếm /// Mảng trả vị trí tìm thấy chuỗi nguồn 94 private static ArrayList Knuth_Morris_Pratt_Detail(string pattern, string targetString) { ArrayList result; char[] charArray; char[] patternArray; charArray = targetString.ToLower().ToCharArray(); patternArray = pattern.ToLower().ToCharArray(); result = new ArrayList(); // Gán giá trị index ký tự chuỗi search int k = 0; for (int i = 0; i < charArray.Length; i++) { // Trƣờng hợp ký tự chuỗi search trùng với ký tự nguồn if (charArray[i] == patternArray[k]) { // Tăng giá trị cho biến index lên k++; } else { // Reset lại giá trị cho biến k k = 0; } // Kết thúc trình tìm kiếm Nếu k = độ dài chuỗi tìm kiếm if (k == patternArray.Length) { 95 // Add giá trị index vào mảng kết result.Add(i - (patternArray.Length - 1)); // Set lại giá trị cho biến index k = 0; } } return result; } + frmMain.cs : /// /// Searching /// /// /// private void textBox1_TextChanged(object sender, EventArgs e) { ExactlySearch(); searchKey = textBox1.Text; } /// /// Xử lý tìm kiếm /// private void ExactlySearch() { ArrayList arrResult; dtvContact = _userDataTable.DefaultView; dtvContact.Sort = Cns.Sort_Option; 96 dgrContactInfo.DataSource = dtvContact.ToTable(); label1.Text = string.Empty; _userDataTableSearch = new DataTable(); _userDataTableSearch.Columns.Add(Cns.Column_Name); string strSearchkey = string.Empty; int intCountResult = 0; strSearchkey += textBox1.Text; try { if (!string.IsNullOrEmpty(strSearchkey)) { for (int i = 1; i < dgrContactInfo.RowCount; i++) { string strTargetSearch = dgrContactInfo.Rows[i 1].Cells[Cns.Column_Name].Value.ToString(); arrResult = KMP.Knuth_Morris_Pratt(strSearchkey, strTargetSearch); if (arrResult.Count > 0) { _userDataTableSearch.Rows.Add(dgrContactInfo.Rows[i 1].Cells[Cns.Column_Name].Value.ToString()); intCountResult++; } } label1.Text = Cns.Message_SearchResult.Replace("{1}", intCountResult.ToString()).Replace("{2}", dgrContactInfo.Rows.Count.ToString()); 97 dgrContactInfo.DataSource = _userDataTableSearch; } } catch (Exception ex) { MessageBox.Show(Cns.Message_PopUp, ex.Message); } } 4.5.2 Kết tìm kiếm - Trƣờng hợp tìm kiếm theo tên: Nhập giá trị tìm kiếm “Anh” Kết tìm kiếm hiển thị nhƣ Hình 4.6 Hình 4.6 Kết tìm kiếm có giá trị “Anh” 98 - Trƣờng hợp tìm kiếm theo tên email : “Vân” Kết tìm kiếm hiển thị nhƣ Hình 4.7 Hình 4.7 Kết tìm kiếm có giá trị “Vân” 99 - Trƣờng hợp tìm kiếm theo số điện thoại : “0912” Kết tìm kiếm hiển thị nhƣ Hình 4.8 Hình 4.8 Kết tìm kiếm theo số điện thoại 100 KẾT LUẬN Kết đạt đƣợc luận văn Nghiên cứu cấu trúc liệu giải thuật cho tốn tìm kiếm cài đặt chƣơng trình thử nghiệm bao gồm: Các giải thuật tìm kiếm bản: tìm kiếm tuyến tính, tìm kiếm nhị phân, tìm kiếm thơng tin bảng, tìm kiếm theo phƣơng pháp băm, tìm kiếm xâu Khái niệm, cấu trúc liệu giải thuật nhị phân tìm kiếm, cân AVL, nhị phân tìm kiếm tối ƣu Khái niệm bảng băm, hàm băm, bảng băm mở, bảng băm đóng Kỹ thuật index sở liệu: khái niệm index, kỹ thuật index SQL Server, Index Lucence Các thuật tốn đối sánh mẫu xác KMP (Knuth Morris Pratt) BM (Boyer-Moore), thuật toán KMP mờ Xây dựng phần mềm phát triển ngôn ngữ C# sử dụng tool development Visual studio 2012 sử dụng thuật tốn tìm kiếm KMP cho tốn tìm kiếm danh bạ điện thoại Hƣớng nghiên cứu Tìm hiểu xây dựng chƣơng trình ứng dụng thực tế có sử dụng thuật tốn tìm kiếm hiệu Do khả thân có hạn nên luận văn cịn nhiều thiếu sót, em mong nhận đƣợc góp ý, dẫn thêm thầy cô, bạn bè đồng nghiệp để em xây dựng đƣợc ứng dụng hồn thiện Một lần nữa, em xin chân thành cảm ơn cô giáo Tiến sĩ Nguyễn Thị Thanh Huyền, thầy cô giáo Viện tạo điều kiện thuận lợi giúp em hồn thành luận văn 101 TÀI LIỆU THAM KHẢO [1] Nguyễn Thị Thanh Huyền, Đối sánh mẫu theo tiếp cận otomat mờ ứng dụng, Luận án tiến sĩ, Viện Toán ứng dụng Tin học, trƣờng Đại học Bách khoa Hà Nội, 2007 [2] Đỗ Xuân Lôi, Cấu trúc liệu giải thuật, NXB ĐHQGHN, 2008 [3] PGS.TS Nguyễn Đức Nghĩa, Cấu trúc giải thuật, NXB Bách Khoa Hà Nội, 2008 [4] Hồ Thuần, Hồ Cẩm Hà, Trần Thiên Thanh, Cấu trúc liệu, Phân tích thuật tốn phát triển phần mềm, NXBGD, 2008 [5] Cơ index SQL Server, http://www.bigdata.com.vn/2013/07/co-ban-ve-index-trong-sql-server.html [6] Chƣơng 12- bảng truy xuất thông tin – Giáo trình cấu trúc liệu giải thuật http://m.123doc.org/document/629869-bang-va-truy-xuat-thong-tin.htm [7].Lucenne.Net document, http://incubator.apache.org/lucene.net/docs/2.1/Lucene.Net.Documents.html [8] Lucene.Net overview, http://incubator.apache.org/lucene.net/ [9] Shou-chuan-Yang, A search algorithm and data structure for an efficient information system, International conference on Computational linguistics coling, 1969 102 ... End; End; 42 2.2 Cấu trúc liệu nhị phân tìm kiếm Cây nhị phân tìm kiếm cấu trúc liệu thuận lợi cho tốn tìm kiếm Cấu trúc liệu nhị phân tìm kiếm đƣợc sử dụng để xây dựng cấu trúc liệu trừu tƣợng... liệu giải thuật hiệu cho tốn tìm kiếm cần thiết Mục đích nghiên cứu - Nghiên cứu cấu trúc liệu lƣu trữ hiệu cho việc tìm kiếm - Tìm hiểu tốn tìm kiếm, nghiên cứu, cài đặt số thuật tốn tìm kiếm Phạm... mở, Tìm kiếm xâu Chƣơng Cây nhị phân tìm kiếm Chƣơng trình bày: khái niệm cây, nhị phân tìm kiếm, cấu trúc liệu biểu diễn nhị phân tìm kiếm, thao tác nhị phân tìm kiếm, khái niệm cân AVL, cấu trúc