Giải thuật tham lam trên một matroid trọng số

Một phần của tài liệu Thuật toán tham lam (Trang 30 - 39)

Nhiều bài toán mà cách tiếp cận tham lam đưa ra những giải pháp tối ưu có thểđược trình bày rõ ràng bởi việc tìm ra tập con độc lập có trọng số lớn nhất trong matroid trọng số. Tức là, ta được cho một matroid trọng số M=(S,l) và ta muốn tìm ra một tập A∈l

độc lập sao cho ω( )A được cực đại hoá. Ta gọi tập con độc lập và có trọng số lớn nhất là tập con tối ưu của matroid. Bởi vì trọng số ω( )x của bất kỳ phần tử x∈Slà số dương, một tập con tối ưu luôn là tập con độc lập lớn nhất.

Ví dụ, trong bài toán tìm cây khung nh nht, ta có một đồ thị vô hướng, liên thông G=(V,E) và hàm tính độ dài ω sao cho ω( )e là độ dài của cạnh e. (Ta sử dụng đại lượng “độ dài” để chỉ trọng số của cạnh ban đầutrong đồ thị, “trọng lượng” để chỉ trọng số

trong matroid). Ta cần tìm ra tập con của các cạnh mà kết nối tất cả các đỉnh với nhau và có tổng độ dài nhỏ nhất. Để xem ví dụ này như là một bài toán tìm một tập con tối ưu của matroid, cho một matroid trọng số MG với hàm trọng số ω', trong đó ω'( )e =ω(0)−ω( )e

và ω0 thì lớn hơn độ dài tối đa của một cạnh bất kỳ. Trong matroid trọng số này, tất cả

trong đồ thị ban đầu. Cụ thể hơn, mỗi tập con độc lập lớn nhất A tương ứng với một cây khung và bởi vì:

0

'( ) (A V 1) ( )A

ω = − ω ω−

Trong một tập con độc lập lớn nhất bất kỳ, một tập con độc lập đạt cực đại về ω'( )A

thì phải cực tiểu ω( )A . Vì vậy, một thuật toán bất kỳ có thể tìm ra một tập con tối ưu A trong matroid tuỳ ý có thể giải quyết bài toán cây khung nhỏ nhất

Chương 23 đưa ra thuật toán cho bài toán cây khung nhỏ nhất, nhưng ở đây ta có một thuật toán tham lam thực hiện trên matroid trọng số bất kỳ. Giải thuật trên nhận dữ liệu vào là một matroid trọng số M=(S,l) với một hàm trọng số dương và nó trả về một tập con tối ưu A. Trong phần giả mã, ta biểu diễn những thành phần của M bởi S[M] và l[M]

và hàm trọng số bởi ω. Thuật toán là tham lam bởi vì nó xem mỗi phần tử x S∈ lần lượt

được sắp xếp theo trọng số giảm dần đều và trực tiếp cộng nó vào tập A đang được tích luỹ nếu A∪{x} là độc lập.

GREEDY(M,w) 1. A←∅

2. Sắp xếp S[M] theo thứ tự giảm dần bởi trọng lượng w

3. for mỗi x∈S[M] lấy ra từ tập được sắp xếp giảm dần theo trọng lượng w(x) 4. do if A∪{x}∈l[M]

5. then A←A∪{x} 6. return A

Những phần tử thuộc S được sắp xếp giảm dần theo trọng lượng. Nếu phần tử x được xem có thể thêm vào A trong khi vẫn duy trì sự độc lập của A, thì đúng là nó. Bằng không, x bị loại bỏ. Bởi vì tập rỗng là độc lập bởi định nghĩa về matroid và x được thêm vào A với điều kiện A ∪{x} là độc lập, nên tập con A luôn luôn độc lập bằng phương pháp qui nạp. Vì vậy, GREEDY luôn trả về một tập con độc lập A. Như sẽ thấy dưới dây A là tập con trọng số khả dĩ lớn nhất, vì vậy Amột tập con tối ưu.

Thật dễ dàng để phân tích thời gian thực hiện của thuật toán tham lam. Cho n biểu diễn cho S . Giai đoạn sắp xếp mất thời gian là O(nlogn). Dòng 4 thực hiện chính xác là n lần, mỗi lần là một phần tử của S. Mỗi lần thực hiện dòng 4 yêu cầu là tập A∪{x}có

độc lập không. Nếu mỗi lần kiểm tra như thế chiếm O(f(n)), thì một giải thuật hoàn chỉnh chạy trong thời gian O(nlgn + nf(n))

Ta chứng minh rằng GREEDY trả về một tập con tối ưu.

a. Bổđề 16.7: (Matroid có tính chất lựa chọn tham lam)

Giả sử rằng M=(S,l) là một matroid trọng số với hàm trọng số là ω và S được sắp xếp theo thứ tự giảm dần theo trọng lượng. Cho x là phần tửđầu tiên của S sao cho {x} là

độc lập. Nếu x tồn tại thì tồn tại một tập con tối ưu A của S chứa x.

Chng minh: Nếu không tồn tại x như thế thì tập con độc lập duy nhất là tậprỗng. Nói cách khác, cho B là một tập con tối ưu khác rỗng bất kỳ. Giả sử x∉B, mặt khác ta cho A=B.

Không có phần tử nào của B có trọng số lớn hơn ω( )x . Để thấy điều này, ta có y∈Bdẫn đến {y} là độc lập, vì rằng B∈l và l là di truyền. Vì vậy việc chọn x đảm bảo rằng ω( )x ≥ω( )y với bất kỳ y∈B.

Xây dựng tập A như sau. Bắt đầu với A={x}. Do cách chọn x nên A độc lập. Áp dụng tính chất trao đổi, lặp lại việc tìm một phần tử mới của B sao cho có thể thêm vào A cho

đến khi A = B trong khi vẫn giữđược tính độc lập của A. Lúc đó, A= B - {y}∪{x} với mọi y∈B, và vì vậy:

( )A ( )B ( )y ( )x

ω =ω −ω +ω ≥ω( )B

Bởi vì B là tối ưu, A cũng phải tối ưu và bởi vì x∈Anên bổđềđược chứng minh. Tiếp theo ta chỉ ra rằng nếu một phần tử không được lựa chọn lúc đầu thì nó không thểđược lựa chọn sau đó.

b. Bổđề 16.8

Cho M=(S,l) là một matroid bất kỳ. Nếu x, một phần tử của S, là một mở rộng của tập con độc lập A nào đó của S thì x cũng là mở rộng của tập ∅.

Chng minh: Bởi vì x là một mở rộng của A, ta có A∪{x} là độc lập. Vì rằng l là di truyền, {x} phải là độc lập. Vì vậy, x là một mở rộng của tập ∅.

c. Hệ quả 16.9

Cho M=(S,l) là một matroid bất kỳ. Nếu x là phần tử của S sao cho x không là mở

rộng của ∅ thì x không là tử mở rộng của bất kỳ tập con A độc lập nàp của S.

Chng minh: Hệ quả quả này là hoàn toàn trái ngược với Bổđề 16.8

Hệ quả 16.9 cho rằng bất kỳ phần tử nào không được dùng ngay tức thì thì có thể

không bao giờ được sử dụng. Vì vậy, GREEDY không thể gây ra lỗi bởi việc bỏ qua những phần tử ban đầu bất kỳ trong S mà không là một mở rộng của ∅, vì rằng chúng không bao giờ được sử dụng.

d. Bổđề 16.10: Matrroid có tính chất cấu trúc con tối ưu

Cho x là phần tử đầu tiên của S được chọn bởi GREEDY đối với matroid M=(S,l). Vấn đề còn lại của việc tìm ra một tập con độc lập có trọng số cực đại chứa x là tìm một tập con độc lập có trọng số cực đại của matroid có trọng số M’=(S’,l'), với điều kiện: • S' {y S:{x,y}= ∈ ∈l} • l' {B S-{x}:B {x}= ⊆ ∪ ∈l} • Hàm trọng sốđối với M’ là hàm trọng số đối với M nhưng bị giới hạn bởi S’. (ta gọi M’ rút gọn của M bởi phần tử x). Chng minh: Nếu A là một tập con độc lập có trọng số cực đại của M chứa x, thì A’=A-{x} là một tập con độc lập của M’. Ngược lại, bất kỳ tập con độc lập A’ nào của M’ dẫn đến một tập con độc lập A=A’∪{x} của M. Bởi vì ta có cả hai trường hợp là

( )A ( ')A ( )x

ω =ω +ω , một giải pháp có trọng số cực đại trong M chứa x dẫn đến một giải pháp có trọng số cực đại của M’, và ngược lại.

e. Định lý 16.11: (Tính đúng đắn của giải thuật tham lam trên matroid)

Nếu M=(S,l) là một matroid trọng số với hàm trọng số ω thì GREEDY(M,ω) trả lại một tập con tối ưu.

Chng minh: Với hệ quả 16.9, bất cứ phần tử nào mà được bỏ qua lúc đầu bởi vì chúng không phải là mở rộng của ∅ không hữu dụng nên không bao giờ xét lại nữa. Mỗi lần phần tửđầu tiên x được chọn, Bổđề 16.7 chỉ ra rằng GREEDY đúngkhi thêm x vào A, vì luôn tồn tại một tập con tối ưu chứa x. Cuối cùng, Bổđề 16.10 chỉ ra rằng bài toán còn lại là tìm ra tập con tối ưu trong matroid M’ mà là rút gọn của M bởi x. Sau khi GREEDY đặt A là {x}, tất cả các bước còn lại có thể được làm sáng tỏ như hoạt động trong matroid M’=(S’,l'), bởi vì B là độc lập trong M’ nếu và chỉ nếu B∪{x} là độc lập

trong M, đối với tất cả các tập B∈l'. Vì vậy, phép tính tiếp theo của GREEDY sẽ tìm ra tập con độc lập có trọng số lớn nhất của M’, và phép tính toàn diện của GREEDY sẽ tìm ra một tập con độc lập có trọng số cực đại của M.

PHN 5: BÀI TOÁN LP LCH LÀM VIC

Một bài toán thú vị mà có thểđược giải quyết bằng cách dùng matroid là bài toán lập lịch làm việc tối ưu trên một bộ xử lý đơn lẻ, với điều kiện mỗi nhiệm vụđều được giới hạn trong một thời gian nhất định, cùng với số tiền phạt phải trả nếu thời hạn kết thúc không đúng. Bài toán này trông có vẻ phức tạp nhưng nó có thểđược giải quyết một cách

đơn giản bằng cách dùng thuật toán tham lam.

Một nhiệm vụ trong một đơn vị thời gian là một công việc, có thể xem như là một chương trình có thể được chạy trên một máy tính với yêu cầu chính xác một đơn vị thời gian để hoàn thành. Cho một tập hữu hạn S gồm các công việc, mỗi lịch đối với S là một hoán vị của S chỉ ra thứ tự thực hiện của các công việc. Công việc đầu tiên trong lịch bắt

đầu tại thời điểm 0 và kết thúc tại thời điểm 1, công việc thứ hai bắt đầu tại thời điểm 1 và kết thúc tại thời điểm 2, và tiếp tục như thế.

Bài toán lập lịch với thời hạn kết thúc và số tiền phạt cho một bộ xử lý đơn lẻ có dữ

liệu vào như sau:

• Một tập S={a1,a2,…,an} của n công việc

• Một tập gồm n thời hạn kết thúc d1, d2,…,dn nguyên, sao cho mỗi di thoả 1≤din

và nhiệm vụ aiđược giả sử kết thúc trước thời hạn di với i = 1..n

• Một tập gồm n trọng số không âm hoặc các phạt số tiền w1, w2,…,wn sao cho ta phải chịu một số tiền phạt wi nếu nhiệm vụ ai không hoàn thành trước thời hạn di và ta không phải chịu số tiền phạt nào nếu một nhiệm vụ hoàn thành đúng với thời hạn kết thúc của nó.

Ta được yêu cầu tìm ra một lịch của S sao cho giảm đến mức tối thiểu tổng số tiền phạt phải chịu do không đúng thời hạn.

Giả sử có một lịch cho trước. Tanói rằng công việc là “trễ” trong lịch này nếu nó hoàn thành sau thời hạn kết thúc. Mặt khác, công việc đó được gọi là “sớm”. Một lịch tuỳ

ý có thể luôn được đưa về dưới dạng sớm-trước trong đó công-việc-sớm hoàn thành trước công-việc-trễ. Để thấy được điều này,lưu ý rằng nếu một công việc ai nào đó theo sau

Tương tự ta khẳng định rằng một lịch tuỳ ý luôn được đưa về dưới dạng chuẩn trong

đó những công việc sớm hoàn thành trước những công việc trễ và những công việc sớm này là được sắp xếp theo thứ tự tăng dần về thời hạn kết thúc. Để làm được điều này, ta

đưa bài toán lập lịch làm việc về dạng sớm-trước. Sau đó, với điều kiện là có hai công việc sớm ai và aj hoàn thành với thời hạn tương ứng k và k+1 trong lịch sao cho di≤dj, ta hoán đổi vị trí của ai và aj. Vì rằng aj là công việc sớm trước khi hoán đổi, k+1≤ dj. Bởi vậy, k+1< di và vì vậy ai vẫn là công việc sớm sau khi hoán đổi. Công việc aj là trở nên sớm hơn trong lịch, vì thế nó cũng vẫn là sớm sau khi hoán đổi.

Bài toán tìm một lịch tối ưu được đưa về bài toán tìm một tập A các công việc sớm trong lịch tối ưu này. Một khi A được xác định, ta có thể tạo ra một lịch làm việc bằng việc sắp xếp các phần tử của A theo thứ tự tăng dần về thời hạn, rồi liệt kê những công việc trễ (ví dụ: S-A) theo thứ tự bất kỳ, đưa ra một thứ tự chuẩn của lịch làm việc tối ưu.

Ta nói rằng tập A gồm các công việc độc lập nếu tồn tại một lịch làm việc gồm những công việc này sao cho không có công việc nào là trễ. Rõ ràng, tập các công việc sớm trong một lịch làm việc là tập các công việc độc lập. Gọi l là tập của tất cả các tập công việc độc lập. Xét bài toán xác định một tập con A gồm các công việc cho trước có độc lập hay không. Với t= 0,1,2,…, n, đặt Nt(A) là số công việc có trong A mà thời hạn kết thúc là t hoặc sớm hơn. Lưu ý rằng N0(A)=0 đối với tập A bất kỳ.

5.1. Bổđề 16.12

Với một tập A bất kỳ gồm các công việc, các mệnh đề sau là tương đương. 1. Tập A là độc lập

2. Với t=0,1,2,…, n, ta có Nt(A)≤t

3. Nếu các công việc trong A được sắp xếp theo thứ tự tăng dần về thời hạn kết thúc thì không có công việc nào trễ.

Chng minh: Rõ ràng, nếu Nt(A) >t với t nào đó, thì không có cách nào để lập lịch làm việc mà không có một công việc trễ nào đối với A, bởi vì có nhiều hơn t công việc hoàn thành trước thời gian t. Vì vậy, (1) suy ra (2). Nếu (2) có giá trị thì (3) xảy ra: không có cách nào để “get stuck” khi việc lên lịch các công việc theo thứ tự tăng dần về thời hạn

kết thúc, vì rằng (2) suy ra rằng thời hạn kết thúc lớn nhất thứ i hầu hết đều là i. Cuối cùng, (3) thông thường suy ra (1).

Sử dụng tính chất 2 của Bổ đề 16.12, ta có thể dễ dàng tính toán được liệu có hay không một tập cho trước gồm các công việc là độc lập (xem 16.5-2)

Bài toán tối thiểu hoá tổng số tiền phạt của những công việc trễ giống như bài toán cực đại hoá tổng số tiền phạt của những công việc sớm. Định lý sau đây đảm bảo rằng ta có thể sử dụng thuật toán tham lam để tìm ra một tập độc lập. Một tập các công việc với tối đa số tiền phạt.

5.2. Định lý 16.13

Nếu S là một tập các công việc với các thời hạn kết thúc tương ứng và l là tập của tất cả các tập độc lập thì hệ thống tương ứng (S,l) là một matroid.

Chng minh: Mọi tập con của một tập các công việc độc lập đều là độc lập. Để

chứng minh tính chất trao đổi, giả sử B và A là những tập công việc độc lập và B > A . Gọi k là giá trị t lớn nhất sao cho Nt(B)≤ Nt(A). (Ví dụ một giá trị t tồn tại vì rằng N0(B)=0). Bởi vì Nn(B)= B và Nn(A)= A , nhưng B > A , ta ắt hẳn có k<n và Nj(B)>Nj(A) đối với tất cả các j trong khoảng k+1≤j≤ n. Vì vậy, B chứa nhiều công việc với thời hạn kết thúc k+1 hơn A. Đặt ai là một công việc trong B-A với thời hạn kết thúc là k+1. Đặt A’=A∪{ai}.

Bây giờ ta chỉ ra rằng A’ phải là độc lập bởi tính chất 2 của bổđề 16.12. Với 0≤ t≤ k, ta có Nt(A’) = Nt(A)≤ t, vì rằng A là độc lập. Với k<t=n, ta có Nt(A’)≤ Nt(B)≤t vì rằng B là độc lập. Vì vậy, A’ là độc lập, ta hoàn thành việc chứng minh rằng (S,l) là một matroid.

Bằng định lý 16.11, ta có thể sử dụng thuật toán tham lam để tìm ra một tập các nhiệm vụ A độc lập có trọng số cực đại. Sau đó ta có thể lập nên một làm việc tối ưu gồm các công việc trong A như là những công việc sớm của nó. Phương thức này là một thuật toán lập lịch các công việc hiệu quả với các thời hạn kết thúc và số tiền phạt đối với bộ

xử lý đơn. Thời gian chạy thuật toán là O(n2) bằng cách sử dụng GREEDY, vì rằng có O(n) lần kiểm tra tính độc lập mà mỗi lần tốn O(n) đơn vị thời gian (xem Bài tập 15.5-2).

Minh hoạ 16.7 đưa ra một ví dụ về bài toán lập lịch các công việc với các thời hạn kết

Một phần của tài liệu Thuật toán tham lam (Trang 30 - 39)

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

(61 trang)