Tải bản đầy đủ (.pdf) (53 trang)

Thuật toán hàm công việc giải bài toán k server

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 53 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
---------------------

Lã Ngọc Hải

THUẬT TOÁN HÀM CÔNG VIỆC
GIẢI BÀI TOÁN K-SERVER

LUẬN VĂN THẠC SĨ KHOA HỌC

Hà Nội - 2016


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
---------------------

Lã Ngọc Hải

THUẬT TOÁN HÀM CÔNG VIỆC
GIẢI BÀI TOÁN K-SERVER

Chuyên ngành: Cơ sở toán cho tin học
Mã số:60460110

LUẬN VĂN THẠC SĨ KHOA HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. Nguyễn Thị Hồng Minh

Hà Nội – 2016




Lời cảm ơn
Em xin gửi lời cảm ơn tới các Thầy giáo, Cô giáo, Cán bộ khoa Toán - Cơ
- Tin học, trường Đại học khoa học tự nhiên, Đại học Quốc gia Hà Nội đã tận
tình dạy dỗ và giúp đỡ em trong suốt thời gian học cao học.
Trong quá trình thực hiện luận văn này cũng như trong suốt những năm
học vừa qua, em đã nhận được sự chỉ bảo và hướng dẫn nhiệt tình của TS.
Nguyễn Thị Hồng Minh. Em xin gửi tới Cô lời cảm ơn chân thành nhất.
Em cũng xin gửi lời cảm ơn tới gia đình, bạn bè đã động viên, khuyến
khích và tạo điều kiện cho em trong quá trình học tập và thực hiện luận văn này.
Mặc dù đã cố gắng để hoàn thành luận văn, nhưng do hạn chế về kinh
nghiệm và thời gian, nên luận văn không thể tránh khỏi những thiếu sót. Em
mong nhận được sự cảm thông và những ý kiến đóng góp của các Thầy, Cô và
các bạn.
Hà Nội, tháng 11 năm 2016
Học viên

Lã Ngọc Hải

i


Mục lục
Mở đầu .................................................................................................................. 1
Chương 1. Tổng quan về thiết kế thuật toán và thuật toán online ................. 3
1.1

Thiết kế thuật toán..................................................................................... 3


1.1.1

Định nghĩa thuật toán ......................................................................... 3

1.1.2

Các đặc trưng cơ bản của thuật toán................................................... 6

1.1.3

Các dạng biểu diễn thuật toán ............................................................ 6

1.1.4

Các phương pháp thiết kế thuật toán .................................................. 7

1.2

Thuật toán trực tuyến (Thuật toán online) ................................................ 8

1.2.1

Giới thiệu ............................................................................................ 8

1.2.2

Phân tích cạnh tranh ......................................................................... 12

1.2.3


Một số bài toán điển hình ................................................................. 13

Chương 2. Bài toán k-server và thuật toán hàm công việc ............................ 18
2.1

Bài toán k-server ..................................................................................... 18

2.1.1

Định nghĩa ........................................................................................ 18

2.1.2

Tính online của bài toán k-server ..................................................... 22

2.1.3

Một số bài toán liên quan ................................................................. 23

2.2

Một số hướng giải quyết bài toán k-server.............................................. 24

2.2.1

Thuật toán tham lam ......................................................................... 24

2.2.2

Thuật toán ngẫu nhiên RANDOM-Slack ......................................... 27


2.2.3

Thuật toán ngẫu nhiên Hamornic ..................................................... 29

2.3

Thuật toán hàm công việc (WFA) giải quyết bài toán k-server .............. 31

2.3.1

Thuật toán hàm công việc................................................................. 31

2.3.2

Thuật toán hàm công việc cải tiến .................................................... 35

Chương 3. Ứng dụng của bài toán k-server .................................................... 38
3.1

Bài toán ................................................................................................... 38

3.1.1

Đặt bài toán ....................................................................................... 38

3.1.2

Bài toán tổng quát ............................................................................. 39


3.2

Phân tích yêu cầu bài toán....................................................................... 40
ii


3.3

Thiết kế chương trình .............................................................................. 40

3.3.1

Phần cứng ......................................................................................... 40

3.3.2

Kết quả thực nghiệm......................................................................... 40

Kết luận ............................................................................................................... 46
Tài liệu tham khảo ............................................................................................. 47

iii


Mở đầu
Thiết kế và đánh giá thuật toán là một trong những lĩnh vực quan trọng của
khoa học máy tính. Để giải được một bài toán trên máy tính, điều không thể
thiếu là phải có thuật toán cho bài toán đó. Lớp các bài toán được đặt ra từ các
ngành khoa học kỹ thuật, các lĩnh vực hoạt động của con người là rất đa dạng và
phong phú. Có thể có nhiều kĩ thuật khác nhau để thiết kế các thuật toán cùng

đưa ra lời giải đúng và chính xác cho một bài toán, nhưng với hiệu quả thực hiện
khác nhau. Việc nắm được các kĩ thuật để có những chiến lược phù hợp
trongthiết kế và đánh giá thuật toán là cần thiết, nó giúp chúng ta có thể tìm ra
đượcnhữngthuật toán cho bài toán được yêu cầu và từ đó xác định được thuật
toán tốt và phù hợp nhất.Một thuật toán tốt sẽ giúp chúng ta giải được bài toán
một cách chính xác, đồng thời giảm thiểu thời gian và sử dụng không gian, theo
nghĩa tài nguyên máy,một cách hợp lí trong quá trìnhtính toán.
Những nghiên cứu về các kĩ thuật, phương pháp thiết kế thuật toán đã được
quan tâm từ rất sớm và mang lại nhiều lợi ích trong khoa học tính toán và thông
tin. Một số các kĩ thuật thiết kế thuật toán đã được chuẩn hóa thành lớp các
phương pháp, như: Chia để trị, Quay lui, Nhánh cận, Quy hoạch động, Tham
lam… Một đặc trưng quan trọng của các kĩ thuật thiết kế thuật toán này là
chúngchỉ có thể áp dụng đối với các bài toán đã được xác định, tức là những dữ
liệu đầu vào và yêu cầu đầu ra của bài toán cần giảilà có sẵn và đầy đủ trước khi
thực hiện thuật toán. Tuy nhiên, có một số bài toán, ứng dụng trong thực tế thì
điều này đôi khikhông được đáp ứng. Có những bài toán cần lời giải, nhưng dữ
liệu vào chỉ được cung cấp từngphần, theo thời gian.Lời giải của bài toán tại mỗi
thời điểm sẽ chỉcăn cứ trên những dữ liệu vào được cung cấptại thời điểm đó và
trước đó mà không biết những dữ liệu vào sau thời điểm đó sẽ ra sao. Các bài
toán có đặc trưng như vậy được gọi là bài toán trực tuyến (online
problem).Thuật toán để giải quyết các bài toán trực tuyến được gọi là thuật toán
trực tuyến (onlinealgorithm), trong luận văn này chúng tôi gọi là thuật toán
1


online. Như vậy, thuật toán trực tuyến sẽ thực hiện và đưa ra kết quả đầu ra của
bài toán chỉ dựa trên dữ liệuđầu vào tại mỗi thời điểm cung cấp và trước đó, mà
không biết đến thông tin về đầu vào trong tương lai.
Thuật toán trực tuyến đã được nhiều nhà khoa học và nhóm nghiên cứu quan
tâm và phát triển. Tuy nhiên việc thiết kế và đánh giá thuật toán trực tuyến vẫn

còn nhiều thách thức trong nghiên cứu lí thuyết cũng như triển khai ứng
dụng.Trong bản luận văn nàychúng tôi sẽ trình bày những kết quả nghiên cứu
xung quanh việc tìm hiểu bài toán trực tuyến, tập trung chính vào bài toán kserver, một dạng tương đối điển hình của bài toán trực tuyến, vàchiến lược thiết
kế thuật toántrực tuyếncho bài toán này thông qua hàm công việc (working
function). Với chủ đề “Thuật toán hàm công việc giải quyết bài toán k-server”,
luận văn được cấu trúc gồm có 3 chương:
 Chương 1. Tổng quan: Là chương trình bày về các khái niệm cơ bản trong
thiết kế thuật toán. Trong đó, tập trung vào trình bày về thuật toán trực
tuyến, các yếu tố cơ bản của việc thiết kế thuật toán trực tuyến và một số
ví dụ điển hình.
 Chương 2. Bài toán k-server và thuật toán hàm công việc: Là chương trình
bày về một bài toán điển hình trong lớp thuật toán trực tuyến, đó là bài
toán k-server. Định nghĩa về bài toán, phân tích bài toán và thiết kế một số
thuật toán trong lớp thuật toán trực tuyến để giải quyết bài toán này.
 Chương 3. Ứng dụng: Là chương trình bày về một số ứng dụng của thuật

toán trực tuyến và bài toán k-server. Trong đó, thực nghiệm và đưa ra kết
quả đánh giá đối với các thuật toán đã trình bày trong Chương 2.

2


Chương 1. Tổng quan về thiết kế thuật toán và thuật
toán trực tuyến
Chương này sẽ trình bày các kiến thức cơ bản sử dụng trong các phần sau,
đặc biệt là các kiến thức liên quan đến thiết kế thuật toán và thuật toán trực
tuyến. Kiến thức trong chương này được trình bày dựa vào các tài liệu [1],
[7],[16], [17].
1.1 Thiết kế thuật toán
Khoa học máy tính là ngành nghiên cứu các cơ sở lý thuyết về thông

tin và tính toán cùng sự thực hiện và ứng dụng của chúng trong các hệ
thống máy tính. Khoa học máy tính gồm nhiều ngành hẹp, một số ngành tập
trung vào các ứng dụng thực tiễn cụ thể chẳng hạn như đồ họa máy tính, trong
khi một số ngành khác lại tập trung nghiên cứu đến tính chất cơ bản của các bài
toán tính toán như lý thuyết độ phức tạp tính toán. Ngoài ra còn có những ngành
khác nghiên cứu các vấn đề trong việc thực thi các phương pháp tính toán. Ví dụ,
ngành lý thuyết ngôn ngữ lập trình nghiên cứu những phương thức mô tả cách
tính toán khác nhau, trong khi ngành lập trình nghiên cứu cách sử dụng các ngôn
ngữ lập trình và các hệ thống phức tạp, và ngành tương tác người-máy tập trung
vào những thách thức trong việc làm cho máy tính và công việc tính toán hữu
ích, và dễ sử dụng đối với mọi người dùng. Trong khoa học máy tính, thuật toán
là một trong những khái niệm nền tảng.
Đầu tiên, thuật toán được hiểu như là các quy tắc thực hiện các phép toán số
học với các con số được viết trong hệ thập phân. Cùng với sự phát triển của máy
tính, các khái niệm thuật toán được hiểu theo nghĩa rộng hơn.
1.1.1 Định nghĩa thuật toán
Theo Niklaus Wirththì:
“Thuật toán + Cấu trúc dữ liệu = Chương trình”
(Algorithms + Data Structures = Programs)
3


Thuật toán là một dãy hữu hạn các thao tác cơ bản được sắp xếp theo một
trình tự xác định dùng để giải một bài toán. Một thuật toán, một thủ tục tính toán
được định nghĩa chính xác, là lấy một giá trị hoặc một tập các giá trị, được gọi là
đầu vào hay dữ liệu vào và tạo ra một giá trị, hoặc một tập các giá trị, và gọi là
đầu ra. Miêu tả một vấn đề thường được xác định nói chung qua quan hệ đầu
vào/đầu ra. Một thuật toán là một dãy bước xác định để chuyển đổi dữ liệu đầu
vào thành dữ liệu đầu ra. Chúng ta có thể xem một thuật toán như một công cụ
để giải quyết một vấn đề tính toán. Việc trình bày rõ ràng một vấn đề nói chung

hình thành mối quan hệ mong muốn đầu vào/đầu ra. Dãy thao tác đơn giản, có
thể “giao cho máy tính làm được” để từ đầu vào có thể dẫn ra đầu ra một cách
tường minh. Một thuật toán được gọi là chính xác nếu với mọi dữ liệu vào, nó
kết thúc với kết quả chính xác. Chúng ta nói rằng một thuật toán chính xác giải
quyết một vấn đề đã cho chính xác. Một thuật toán không chính xác có thể
không dừng tại mọi bộ dữ liệu vào, hoặc cho kết quả không chính xác. Đối lập
với nhiều suy nghĩ, một thuật toán không chính xác đôi khi có ích, nếu tỉ lệ lỗi có
thể quản lý được.
Mỗi thao tác trong thuật toán hay còn gọi là tác vụ, phép toán, chỉ thị hay
lệnh… là một hành động cần được thực hiện bởi cơ chế thực hiện của thuật toán.
Mỗi thao tác biến đổi bài toán từ một trạng thái trước sang trạng thái sau. Thực
tế, mỗi thao tác thường sử dụng một số đối tượng trong trạng thái nhập và sản
sinh ra các đối tượng mới trong trạng thái xuất. Quan hệ giữa hai trạng thái xuất
và nhập cho thấy tác động của thao tác. Dãy thao tác của thuật toán nối tiếp nhau
nhằm biến đổi bài toán từ trạng thái ban đầu đến trạng thái kết thúc.
Khi một thuật toán đã hình thành thì ta không xét đến việc chứng minh thuật
toán đó mà chỉ chú trọng đến việc áp dụng các bước theo sự hướng dẫn sẽ có kết
quả đúng. Việc chứng minh tính đầy đủ và tính đúng của các thuật toán phải
được tiến hành xong trước khi có thuật toán. Nói rõ hơn, thuật toán có thể chỉ là
việc áp dụngcác công thức hay quy tắc, quy trình đã được công nhận là đúng hay
4


đã được chứng minh về mặt toán học."Thuật toán" hiện nay thường được dùng
để chỉ thuật toán giải quyết các vấn đề tin học. Hầu hết các thuật toán tin học đều
có thể viết thành các chương trình máy tính mặc dù chúng thường có một vài hạn
chế (vì khả năngcủa máy tính và khả năng của người lập trình). Trong nhiều
trường hợp, một chương trình khi thiết kế bị thất bại là do lỗi ở các thuật toán mà
người lập trình sử dụng không chính xác, không đầy đủ, hay không ước định
được trọn vẹn lời giải của vấn đề. Tuy nhiên cũng có một số bài toán mà hiện

nay người ta chưa tìm được lời giải triệt để, những bài toán ấy gọi là những bài
toán NP-không đầy đủ. Như trên,thuật toán ngoài ra còn chỉ những phương pháp
đem lại được kết quả một cách tối ưu,giảm lượng tài nguyên bỏ ra để đạt
được.Những phương pháp này có thể được rút ra từ thực nghiệm và có thể giải
được bằng toán học hoặc không,tuy nhiên mọi thuật toán đáp ứng tính logic tối
hậu của tự nhiên mà là nguyên do của nhiều loại logic mờ.
Khi nghiên cứu về thuật toán, người ta quan tâm đến các vấn đề sau:
 Giải được bằng thuật toán: Lớp bài toán nào giải được bằng thuật toán,
lớp bài toán không giải được bằng thuật toán.
 Tối ưu hóa thuật toán: Tìm những thuật toán tốt hơn.
 Triển khai thuật toán: Sử dụng các ngôn ngữ lập trình để thực hiện thuật
toán trên máy tính.
Thời gian mà máy tính khi thực hiện một thuật toán không chỉ phụ thuộc vào
bản thân thuật toán đó, ngoài ra còn tùy thuộc từng máy tính. Để đánh giá hiệu
quả của một thuật toán, có thể xét số các phép tính phải thực hiện khi thực hiện
thuật toán này. Thông thường số các phép tính được thực hiện phụ thuộc vào cỡ
của bài toán, tức là độ lớn của đầu vào. Vì thế độ phức tạp thuật toán là một hàm
phụ thuộc đầu vào. Tuy nhiên trong những ứng dụng thực tiễn, chúng ta không
cần biết chính xác hàm này mà chỉ cần biết một ước lượng đủ tốt của chúng.

5


1.1.2 Các đặc trưng cơ bản của thuật toán
Thuật toán có một số đặc trưng cơ bản sau:
a. Tính khách quan: Các thao tác, đối tượng trong thuật toán phải có ý nghĩa rõ
ràng, không gây nhầm lẫn. Nói cách khác, dù cho thực hiện theo người hay
theo máy, thuật toán đều phải đưa ra cùng một kết quả.
b. Tính dừng: Thuật toán phải dừng và cho kết quả sau một số bước hữu hạn.
c. Tính đúng đắn: Thuật toán đúng là thuật toán cho kết quả thỏa mãn yêu cầu

đặc tả của mọi trường hợp đối tượng và đầu vào. Thuật toán là sai nếu kết
quả đưa ra sai trong ít nhất một trường hợp.
d. Tính phổ dụng: Thuật toán dùng để giải một lớp bài toán gồm nhiều bài toán
cụ thể, lớp đó được xác định bởi đặc tả. Thuật toán không chỉ áp dụng cho
một bài toán nhất định mà có thể áp dụng cho một lớp các bài toán có đầu
vào tương tự nhau.
1.1.3 Các dạng biểu diễn thuật toán
Trong ngành khoa học máy tính, thuật toán được thể hiện thông qua
một chương trình máy tính (hay một tập hợp các chương trình máy tính) và được
thiết kế để giải quyết một số bài toán một cách có hệ thống.Thuật toán có thể
diễn đạt dưới ba dạng: liệt kê từng bước, sơ đồ khối, mã giả.
a. Dạng liệt kê từng bước: Là dạng thuật toán được trình bày theo ngôn ngữ
tự nhiên theo trình tự các bước thực hiện trong thuật toán.
b. Dạng sơ đồ khối: Là dạng dùng các hình vẽ để diễn đạt thuật toán. Cho
hình ảnh trực quan và tổng thể của thuật toán, dễ hiểu và dễ sử dụng.
c. Dạng mã giả: Là dạng thuật toán trình bày trong một văn bản, tuy không
ràng buộc nhiều như dạng ngôn ngữ lập trình nhưng cũng tuân theo một
số quy ước ban đầu. Tùy theo việc định hướng cài đặt thuật toán theo
ngôn ngữ lập trình nào mà ta diễn đạt thuật toán gần với ngôn ngữ lập
trình ấy.

6


1.1.4 Các phương pháp thiết kế thuật toán
Các bài toán giải được trên máy tính ngày càng phức tạp và đa dạng. Các
thuật toán đòi hỏi có quy mô lớn, tốn nhiều thời gian và công sức. Tuy nhiên,
công việc sẽ đơn giản hơn nếu ta chia bài toán ra thành các bài toán nhỏ. Cách
thiết kế thuật toán này gọi là Modul hóa và thiết kế từ trên xuống.
Chiến thuật thiết kế này là chia để trị, tức là nhìn nhận vấn đề một cách tổng

quát, sau đó chia nhỏ bài toán thành các bài toán nhỏ và dần dần giải quyết các
bài toán nhỏ đó. Đây thường là cách tiếp cận của con người với hầu hết các vấn
đề trong cuộc sống.Ví dụ:

A

A1

A11

A3

A2

A12

A31

A32

A33

Hình 1: Mô hình thiết kế thuật toán từ trên xuống.
Thông thường, ta chia được các bài toàn thành hai lớp không giao nhau: Lớp
bài toán giải được bằng thuật toán và lớp không giải được bằng thuật toán. Đối
với lớp các bài toán giải được bằng thuật toán, dựa vào các đặc trưng của quá
trình thiết kế, người ta phân thành một số phương pháp điển hình sau:
 Phương pháp chia để trị
 Phương pháp quay lui
 Phương pháp nhánh cận

7


 Phương pháp tham lam
 Phương pháp quy hoạch động
 Phương pháp trực tuyến
 Phương pháp ngẫu nhiên
 Phương pháp xấp xỉ
Khi xây dựng các thuật toán theo các phương pháp trên, có hàng loạt vấn đề
cần được giải quyết. Thường là: yêu cầu về tính đúng đắn của thuật toán, yêu cầu
về thời gian, không gian…Hầu hết các phương pháp trên đều đã được phân tích
và nghiên cứu rất rõ ràng. Tuy nhiên các phương pháp vẫn tiếp tục được nghiên
cứu để đưa ra lời giải tốt hơn.
1.2 Thuật toán trực tuyến (Thuật toán online)
1.2.1 Giới thiệu
Phân tích và thiết kế thuật toán luôn luôn liên quan đến vấn đề tối ưu hóa.
Thông thường, người ta thường hi vọng rằng một thuật toán sẽ thực thi với số lần
tính toán ít nhất. Ví dụ, mục tiêu của người thiết kế thuật toán là giảm tổng thời
gian cần thiết để giải quyết một bài toán nhất định. Trong một số trường hợp
khác, người ta quan tâm nhiều hơn đến việc giảm thiểu bộ nhớ được sử dụng
trong thuật toán đó. Ngoài ra, có một số bài toán đòi hỏi các thuật toán đề ra một
giải pháp để có thể giảm thiểu chi phí qua các giải pháp khả thi – ví dụ như bài
toán lập lịch và bài toán định tuyến mạng. Lý thuyết về các thuật toán trực tuyến
cũng tập trung vào việc cung cấp các thuật toán, các phương pháp để giải quyết
vấn đề tối ưu hóa khi đầu vào được cung cấp theo thời gian.
Sự phát triển của lý thuyết tối ưu cổ điển được dựa trên giả định rằng tất cả
dữ liệu đầu vào đều có sẵn cho các thuật toán. Tuy nhiên, với nhiều vấn đề thực
tế, dữ liệu đầu vào chỉ có sẵn từng mảng và sau đó tiến triển dần. Ví dụ như bài
toán phân trang (Paging Problem) [8], một trong những vấn đề cổ điển trong
việc thiết kế hệ thống điều hành: Bộ nhớ của một hệ thống máy tính điển hình

8


bao gồm một bộ nhớ nhanh được chia thành một số phần bằng nhau gọi là các
trang và bộ nhớ thứ cấp là bộ nhớ lớn hơn nhưng chậm hơn. Các đơn vị xử lí
trung tâm có thể truy cập chỉ có bộ nhớ nhanh, ở đây thường chứa các bản sao
của các trang nhất định trong bộ nhớ thứ cấp. Vì chỉ có dữ liệu trong bộ nhớ
nhanh được truy cập, nên một chính sách quyết định là cần thiết để xác định và
thiết lập một tập các trang để duy trì trong bộ nhớ nhanh mỗi lần sử dụng. Đặc
biệt, một chính sách thay thế trang là cần thiết để quyết định trang ra khỏi bộ nhớ
nhanh để nhường chỗ cho một trang được yêu cầu. Từ quan điểm của lý thuyết
tối ưu hóa thông thường, các đầu vào cho một thuật toán cho bài toán phân trang
là một chuỗi các yêu cầu trang và mục đích là để giảm thiểu số lượng trang lỗi –
số trang bị loại ra khỏi bộ nhớ nhanh. Một thuật toán tham lam đơn giản là tối ưu
cho bài toán này: Hoãn trang lỗi tiếp theo càng lâu càng tốt bằng cách loại bỏ
trang đó cuối cùng từ các trang trong bộ nhớ nhanh để có thể yêu cầu thêm một
lần nữa. Vấn đề xảy ra đối với thuật toán này là chuỗi trang yêu cầu là trong
tương lai. Thực tế thì trình tự các trang yêu cầu trong tương lai là chưa biết và nó
không thể được tính từ quá khứ. Do đó, bất kì thuật toán nào để phân trang cũng
có căn cứ quyết định của mình về trình tự đã được tiết lộ của trang yêu cầu.
Bài toán phân trang là một bài toán đặc trưng của thuật toán trực tuyến: Một
vấn đề tối ưu hóa không phải tất cả các dữ liệu đầu vào liên quan đều được biết
trước, mà sẽ tiến triển theo thời gian. Nói chung, một bài toán trực tuyến là một
bộ ba (I, O, c) trong đó:
 I là tập các kí hiệu đầu vào
 O là một tập các kí hiệu đầu ra
 c: {In× On+1: n ≥ 0} → R+ là một hàm chi phí.
Một thuật toán trực tuyếnA cho một bài toán (I, O, c) là một hàm A: I* → O. Khi
đó, với một chuỗi đầu vào r = (r1, …, rn) ∈ 𝐼, A đưa ra một chuỗi đầu ra y =
(y0,y1, …, yn) ∈ 𝑂. Với:


9


yj = A(r1, …, rj)
Tức là, với mỗi kí tự đầu vào, thuật toánAcho kết quả là một kí tự đầu ra. Chi
phí của thuật toán A cho mỗi đầu vào rkí hiệucostA(r)= cost(r,y). Với bài toán
phân trang với một bộ nhớ nhanh gồm k trang, I là một tập tất cả các trang, O là
tập tất cả các trạng thái của k trang. Khi đó, yj là tập các trang trong bộ nhớ
nhanh tại bước thứ j. Hàm chi phí c là chi phí di chuyển các trang trong bộ nhớ
nhanh được tính như sau: Tại bước j, chi phí tỉ lệ thuận với sự khác nhau đối
xứng yj-1 và yjvới điều kiệnyj chứa trang được yêu cầu cuối cùng là rj, đây là số
trang chúng ta phải di chuyển theo thứ tự để thay đổi trạng thái của bộ nhớ
nhanh từ yj-1 sang yj. Từ trang rj phải di chuyển vào trong bộ nhớ nhanh, chúng
tôi muốn yj chứa rj và điều này được thực hiện bằng cách thiết lập một chi phí
của bước j cao tùy ý khi mà nó không phải là các trường hợp. Các chi phí
cost(r,y) là tổng chi phí cho tất cả các bước. Chú ý rằng, có một đầu ra y0là trạng
thái ban đầu, trong bài toán phân trang, nó là thiết lập ban đầu của các trang
trong bộ nhớ nhanh.
Đối với mỗi bài toán trực tuyến, đều có một bài toán offline liên quan, trong
đó đầu ra yjcủa thuật toán offline B bây giờ có thể phụ thuộc vào đầu vào trong
tương lai:
yj = B(r1, …, rj)
Chi phí tối ưu của thuật toán offline, kí hiệu là OPT(r), là chi phí nhỏ nhất đạt
được của các thuật toán offline đối với đầu vào r.
Trong tối ưu hóa tổ hợp cổ điển, luôn luôn có một thuật toán mà có thể tính
toán một giải pháp tối ưu cho tất cả các đầu vào và khó khăn là làm thế nào để
điều đó hiệu quả nhất. Ngược lại đối với các bài toán trực tuyến với tài nguyên
thông tin khan hiếm, và không có sức tính toán cao. Kết quả là, việc nghiên cứu
các thuật toán trực tuyến cho đến nay chủ yếu tập trung vào chất lượng của các

giải pháp và không tập trung vào hiệu quả của thuật toán. Mặt khác, đối với một
10


đầu vào cố định có một thiết kế thuật toán trực tuyến đặc biệt mà khi đó sẽ có
một chi phí tối ưu. Điều này cho thấy rằng không có một thuật toán trực tuyến
tốt nhất thực hiện trên tất cả các đầu vào khác nhau. Tuy nhiên, sự phát triển của
một lí thuyết thuật toán cho các bài toán trực tuyến chỉ có thể dựa vào đánh giá
về chất lượng của các thuật toán trực tuyến đó.
Một đánh giá đưa ra bởi Sleator và Tarjan [7] đề xuất tỉ lệ cạnh tranh của một
thuật toán đó là: Tỉ lệ trong trường hợp xấu nhất của chi phí đạt được bằng chi
phí của thuật toán trực tuyếnchia cho chi phí tối ưu. Như vậy, tỉ lệ cạnh tranh của
một thuật toán A được tính là:
𝑐 = 𝑚𝑎𝑥𝑟

𝑐𝑜𝑠𝑡 𝐴 (𝑟)

(1)

𝑂𝑃𝑇 (𝑟)

Trong đó, r là tập tất cả các đầu vào. Thông thường,sẽ tồn tại một hằng số
độc lập với đầu vào r để loại bỏ sự phụ thuộc vào trạng thái ban đầu. Một thuật
toán được gọi là c – cạnh tranh hoặc chỉ đơn giản là cạnh tranh nếu nó có hữu
hạn cạnh tranh với tỉ lệ c. Cuối cùng, các nghiên cứu về các bài toán trực tuyến
sử dụng tỉ lệ cạnh tranh tốt nhất được gọi là phân tích cạnh tranh.
Phân tích cạnh tranh đã được áp dụng thành công cho nhiều vấn đề trực tuyến
tự nhiên. Hơn nữa, nó phục vụ như là một biện pháp thống nhất cho việc nghiên
cứu các thuộc tính chung của các bài toán trực tuyến. Các bài toán trực tuyến đã
và đang được nghiên cứu đối với nhiều vấn đề tự nhiên. Một trong số đó là các

hệ thống nhiệm vụ trong không gian mêtric, nổi bật là các bài toán quản lí dữ
liệu và quản lí bộ nhớ trực tuyến như bài toán phân trang. Một hệ thống nhiệm
vụ cung cấp một chuỗi các kí hiệu đầu vào, gọi là nhiệm vụ, các chi phí thực
hiện một nhiệm vụ phụ thuộc vào trạng thái nội bộ của hệ thống và các loại
nhiệm vụ yêu cầu. Một hệ thống nhiệm vụ metric là một hệ thống nhiệm vụ với
các chi phí của việc thay đổi trạng thái đáp ứng các bất đẳng thức tam giác: Nếu
thay đổi từ trạng thái A sang trạng thái C thì chi phí không quá thay đổi từ A đến
B và từ B đến C. Trong trường hợp của bài toán phân trang, trong trạng thái nội
11


tại của hệ thống đều là tập các trang của bộ nhớ nhanh, rất dễ dàng để thấy rằng
chi phí của việc thay đổi trạng thái nội bộ đáp ứng các bất đẳng thức tam giác.
Khi tất cả các nhiệm vụ được yêu cầu thực hiện, tỉ lệ cạnh tranh là 2n-1, trong đó
n là số các trạng thái nội bộ.
Tóm lại, đối với thuật toán ngoại tuyến (thuật toán offline), các dữ liệu đầu
vào được nhập một lần toàn bộ trước khi thuật toán thực hiện. Tuy nhiên đối với
các thuật toán trực tuyến (thuật toán online), các dữ liệu đầu vào không được
nhập một lần toàn bộ trước khi thuật toán thực hiện do điều kiện không gian nhớ
hoặc do tính chất dữ liệu. Tại mỗi bước thực hiện thuật toán phải có phương án
kết quả mà không biết dữ liệu tiếp theo sẽ ra sao. Vì thế, thuật toán trực tuyến
phải dự đoán được quy luật phân bố dữ liệu và xử lí trong trường hợp xấu nhất.
Độ phức tạp của thuật toán trực tuyến là tuyến tính dựa theo kích thước dữ liệu
đầu vào do xử lí lần lượt, liên tiếp. Thuật toán trực tuyến không cho ra kết quả
chính xác duy nhất, tuy nhiên các thuật toán này thường giảm thiểu các lỗi chiến
lược. Vì thế, đối với thuật toán trực tuyến, chúng ta quan tâm tới việc đánh giá
hiệu năng của thuật toán, đó là kết quả tốt nhất trong điều kiện (thời gian, không
gian) cho phép.
1.2.2 Phân tích cạnh tranh
Việc phân tích hiệu suất của một thuật toán trực tuyến là vấn đề luôn được

quan tâm. Đối với một bài toán tối ưu hóa, hiệu suất của một thuật toán trực
tuyến có thể được đo lường bằng cách so sánh chi phí thuật toán đó với một
thuật toán tối ưu đã có. Tại thời điểm này, người ta có thể tự hỏi suy luận như thế
nào về các chi phí cho một thuật toán trực tuyến, vì nếu đã biết thuật toán tối ưu
để giải quyết bài toán đó, thì đơn giản nhất là có thể dùng luôn thuật toán này.
Giả thuyết rằng đã có một thuật toán tối ưu giả OPT đối với một bài toán trực
tuyến.

12


Hiệu suất của một thuật toán trực tuyến có thể được đo lường bằng tỉ lệ cạnh
tranh của nó. Cho r = r1, r2, …, rn là dãy đầu vào của một thuật toán trực tuyếnA
và với OPT là hiệu suất của thuật toán offline tối ưu.
Khi đó tỉ lệ cạnh tranh c được xác định là tỉ lệ trong trường hợp tồi tệ nhất
của chi phí đạt được bằng chi phí của thuật toántrực tuyếnA chia cho chi phí tối
ưu (theo (1)). Một thuật toántrực tuyếnA là c-cạnh tranh nếu như với bất kì chuỗi
đầu vào r nào thì sẽ tồn tại một hằng số b sao cho: 𝑐𝑜𝑠𝑡𝐴 (𝑟) ≤ c. OPT(r)+b.
Nếu A là c-cạnh tranh thì chúng ta nói rằng A có tỉ lệ cạnh tranh là c. Bằng
trực giác, điều này có nghĩa là chi phí cho các thuật toán A là không nhiều hơn
một yếu tố không đổi lần của c và lớn hơn so với chi phí cho một thuật toán tối
ưu ẩn giả của chuỗi đầu vào lên đến một hằng số phụ.
Một chiến thuật phổ biến trong thiết kế và phân tích thuật toán là sử dụng
ngẫu nhiên để cải thiện hiệu suất. Một ví dụ điển hình cho nguyên tắc này là lựa
chọn ngẫu nhiên một phần tử làm trục trong thuật toán sắp xếp nhanh (Quick
sort).
Chúng ta có thể mở rộng việc sử dụng tính ngẫu nhiên để phân tích và thiết
kế thuật toán trực tuyến. Với biến ngẫu nhiên X, E(X) là giá trị kì vọng của X.
Khi đó, một thuật toán trực tuyến ngẫu nhiên A là c-cạnh tranh nếu như với bất
kì chuỗi đầu vào r, luôn tồn tại một hằng số b sao cho: E(𝑐𝑜𝑠𝑡𝐴 (𝑟)) ≤ c.

OPT(r)+b.
Trong cả hai cách thiết kế ngẫu nhiên và xác định, chúng tôi luôn mong muốn
thiết kế một thuật toán trực tuyến nhằm làm giảm tối thiểu tỉ lệ cạnh tranhc. Điều
này cho chúng ta một sự đảm bảo về hiệu suất của một thuật toán trực tuyến so
với một thuật toán tối ưu [9].
1.2.3 Một số bài toán điển hình
Tương tự như đối với các phương pháp khác, có một số bài toán điển hình
cho thuật toán trực tuyến. Đặc biệt phải kể đến là bài toán thuê hay mua, bài toán
13


thư kí, bài toán k-server. Trong phần này, luận văn sẽ trình bày về hai bài toán
ban đầu. Chương II sẽ trình bày chi tiết về bài toán k-server.
1.2.3.1 Bài toán thuê hay mua (rent-or-buy problem)1
Bài toán thuê hay mua (rent-or-buy problem) [14] được mô tả như sau: Một
người quyết định học môn trượt tuyết do yêu thích. Đây là một môn thể thao cần
có một số thiết bị chuyên sâu như giày trượt, ván trượt, gậy,.... Nếu người đó
mua giày trượt tuyết thì một đôi có giá lày$ (y là một số tiền khá lớn) và nếu như
thuê đôi giày đó vào ngày cuối tuần sẽ có giá là x$/1 ngày. Nếu như người chơi
học trượt tuyết và đi chơi trong t lần, khi đó số tiền phải bỏ ra là m = t*x. Vậy
vấn đề đưa ra là người chơi nên mua hay nên thuê giày để số tiền phải bỏ ra là ít
nhất (y$ hoặc m$)?Việc thuê hay mua giày phụ thuộc vào số lần người chơi sẽ đi
trượt tuyết trong tương lai. Tuy nhiên, số lần đi trượt tuyết này sẽ không biết
trước do có nhiều lí do: người chơi bận công việc, thời tiết xấu, người chơi
không may bị tai nạn hoặc sau một số lần chơi thì người chơi mất hứng, không
muốn chơi trượt tuyết nữa,... Mỗi lần đi chơi, người chơi phải quyết định xem
nên mua hay thuê giày. Nếu biết trước số lần đi mua giày, người chơi có thể tính
toán được chi phí tối thiểu. Tại mỗi lần chơi, nếu lần trước đã mua giày thì thuật
toán này kết thúc, nếu chưa thì sẽ quyết định thuê hay mua dựa vào dữ kiện là số
lần chơi. Đây là một trong những bài toán tối ưu, đầu vào lần lượt được đưa vào

ở mỗi lần thực hiện thuật toán. Vì thế bài toán này sẽ được giải quyết bằng thuật
toán trực tuyến. Như vậy, có thể hiểu bài toán theo cách phân tích sau:
o Input: Giá thuê, giá mua.
o Output: Thời điểm mua giày để đạt hiệu quả cao nhất.
Sử dụng thuật toán trực tuyến để giải quyết bài toán thuê hay mua, cần sử dụng
phân tích cạnh tranh và xác định tỉ lệ cạnh tranh cho bài toán này theo công thức:

/>
1

14


𝑐=

𝑂𝑛𝑙𝑖𝑛𝑒𝐴𝑙𝑔𝑜𝑟𝑖𝑡ℎ𝑚𝑆𝑜𝑙𝑢𝑡𝑖𝑜𝑛
𝑂𝑝𝑡𝑖𝑚𝑎𝑙𝑆𝑜𝑙𝑢𝑡𝑖𝑜𝑛

Như vậy, thuật toán trực tuyến cần tìm ra thời điểm t(số lần chơi) để giá trịc
tối ưu nhất.
Giả sử số tiền mua một đôi giày trượt tuyết là 500$ và mỗi lần thuê giày tốn
50$. Khi đó, nếu người chơi đi trượt tuyết 1 lần, khi đó t = 1 và c = 500/50 = 10.
Nếu người chơi đi trượt tuyết 2 lần, khi đó t = 2, c = 550/100 = 5.5.
 Tổng quát:
o Khi t ≤ 10, c =

500+50(𝑡−1)

o Khi t ≥ 10, c =


500+50(𝑡−1)

50𝑡
500

=1+

9
𝑡

= 0.9 +

𝑡
10

o Vậy, tỉ lệ cạnh tranh tối ưu c = 1.9 khi t = 10.
Như vậy, nếu người chơi đi trượt tuyết 11 hoặc hơn 11 lần, thì tốt nhất là nên
mua giày. Nếu như đi trượt tuyết 9 lần hoặc ít hơn thì thuê sẽ là tốt hơn. Và nếu
như đi trượt tuyết 10 lần thì thuê hay mua cũng như nhau.
1.2.3.2 Bài toán thư kí (Secretary_problem)2
Bài toán thư ký là một bài toán nổi tiếng trong lý thuyết dừng tối ưu. Bài toán
này đã được nghiên cứu trong xác suất ứng dụng, thống kê, và lý thuyết quyết
định. Bài toán được xuất bản lần đầu tiên bởi Martin Gardner trong Scientific
American năm 1960([10], [11]).
Bài toán thư kí được phát biểu như sau: Một người quản lý cần tuyển thư ký
tốt nhất trong n ứng viên có thể xếp hạng. Các ứng viên được phỏng vấn lần lượt
theo một thứ tự ngẫu nhiên. Quyết định cho mỗi ứng viên phải được đưa ra ngay
sau khi phỏng vấn ứng viên đó. Sau khi đã bị từ chối, ứng viên đó sẽ không thể
được tuyển. Trong quá trình phỏng vấn, người quản lý có thể xếp hạng các ứng


2

/>15


viên đã phỏng vấn nhưng không biết gì về chất lượng của các ứng viên chưa
phỏng vấn. Nếu người quản lý đồng ý một ứng viên bất kỳ cho vị trí thư ký đó
thì quá trình phỏng vấn kết thúc bất chấp còn ứng viên chưa phỏng vấn hay
không. Nếu người quản lý vẫn chưa chọn ai cho đến ứng viên cuối cùng, bạn
phải tuyển người đó cho vị trí thư ký.Câu hỏi đặt ra là nên sử dụng chiến thuật
nào để tối ưu hóa xác suất tuyển được ứng viên tốt nhất. Như vậy, người quản lý
cần có chính sách phỏng vấn tuyển dụng thế nào để tuyển được người tốt nhất
cho vị trí thư kí?
Đối với bài toán này, chúng ta có thể thể thiết kế thuật toán làm hai pha chính.
Một là pha thử: Công ty sẽ phỏng vấn n/e(trong đó e là cơ số của logarit tự
nhiên, e = 2.71828…) người được lấy ngẫu nhiên từ n người, không tuyển ai.
Hai là pha tuyển: Công ty phỏng vấn lần lượt những người tiếp theo và chấp
nhận người đầu tiên tốt hơn tất cả những người đã phỏng vấn. Khi đó có thể
chứng minh rằng thuật toán theo ý tưởng trên cho khả năng chọn được người tốt
nhất với xác suất 1/e (37%).
Như vậy, với n ứng viên, được xếp hạng theo thứ tự 1,2,…,n.Dãy các ứng
viên được phỏng vấn là một hoán vị π của n giá trị 1,2,…,n.Khi đó, pha thử sẽ
tìm giá trị m = min (π[1], …, π[t]) và pha tuyển sẽ tìm giá trị j đầu tiên sao cho: j
> t và π[t] < m. Xác suất để π[t] = 1 là:
𝑛

𝑃 π j = 1 và lấy người tốt nhất tại vị trí j
𝑗 =𝑡+1

=


𝑛
𝑗 =𝑡+1 𝑃(π

j = 1 &𝑚𝑖𝑛⁡
(

{π 1 , … , π t })
n

=
j=t+1

1 t
.
n j−1

Khi đó, xác suất để π[j] = 1 là:

16

π[1],

…,

π[j-1])





𝑝=

1 t
n
j=t+1 n . j−1

t

= (
n

n−1 1
j=1 j



t−1 1
j=1 j )

=

t
n

ln n − ln t =

t
n

. ln


n
t

Và p tốt nhất là 1/e với giá trị t = n/e. Vì thế, xác suất để chọn người tốt nhất ở vị
trí j (π j = 1) là 1/e = 37%.
Tuy nhiên, thuật toán có thể thất bại khi một trong các điều kiện sau xảy ra:
 π j = 1 với j ≤ 𝑡 tức là khi tiêu chuẩn đã bị đặt quá cao.
 ∃𝑘 màπ k > 𝜋 j và π j hơn trước.
Bài toán thuê hay mua và bài toán thư kí là hai bài toán điển hình của thuật
toán trực tuyến. Ngoài ra còn một số bài toàn điển hình khác như bài toán cập
nhật danh sách, bài toán tên cướp, và đặc biệt là bài toán k-server sẽ được trình
bài chi tiết trong chương II. Do không được biết trước toàn bộ dữ liệu, thuật toán
trực tuyến có thể phải đưa ra những lựa chọn không tối ưu. Việc phân tích thuật
toán trực tuyến tập trung vào tìm hiểu chất lượng kết quả thu được tốt đến
đâu. Phân tích cạnh tranh cụ thể hóa ý tưởng này bằng cách so sánh kết quả của
thuật toán trực tuyến với kết quả tối ưu của thuật toán ngoại tuyến cho cùng một
dữ liệu vào.
Ngoài mô hình thuật toán trực tuyến còn có nhiều mô hình khác trong đó dữ
liệu vào cũng được cung cấp từng phần một cho thuật toán, chẳng hạn như thuật
toán dòng dữ liệu (tập trung vào lượng bộ nhớ cần dùng để lưu trữ thông tin về
phần dữ liệu đã xử lý), thuật toán động (tập trung vào thời gian cần thiết để cập
nhật kết quả sau mỗi lần dữ liệu thay đổi) và thuật toán học trực tuyến.

17


Chương 2. Bài toán k-server và thuật toán hàm công việc
Bài toán k-server được đưa ra bởi Manasse, McGoech và Sleator [12]và sau

đó đã được nghiên cứu một cách rộng rãi. Trong chương này, chúng tôi sẽ trình
bày chi tiết về bài toán k-server, các khái niệm liên quan và các thuật toán để giải
quyết bài toán này. Trong đó, luận văn tập trung vào thuật toán hàm công việc và
thuật toán hàm công việc cải tiến.
2.1 Bài toán k-server
2.1.1 Định nghĩa
Trước khi tìm hiểu về bài toán k-server, cùng nhắc lại định nghĩa về không
gian mêtric.
Định nghĩa không gian mêtric: Một không gian mêtric M = (V,d) trong đó V là
tập các điểm với một hàm khoảng cách d: V→R thỏa mãn các tính chất sau:
 d(u,v) ≥ 0 với u,v ∈ V
 d(u,v) = 0 nếu u=v
 d(u,v) = d(v,u) với u,v ∈ V
 d(u,v) + d(v,w) ≥ d(u,w) với u,v,w ∈ V
Trong bài toán k-server [12], có k máy chủ, mỗi máy chủ chiếm một vị trí
(điểm) trong một không gian mêtric cố định M có m vị trí. Bài toán cần giải
quyết một yêu cầu ritại một vị trí x ∈ M xuất hiện. Mỗi yêu cầu phải được phục
vụ bởi một máy chủ trước khi yêu cầu tiếp theo đến. Để phục vụ yêu cầu mới tại
x, một thuật toán trực tuyến phải di chuyển một máy chủ đến x(trừ khi ở đó đã có
một máy chủ). Các quyết định để máy chủ di chuyển có thể chỉ dựa trên các yêu
cầu đã có r1, r2, ..., ri-1, ri, do đó nó phải thực hiện mà không có bất kỳ thông tin
về các yêu cầu trong tương lai ri+1, ri+2,... Bất cứ khi nào thuật toán di chuyển
một máy chủ từ vị trí x đến một vị trí y thì nó phải chịu một chi phí bằng với

18


khoảng cách giữa x và y trong M. Mục tiêu không phải chỉ để phục vụ các yêu
cầu mà còn tối thiểu tổng khoảng cách di chuyển của tất cả các máy chủ.
Để làm cụ thể vấn đề này, hãy xem xét ví dụ sau: Một công ty bán các thiết bị

máy tính mở chiến dịch hỗ trợ khách hàng khi mua sản phẩm của họ. Công ty có
hai kĩ thuật viên là An và Bình. Hai kĩ thuật viên này sẽ phục vụ các khách hàng
tại các thành phố Hà Nội, Thái Nguyên, TP Hồ Chí Minh. Bài toán này
tươngđương với bài toán k-server, khi đó, các kĩ thuật viên được coi là các máy
chủ, vậy k = 2. Khoảng cách giữa Hà Nội và Thái Nguyên là 30km, trong khi
khoảng cách từ cả hai thành phố đến Hà Nội đến TP Hồ Chí Minh là 1620km,
Thái Nguyên đến TP Hồ Chí Minh là xấp xỉ1690km. Giả sử ban đầu cả hai kĩ
thuật viên đều ở thành phố TP Hồ Chí Minh. Công ty phải xem xét một thuật
toán để có thể hỗ trợ thiết bị được cho các khách hàng mà giảm thiểu tối đa chi
phí đi đường của các kĩ thuật viên.
Mỗi buổi sáng công ty phải đáp ứng yêu cầu của khách hàng ở Hà Nội và buổi
chiều đáp ứng khách hàng ởThái Nguyên. Như vậy, công ty sẽ chỉ định một kĩ
thuật viên (Ví dụ An) đến thành phố Hà Nội, sau đó cô ấy sẽ luôn được giao tất
cả các yêu cầu của khách hàng ở thành phố này và thành phố Thái Nguyên. Với
giải pháp này, công ty sẽ tốn một chi phí giữa thành phố Hà Nội và thành phố
Thái Nguyên là 60km. Sau một nămthì chi phí của công việc xấp xỉ18200km
(trừ những ngày nghỉ). Trong khi đó, nếu một thuật toán off-line có thể biết trước
yêu cầu, và có thể gửi cả An và Bình đến thành phố A và B, thì chi phí chỉ có
3310km. Như vậy, tỉ lệ cạnh tranh là: 18200/3310 = 5.5. Tỉ lệ cạnh tranh này là khá
cao đối với bài toán k-server với k = 2. Như vậy, có thể điều chỉnh thuật toán để tối
ưu tỉ lệ cạnh tranh, làm cho chi phí của công ty giảm thiểu tối ưu nhất.
Chúng ta hãy xem xét ví dụ về thuật toán 4-server:

19


Hình 2: Ví dụ thuật toán 4-server.
Trong ví dụ trên:
 Hình 2(a):Có 4 máy chủ ở vị trí ban đầu.
 Hình 2(b): Yêu cầu đầu tiên cần được thực hiện ở vị trí r1.

 Hình 2(c): Một máy chủ được chỉ định đi đến để thực hiện yêu cầu tại vị
trír1 với khoảng cách d1.
 Hình 2(d): Yêu cầu tại vị trí r1 được thực hiện.
 Hình 2(e): Một máy chủ di chuyển một khoảng cách d2 để phục vụ yêu
cầu tại vị trí r2.
20


×