Phương pháp tham lam giải bài toán lập lịch công việc

17
SEMINAR Sử dụng phương pháp tham lam để giải quyết bài toán lập lịch công việc. SVTH: Nguyễn Danh Thanh

description

Sử dụng phương pháp tham lam để giải bài toán lập lịch công việc.

Transcript of Phương pháp tham lam giải bài toán lập lịch công việc

Page 1: Phương pháp tham lam giải bài toán lập lịch công việc

SEMINAR

Sử dụng phương pháp tham lam để giải quyết

bài toán lập lịch công việc.

SVTH: Nguyễn Danh Thanh

Page 2: Phương pháp tham lam giải bài toán lập lịch công việc

Nội Dung

1 Phát biểu bài toán

2 Giải quyết bài toán

3 Chứng minh tính đúng đắn

4 Tính toán độ phức tạp

5 Giới thiệu chương trình

6 Ứng dụng thực tế

Page 3: Phương pháp tham lam giải bài toán lập lịch công việc

1. Phát biểu bài toán

1.1 Bài toánCho n việc cần phải hoàn thành, mỗi

việc thực hiện trong 1 đơn vị thời gian. Việc i sẽ đem lại wi tiền thưởng nếu hoàn thành đúng hạn di .

[?].Tìm cách thực hiện các công việc để có lợi nhuận cao nhất mà thời gian thực hiện là ít nhất.

Page 4: Phương pháp tham lam giải bài toán lập lịch công việc

1. Phát biểu bài toán

1.2 Ví dụ

Làm việc nào trước đây !!!!......

Page 5: Phương pháp tham lam giải bài toán lập lịch công việc

1. Phát biểu bài toán

1.3 Input/Output

Input: n bộ {i , di , wi }

i = 1…n; di € N+ ; wi € Z+.

Output: B, T.i: Công việc thứ i.di: Thời điểm kết thúc công việc i.

wi: Số tiền được thưởng nếu hoàn thành công việc i.B: Lịch thực hiện công việc sao cho T là lớn nhất.T: Tổng số tiền được thưởng.

Page 6: Phương pháp tham lam giải bài toán lập lịch công việc

2. Giải quyết bài toán

2.1 Ý tưởng 30s

Bước 1: Xác định tất cả các lịch có thể tạo ra từ n công việc.Bước 2: Tính tổng số phần thưởng ở mỗi lịch.Bước 3: So sánh tổng phần thưởng ở các lịch -> Đưa ra lịch cần tìm và tổng tiền thưởng tương ứng.

Page 7: Phương pháp tham lam giải bài toán lập lịch công việc

2. Giải quyết bài toán

2.2 Ý tưởng 30s

Xếp n công việc vào n thời điểm ta có n! cách -> có n!

lịch.Với n = 3 -> 3! = 6 n = 10 -> 10! = 3 628 800 n = 60 -> 60! = 8.32 x 1081 …………………………… n = 10000 ?

Có cách khác không ?

Page 8: Phương pháp tham lam giải bài toán lập lịch công việc

2. Giải quyết bài toán2.3 Sử dụng phương pháp tham lam

- Sắp xếp lại lịch theo chiều không tăng của phần thưởng wi. Thay đổi i và di tương ứng.

- Xét trục thời gian B[m]. m = max(di), k=0.

+ Nếu giờ b[di] trên B rỗi thì gán b[di] = i.

+ Nếu giờ b[di] trên B đã bận thì tìm giờ b[j] (j< di) rỗi gần b(di) nhất.

Nếu tồn tại giờ b[j] thì gán b[j] = i.Ngược lại c[k++]= i.

- Dồn các việc i trên B để tạo lịch làm việc trù mật. - Bổ xung các việc trên C vào B.

Page 9: Phương pháp tham lam giải bài toán lập lịch công việc

2. Giải quyết bài toán2.3 Sử dụng phương pháp tham lam !

Thời gian(h) 1 2 3 4 5 6 7 8 9

Công việc

Tiền thưởng

($)

Công việc (i)

Thời hạn (di)

Tiền thưởng (wi)

5

3

90

6

7

60

3

4

50

4

6

40

2

2

40

8

2

30

1

4

20

7

9

10

1

4

20

2 5 3 4 6 7

30 40 90 50 40 60 10

8 1

20

Tổng tiền thưởng : T = 320!

Page 10: Phương pháp tham lam giải bài toán lập lịch công việc

2. Giải quyết bài toán2.4 Giải thuật:

1. Sort W, wi > =wj . vs j > i. and change ai ,di

2. T = 0; m = max(di); B[i] = 0, i = 0…m, k = 0.

For i = 1 to n doj = di

while B[j] > 0 do - - j.if j = 0 then C[k++] = ai .

elseB[j] = ai .

T += wi .

Exit for3. f0 = 0, For i = 1 to m do

if B[i] > 0 then B[f0++] = B[i].4. B = B +C. Return B, T.

Page 11: Phương pháp tham lam giải bài toán lập lịch công việc

3. Chứng minh tính đúng đắn

1.Thời gian thực hiện n công việc là ít nhất.Lịch làm việc trù mật.Thời điểm bj thực hiện chỉ công việc i.

N công việc.=> Thời gian thực hiện là n đvtg.

2.Phần thưởng nhận được là lớn nhất.Xét {ci}. i =1…n ci > cj .

Tại mỗi bước chọn pi, wi đạt max.Þ Tổng phần thưởng nhận được là lớn nhất

Page 12: Phương pháp tham lam giải bài toán lập lịch công việc

4. Độ phức tạp thuật toán

4.1 Độ phức tạp thời gian

1. Sort W, wi > =wj . vs j > i. and change ai ,di

2. T = 0; m = max(di); B[i] = 0, i = 0…m, k = 0.

For i = 1 to n doj = di

while B[j] > 0 do - - j.if j = 0 then C[k++] = ai .

elseB[j] = ai .

T += wi .

Exit for3. f0 = 0, For i = 1 to m do

if B[i] > 0 then B[f0++] = B[i].4. B = B +C. Return B, T.

O(n.m)

O(m)

Độ phức tạp O(n.m)

O(nlogn)

Page 13: Phương pháp tham lam giải bài toán lập lịch công việc

4. Độ phức tạp thuật toán

4.2 Độ phức tạp không gian

1 mảng lưu n thời hạn kết thúc O(n)1 mảng lưu n phần thưởng tương ứng O(n)1 mảng trục thời gian m O(m)1 mảng lưu công việc trễ k=|m-n| O(k)

Độ phức tạp không gian: O(n)

Page 14: Phương pháp tham lam giải bài toán lập lịch công việc

5. Giới thiệu chương trình

• Ngôn ngữ lập trình C++• Dữ liệu đầu vào• Đầu ra

Page 15: Phương pháp tham lam giải bài toán lập lịch công việc

5. Giới thiệu chương trình

5.2 So sánh kết quả

Thời gian mili giây

Page 16: Phương pháp tham lam giải bài toán lập lịch công việc

6. Ứng dụng thực tế

• Xếp thời gian biểu• Lập lịch cho CPU

Page 17: Phương pháp tham lam giải bài toán lập lịch công việc