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

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN PHƯƠNG PHÁP THAM LAM (Trang 34 - 40)

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ỏ nhất, 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 đầu trong đồ 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,ω)

1 A ∅

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

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 ω( )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 A mộ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.

Chứng minh: Nếu không tồn tại x như thế thì tập con độc lập duy nhất là tập rỗ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∈B

dẫ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

Chứng 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.

Chứng 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).

Chứng 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

Chứng 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 đúng khi 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.

4.3. Các bài tập liên quan:

Bài 1: Chỉ ra rằng (S,lk) là một matroid trong đó S là tập hữu hạn và lk là tập của tất cả các tập con của S có kích thước tối đa là k, với k≤ S

Bài 2: Cho một ma trận có giá trị thực T mxn, chỉ ra rằng (S,l) là một matroid, trong đó S là một tập các cột của T và A∈l nếu và chỉ nếu các cột trong A là độc lập tuyến tính.

Bài 3: Chỉ ra rằng nếu (S,l) là một matroid thì (S,l') là một matroid, với l' {A':S-A'=

chứa A cực đại nào đó ∈l}. Tức là, những tập độc lập lớn nhất của (S,l') là phần bù của những tập độc lập lớn nhất của (S,l).

Bài 4: Cho S là tập hữu hạn và cho S1, S2,…,Sk là là một phân hoạch của S thành những

tập con rời không rỗng. Định nghĩa cấu trúc (S,l) với điều kiện rằng {A: A Si 1, i=1,2,...,k}

= ∩ ≤

l .

Chứng tỏ rằng (S,l) là một matroid. Tức là, tập của tất cả các tập A mà chứa tối đa trong mỗi khối phân hoạch sẽ xác định những tập hợp độc lập của một matroid.

Bài 5: Nêu cách biến đổi hàm trọng số của bài toán matroid trọng số, trong đó giải pháp

tối ưu mong muốn là các tập con độc lập lớn nhất có trọng số nhỏ nhất, để biến nó thành một bài toán matroid trọng số chuẩn. Chứng tỏ phép biến đổi đó là đúng đắn.

PHẦN 5: BÀI TOÁN LẬP LỊCH LÀM VIỆC

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≤ ≤di n

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. Ta nó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 một công việc trễ aj, thì ta thay đổi vị trí của ai và aj và ai sẽ vẫn là sớm và aj sẽ vẫn là trễ.

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ỳ.

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN PHƯƠNG PHÁP THAM LAM (Trang 34 - 40)

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

(46 trang)
w