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

Upload: nguyen-danh-thanh

Post on 30-Jun-2015

675 views

Category:

Education


3 download

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

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