Tiểu luận phân tích và đánh giá thuật toán thuật toán tìm kiếm

11 329 5
Tiểu luận phân tích và đánh giá thuật toán thuật toán tìm kiếm

Đ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

KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN HỌC PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN Đề 27: Thuật toán tìm kiếm Một xâu gọi xâu đối xứng đem đảo ngược xâu ta lại nhận xâu ban đầu Cho xâu S, tìm số kí tự cần thêm vào S để S trở thành xâu đối xứng.Giả thiết thao tác chèn kí tự tốn thời gian không đáng kể Giáo viên hướng dẫn: PGS.TS Đào Thanh Tĩnh Học viên thực hiện: Hồ Trung Dũng Lớp: Hệ thống thông tin K25B Hà nội, 5/2014 PHẦN 1: THUẬT TOÁN TÌM KIẾM I Bài toán tìm kiếm Tìm kiếm thao tác móng cho nhiều tác vụ tính toán Tìm kiếm nghĩa tìm hay nhiều mẩu thông tin lưu trữ Thông thường, thông tin chia thành mẩu tin (record), mẩu tin có khóa (key) dùng cho việc tìm kiếm Ta có khoá cho trước giống khoá mẩu tin mà ta cần tìm Mỗi mẩu tin tìm thấy chứa toàn thông tin để cung cấp cho trình xử lý Việc tìm kiếm áp dụng đa dạng rộng rãi Một Ngân hàng nắm giữ tất thông tin nhiều tài khoản khách hàng cần tìm kiếm để kiểm tra biến động Một hãng Bảo hiểm hay hệ thống trợ giúp bán vé xe, vé máy bay….Việc tìm kiếm thông tin để đáp ứng việc xắp đặt ghế yêu cầu tương tự thực cần thiết Bài toán tìm kiếm thông thường xảy hai tình huống: + Dữ liệu coi ngẫu nhiên + Dữ liệu thỏa mãn số ràng buộc định II Tìm kiếm tìm kiếm nhị phân: Tìm kiếm tuần tự: a Phạm vi áp dụng: Thường sử dụng cho liệu không săp xếp, ràng buộc phần tử b Ý tưởng: Duyệt phần tử từ phần tử thứ đến phần tử thứ N Nếu xuất phần tử thỏa mãn yêu cầu ghi nhận lại vị trí phần tử Thông tin trả dựa theo tình trạng tìm thấy Đây phương pháp tìm kiếm đơn giản dễ thực thông tin lưu trữ kiểu mảng 2 c Thuật toán: • Input: Cho dãy A[0 N-1], x giá trị cần tìm kiếm • Output: Thông tin vị trí X for(i=0; i< N;i++) if(a[i]==x) break; return i; Từ thuật toán ta thấy trường hợp xấu không tìm kiếm thành công thuật toán sử dụng N+ phép so sánh với N số phần tử mảng A độ phức tạp thuật toán O(N) Tìm kiếm nhị phân: Chúng ta xét phương pháp tìm kiếm tuần tự, cách đơn giản trình cài đặt Song , hạn chế phương pháp thời gian tìm kiếm lâu trường hợp tập hợp tổng số mẩu tin lớn Để khắc phục hạn chế này, ta có phương pháp tìm kiếm nhị phân Nếu tập hợp mẩu tin lớn tổng số thời gian tìm kiếm rút ngắn cách dùng thủ tục tìm kiếm dựa ứng dụng sơ đồ “chia - để trị” a b - Phạm vi áp dụng: Tìm kiếm liệu xếp Ý tưởng: Thay tìm kiếm ta sé tìm kiếm phần tử theo vị trí dãy Nếu số phải bé số trái kết thúc Nếu giá trị tìm kiếm trùng với giá trị kết thúc Nếu bé tìm kiếm từ đầu đến phần tử trước phần tử hiển Nếu lớn phần tử tìm kiếm từ phần tử sau phần tử đến phần tử cuối dãy c Thuật toán: Input: A[0 N-1], x cần tìm kiếm Output: thông tin vị trí "int" BinarySearch (Array a, int x) { int left = 0, right, mid; right = a.n - 1; 3 while (left x) right = mid - 1; else left = mid + 1; }; if (left == 0) printf ("Ko tim thay phan tu %d \n", x); return left; - Dựa vào thuật toán ta thấy : Số phép so sánh thuật toán 2* log(n) Số phép gán thuật toán 2* log(n) Độ phức tạp thuật toán O(log(n)) III Một số cách tiếp cận khác: Tìm kiếm dựa vào quy hoạch động Phương pháp quy hoạch động nguyên lý tối ưu nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ 20 Phương pháp áp dụng để giải hàng loạt toán thực tế trình kỹ thuật cộng nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế…Nguyên lý tối ưu R.Bellmam phát biểu sau: “tối ưu bước thứ n cách tối ưu tất đường tiến đến bước n-1 chọn đường có tổng chi phí từ bước đến bước n-1 từ n-1 đến n thấp (nhiều nhất)” Nói chung, ta giải toán với cấu trúc tối ưu quy trình ba bước: a Chia toán thành toán nhỏ b Giải toán cách tối ưu cách sử dụng đệ quy quy trình ba bước c Sử dụng kết tối ưu để xây dựng lời giải tối ưu cho toán ban đầu Phương pháp quy hoạch động dùng để giải toán tối ưu có chất đệ quy, tức việc tìm phương án tối ưu cho toán đưa tìm phương án tối ưu số hữu hạn toán Đối với nhiều thuật toán đệ quy tìm hiểu, nguyên lý chia để trị (divide and conquer) thường đóng vai trò chủ đạo việc thiết kế thuật toán Để giải toán lớn, ta chia làm nhiều toán dạng với để giải độc lập Quy hoạch động thường dùng hai cách tiếp cận: 4 top-down (Từ xuống): Bài toán chia thành toán con, • toán giải lời giải ghi nhớ để phòng trường hợp cần dùng lại chúng Đây đệ quy lưu trữ kết hợp với bottom-up (Từ lên): Tất toán cần đến giải • trước, sau dùng để xây dựng lời giải cho toán lớn Cách tiếp cận tốt không gian nhớ dùng cho ngăn xếp số lời gọi hàm Tuy nhiên, việc xác định tất toán cần thiết cho việc giải toán cho trước không trực giác Một số toán ứng dụng phương pháp quy hoạch động như: + Bài toán tính số tổ hợp + Bài toán balo + Bài toán tìm đường người giao hàng Tìm kiếm dựa vào đệ quy Một đối tượng đệ qui bao gồm phận hay nói cách khác định nghĩa qua nó.Lời giải T toán biểu diễn qua lời giải T’ có dạng giống T gọi lời giải đệ qui.Giải thuật tương ứng với lời giải đệ qui giải thuật đệ qui Thủ tục đệ qui thủ tục (bao gồm thủ tục (Procedure) hàm (Function)) thủ tục mà thân lại chứa lời gọi đến Tính chất thủ tục đệ qui a Trong thủ tục có lời gọi b Có trường hợp đặc biệt để kết thúc việc gọi gọi trường hợp suy biến c Mỗi lần gọi lại dần đến trường hợp suy biến Người ta thường ứng dụng đệ qui vào giải nhiền toán, vậy: 5 - Có toán sử dụng đệ quy có hiệu - Khi sử dụng đệ quy, nhiều thuật toán thường gây tượng tràn ô nhớ - Có thể thay giải thuật đệ quy giải thuật không đệ quy Việc làm gọi khử đệ quy Đệ quy ứng dụng nhiều toán tìm kiếm Tìm kiếm không gian trạng thái trình đệ quy Để tìm đường từ trạng thái hành đến đích, bạn chuyển đến trạng thái thực phép đệ quy Nếu trạng thái không dẫn đến đích, bạn thử trạng thái anh em Phép đệ quy chia toán lớn khó (tìm kiếm khắp không gian) thành toán nhỏ đơn giản (phát sinh trạng thái) áp dụng chiến lược đệ quy cho toán nhỏ Quá trình tiếp tục phát đích hết không gian Function Depthsearch; Begin If open rỗng then trả lời (thất bại); Trạng thái hành := phần tử open; If trạng thái hành trạng thái đích then trả lời (thành công) Else begin Open := open - phần tử open; Closed := closed + trạng thái hành; For trạng thái trạng thái hành If chưa có closed hay open then bổ sung vào đầu danh sách open end; Tìm kiếm sâu; 6 End; PHẦN 2: ỨNG DỤNG THUẬT TOÁN TÌM KIẾM CHO XÂU S, HÃY TÌM SỐ KÝ TỰ ÍT NHẤT CẦN THÊM VÀO S ĐỂ S TRỞ THÀNH XÂU ĐỐI XỨNG I Đặt vấn đề cách giải toán 7 Một xâu gọi đối xứng không ký tự ta đọc từ trái sang phải hay từ phải sang trái kết giống Sử dụng quy đệ quy Gọi L(i,j) số kí tự cần thêm vào xâu S[i j] S để xâu trở thành đối xứng Đáp số toán L(1,n) với n số kí tự S Ta có công thức sau để tính L(i,j): • L(i,i)=0 • L(i,j)=L(i+1,j–1) S[i]=S[j] • L(i,j)=max(L(i+1,j), L(i,j–1)) S[i]≠S[j] Thật vây: Xét L(i,i)=0 với i chạy từ -> Len(chuỗi) (vì chuỗi kí tự đc xem chuỗi đối xứng nên ko cần thêm kí tự hết) Công thức truy hồi tìm L(i,j): + Nếu kí tự thứ i = kí tự thứ j số kí tự cần thêm vào chuỗi từ i đến j = số kí tự cần thêm vào chuỗi từ i+1 đến j-1 Ta có: L(i,j)=L(i+1,j-1) + Nếu kí tự khác ta có thể: - Thêm kí tự i vào bên phải kí tự j, ta có kí tự thứ i = kí tự thứ j+1, đưa trường hợp đầu, ta có: L(i,j) = L(i+1,j)+1 ( +1 vào có kí tự vừa thêm vào) - Thêm kí tự j vào bên trái kí tự i, ta có kí tự thứ i - = kí tự thứ j, đưa trường hợp đầu, ta có: L(i,j)=L(i,j-1)+1 ( +1 vào có kí tự vừa thêm vào) Vậy ta có công thức truy hồi trường hợp kí tự khác là: L(i,j)=max(L(i+1,j), L(i,j-1)) + (với hàm max(a,b) trả giá trị lớn giá trị a,b) Với cách giải thuật sử dụng đệ quy có nhớ chi phí la O() Sử dụng quy hoạch động Một cách tiếp cận khác toán sử dụng quy hoạch động để thực Thông qua việc tìm xâu chung dài Nếu ta gọi P xâu đảo S 8 T xâu chung dài S P Khi ký tự S không thuộc T ký tự cần thêm vào để S trở thành xâu đối xứng Vậy số ký tự cần thêm vào n-k với k đọ dài T Ví dụ: Cho xâu S:edbabcd - >Xâu đảo S : dcbabde Xâu chung xài nhất: T: dbabd Vậy e c ký tự cần thêm vào để S thành xâu đối xứng Với việc sử dụng quy hoạch động để giải toán, phải giải toántìm xâu chung dài Khi toán đưa giải vấn đề: Cho hai dãy X = Y = Cần tìm dãy chung dài hai dãy X Y.Thuật toán trực tiếp để giải toán đặt là: Duy ệt tất dãy dãy X kiểm tra xem dãy có dãy dãy Y, giữ lại dãy dài Mỗi dãy X tương ứng với dãy số tập k phần tử tập số {1, 2, …, m}, có tất 2m dãy X.Như thuật toán trực tiếp đòi hỏi thời gian hàm mũ ứng dụng thực tế Ta xét áp dụng quy hoạch động để xây dựng thuật toán giải toán Phân Với ≤i≤m ≤j≤n xét toán C(i,j); tính C[i,j] độ dài dãy chung dài hai dãy Xi= Yi= Như ta phân toán cần giải thành (m+1)(n+1) toán Bản thân toán xuất phát toán có kích thước lớn C(m,n).Dễ dàng đánh giá thời gian tính thuật toán O(mn) 9 II Giải thuật Input : xâu S (doixung.in) Output : Số ký tự thêm vào S để S đối xứng (doixung.out) Ta có thuật toán sau: B1 : Ta gọi P dãy đảo ngược dãy S B2: Áp dụng Quy hoạch động,tìm dãy chung S P (ta g ọi T) B3 : Đặt n = length(s); m= length(t); đáp án toán n-m var f:text; s1,s2:string; n,m,i,j:integer; d:array[0 1000,0 1000] of integer; function max(a,b:integer):integer; begin if a>b then exit(a); exit(b); end; begin assign(f,'doixung.in'); reset(f); readln(f,s1); close(f); s2:=''; for i:=length(s1) downto (* làm chuỗi đảo ngược chuỗi cho ban đầu*) s2:=s2+s1[i]; n:=length(s1); m:=length(s2); for i:=1 to n d[i,0]:=0; for j:=1 to m d[0,j]:=0; for i:=1 to n for j:=1 to n if s1[i]=s2[j] then d[i,j]:=d[i,j-1]+1 else d[i,j]:=max(d[i,j-1],d[i-1,j]); assign(f,’doixung.out'); rewrite(f); writeln(f,n-d[n,m]); 10 10 close(f); end III Đánh giá độ phức tạp kiểm thử Đánh giá độ phức tạp thuật toán Phương pháp tốt để giải toán vấn tìm xâu chung dài xâu S đưa vào xâu đảo Việc tím kiếm xâu chung dài thực quy hoạch động Khi bảng gồm trường xây dựng, có trường dùng để lưu trữ Sự phức tạp toán cần O(N) không gian lưu trữ O() thời gian Kiểm thử Thực kiểm thử số tình chạy thực tế cho kết sau: Case # N D A Loại liệu -1 62 62 61 Each allowed character exactly once 4960 62 4801 80 repetitions of case #1 5000 '9'^5000 5000 2500'A'^2500 ++ 'z'^2500 5000 'PC'^2500 100 48 79 Random 'FFT' 5000 919 Random with only characters 'O' and 'K' 4999 10 2628 Random with only digits Với: N chiều dài chuỗi đưa vào D số phần từ khác chuỗi A kết thu 11 11 ...PHẦN 1: THUẬT TOÁN TÌM KIẾM I Bài toán tìm kiếm Tìm kiếm thao tác móng cho nhiều tác vụ tính toán Tìm kiếm nghĩa tìm hay nhiều mẩu thông tin lưu trữ Thông thường,... left; - Dựa vào thuật toán ta thấy : Số phép so sánh thuật toán 2* log(n) Số phép gán thuật toán 2* log(n) Độ phức tạp thuật toán O(log(n)) III Một số cách tiếp cận khác: Tìm kiếm dựa vào quy hoạch... break; return i; Từ thuật toán ta thấy trường hợp xấu không tìm kiếm thành công thuật toán sử dụng N+ phép so sánh với N số phần tử mảng A độ phức tạp thuật toán O(N) Tìm kiếm nhị phân: Chúng ta xét

Ngày đăng: 03/10/2017, 00:45

Từ khóa liên quan

Mục lục

  • KHOA CÔNG NGHỆ THÔNG TIN

  • BÀI TẬP LỚN MÔN HỌC

  • PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN

  • Giáo viên hướng dẫn: PGS.TS. Đào Thanh Tĩnh

  • Học viên thực hiện: Hồ Trung Dũng

  • Lớp: Hệ thống thông tin K25B

  • Hà nội, 5/2014

Tài liệu cùng người dùng

Tài liệu liên quan