1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN Một số bài toán quy hoạch động

27 778 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 27
Dung lượng 445,5 KB

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

Nội dung

Một trong những cách thực hiện việc tìm kiếm này là xây dựng một cây nhị phân tìm kiếm với n từ tiếng Anh như là các khóa và n từ tiếng Việt tương ứng là dữ liệu...  Có rất nhiều cách

Trang 1

MỘT SỐ BÀI

TOÁN QUY HOẠCH

Trang 2

I BÀI TOÁN “CÂY TÌM

KiẾM NHỊ PHÂN TỐI ƯU”

1. Đặt vấn đề:

Giả sử cần phải dịch một đoạn văn bản gồm n từ

từ tiếng Anh sang tiếng Việt Với mỗi từ tiếng Anh trong văn bản, ta cần tìm một từ tiếng Việt tương ứng

Một trong những cách thực hiện việc tìm kiếm

này là xây dựng một cây nhị phân tìm kiếm với n từ tiếng Anh như là các khóa và n từ tiếng Việt tương ứng là dữ liệu.

Trang 3

 Có rất nhiều cách sắp xếp các khóa trên cây để tạo nên một cấu trúc cây và với mỗi cây sẽ cần một chi phí khác nhau khi tìm kiếm các khóa trên cây.

 Chi phí tìm kiếm càng cao khi nút cần tìm càng nằm

xa gốc (cây càng nhiều nút, độ sâu nút cần tìm càng lớn) Đặc biệt, khi từ khóa cần tìm không có trong cây, chi phí tìm kiếm sẽ rất lớn

 ? Bằng cách nào để có thể tổ chức một cây tìm kiếm nhị phân mà chi phí tìm kiếm trên cây là thấp nhất

Trang 4

Ví dụ: Xét hai cây nhị phân

Trang 5

2 Phát biểu bài toán:

 Cho một tập K = {k1, k2, …, kn} là n khóa khác nhau đã được sắp, trong đó k1<k2<…<kn, và ta cần xây dựng một cây nhị phân tìm kiếm từ các khóa này sao cho chi phí tìm kiếm là thấp nhất

Trang 6

Các thuật ngữ, từ khóa, khái niệm sử dụng trong

giải thuật.

 Mỗi khóa k i có xác suất tìm kiếm là p i

 Có những trường hợp từ một khóa ki nào đó không có trong cây, ta sử dụng các khóa giả d i để đón nhận các giá trị này, với cây có n khóa k 1 , k 2 , …, k n thì sẽ có n+1 khóa giả d 0 , d 1 , …, d n Trong đó:

 d 0 tương ứng cho tất cả các giá trị nhỏ hơn k 1 ,

 d n tương ứng cho tất cả các giá trị lớn hơn k n ,

 và với i = 1, …, n-1 thì khóa giả d i tương ứng cho giá trị nằm giữa k i và k i+1

 Với mỗi khóa giả d i , chúng ta có một xác suất tìm kiếm

n i

Trang 7

 Công thức tính chi phí cho một cây tìm kiếm nhị

phân như sau:

n i

i i

T i

i

T k p depth d q depth

seach

E

) 1 ) ( (

).

1 ) ( (

T]

in cost [

n i

i i T i

( 1

Trang 8

Trong ví dụ đã cho ở cây (a), chúng ta có thể tính chi phí tìm kiếm tất cả các nút như sau:

Node depth probability contribution

Trang 9

 Với ví dụ đã cho, ta tính được cây (a) có chi phí tìm kiếm là 2.80, cây (b) có chi phí tìm

kiếm là 2.75.

 Ta sẽ xây dựng một giải thuật để xây dựng

một cây nhị phân tìm kiếm tối ưu với chi phí tìm kiếm là thấp nhất từ một tập n khóa cho trước, bằng cách xây dựng dần các cây con từ khóa ki đến khóa kj Sử dụng phương pháp

Quy hoạch động để giải quyết bài toán.

Trang 10

4 Các bước giải bài toán:

 Bước 1: Mô tả cấu trúc cây nhị phân tìm kiếm với các khóa ki, …, kj

Chọn một trong các khóa này là kr (i ≤ r ≤ j), sẽ là gốc

của cây con tối ưu chứa các khóa đã cho Các cây con bên trái của gốc kr sẽ chứa các khóa ki, …, kr-1 (và các khóa giả di-1, …, dr-1), và cây con bên phải chứa các

khóa kr+1, …, kj (và các khóa giả dr, …, dj) Cũng như vậy ta kiểm tra tất cả các gốc kr, (i ≤ r ≤ j)

Nếu khóa ki có cây con trái rỗng thì cây con trái sẽ bao

gồm một nút lá là di-1, nếu khóa kj có cây con phải rỗng thì cây con phải sẽ bao gồm một nút lá là khóa giả dj.

Trang 11

 Các trường hợp xảy ra:

 Khi j = i – 1 Khi đó ta có khóa giả di-1

- Chi phí tìm kiếm là e[i,i-1] = qi-1;

- Tổng xác suất: w(i,i-1) = qi-1 với 1 ≤ i ≤ n+1

Trang 12

 Khi j ≥ i, chúng ta cần chọn một gốc k r từ các khóa k i , …,

các khóa k i , …, k r-1 là cây con trái của k r và cây nhị phân tìm kiếm tối ưu với các khóa k r+1 , …, k j là cây con phải của k r Khi đó ta có:

=> w[i,j] = w[i,j-1] + p j + q j

Và:

e[i,j] = p r + (e[i,r-1] + w(i,r-1)) + (e[r+1,j] + w(r+1,j))

=> e[i,j] = e[i,r-1] + e[r+1,j] + w(i,j)

i l

p j

i

w

1

) , (

Trang 13

 Từ đó, ta có công thức đệ qui như sau:

, 1 [

] 1 ,

[ { min ]

, [i j e i r q e r1 j w i j

e

j r i

i Nếu j = i –

1, Nếu i ≤ j

i

q p

j i w

q j

i

w

) 1 ,

(

) , ( 1 Nếu j = i – 1,

Nếu i ≤ j

Trang 14

Bước 3: Tính toán chi phí tìm kiếm của cây tìm kiếm

nhị phân tối ưu:

(Lập bảng)

 Ở bước này, ta sử dụng thêm bảng:

 Root[i,j]: để lưu giữ các chỉ số r của khóa kr được chọn làm gốc của các cây con chứa các khóa ki, …,

kj

Trang 16

Ví dụ: Xét hai cây nhị phân

tìm kiếm

xác suất tìm kiếm các khóa và khóa giả là:

Trang 17

 Bảng e thể hiện chi phí của các cây con.

 Từ bảng root, ta vẽ được cây tìm kiếm nhị phân tối ưu

Trang 18

 Để vẽ cây tìm kiếm nhị phân tối ưu chứa các khóa từ ki đến kj, dựa vào bảng root ta tìm

được gốc của cây, theo luật của cây nhị phân tìm kiếm ta hoàn toàn vẽ được cây.

 Cây thu được từ bảng root, với chi phí tìm

Trang 19

Bài toán xâu trong chung

cực đại

K/n Xâu trong: S là xâu trong của T nếu S nhận được

bằng cách xoá đi một số ký tự nào đó Ví dụ:

‘ABC’ là xâu trong của ‘GAHEBOOC’

Bài toán: Cho 2 xâu T1, T2 Tìm một xâu S là xâu

trong chung của T1 và T2 có độ dài cực đại (gọi là

Xâu con chung dài nhất).

Ví dụ: T1=‘ABCDAE’ và T2=‘XYACADK’ có xâu

‘ACD’ là xâu trong chung với độ dài cực đại.(độ

dài 3).

Trang 20

 Tư tưởng chung của thuật toán là:

Để tìm ra một xâu con chung dài nhất (LCS) của

X=x1x2…xm và Y = y1y2…yn Ta xét:

- Nếu xm=yn, chúng ta phải tìm ra một xâu con chung dài nhất của Xm-1 và Yn-1 Thêm xm=yn vào LCS trên ta sẽ thu được LCS của X và Y

- Nếu xm ≠ yn thì chúng ta phải giải quyết hai vấn đề:

n-1

Trang 21

 Dựa trên thuật toán đó, ta gọi c[i,j] là độ dài xâu con chung dài nhất của X và Y tính từ 1 đến x[i] và 1 đến y[j].

 Tính c[i,j]:

 Nếu x[i] = y[j] thì c[i,j] = c[i-1,j-1] + 1

 Ngược lại: c[i,j] = max{c[i-1,j], c[i,j-1]}

Trang 22

 Phân tích bài toán: Xây dựng hàm:

Function LCS_Length(x,y:string):word;

 Giải pháp đệ quy:

 Lập bảng:

Sử dụng mảng 2 chiều c (array[1 max,1 max] of word) để tính: c [i,j] =

Cụ thể:

For i =1 to m do

For j =1 to n do

If x[i] = y[j] then c[i,j] = c[i-1,j-1] + 1

Else if c[i-1,j]>=c[i,j-1] then c[i,j] = c[i-1,j]

Else c[i,j] = c[i,j-1];

Phương pháp Quy hoạch động

Trang 23

Tổng hợp kết quả

Max:=c[length(x),lenghth(y)];

S:=‘ ’;

While (max>0) and (i>0) and (j>0) do

Else if max=c[i,j-1] then j:=j-1

Else Begin

S:=S+x[i];

i:=i-1; j:=j-1;

End;

Trang 24

Bài toán in đoạn văn bản

Cho 1 đoạn văn bản gồm n từ có độ dài lần lược là L1, L2, , Ln

được đo lường bởi các kí tự Chúng ta muốn in đoạn văn bản này trên 1 số dòng với độ dài lớn nhất của mỗi dòng là

M=max(L i ) i=1 n Nếu trên 1 dòng chứa các từ từ i đến j

(i<j) thì chúng ta đặt chính xác 1 khoảng trống giữa các từ

và khoảng trống hao phí cuối dòng là M-j+i-T(T=tong

Trang 25

 Ci-1 + M-L i nếu in từ i trên 1 dòng mới

 C k-1 + M – i+k – Tong (L i k ) Nếu in các từ từ k đến ichan trên cùng 1 dòng

Chọn Min từ 2 trường hợp trên

Trang 26

 while (min-l[k]-1>=0) and (k>0) do

Trang 27

Tổng hợp kết quả

Ngày đăng: 11/04/2015, 22:45

TỪ KHÓA LIÊN QUAN

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

w