Thuật toán hàm công việc giải bài toán Kserver Thuật toán hàm công việc giải bài toán Kserver Thuật toán hàm công việc giải bài toán Kserver luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
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
Trang 3Lờ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
Trang 4Mụ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 14
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
Trang 53.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
Trang 6Mở đầ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 trong thiế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 được những thuậ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ình tí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úng chỉ 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ải là 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 khi khô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ừng phầ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ấp tạ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
(online algorithm), trong luận văn này chúng tôi gọi là thuật toán online Như
Trang 7vậ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ày chú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
k-server, 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án trực tuyến cho 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
Trang 8Chươ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 Wirth thì:
“Thuật toán + Cấu trúc dữ liệu = Chương trình”
(Algorithms + Data Structures = Programs)
Trang 9Thuậ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ụng các công thức hay quy tắc, quy trình đã được công nhận là đúng
Trang 10hay đã đượ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ăng củ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
Trang 111.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
Trang 121.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ụ:
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:
Trang 13 Phương pháp tham lam
Phương pháp quy hoạch động
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
Trang 14bao 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
Một thuật toán trực tuyến A 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 = (r 1 , …, r n ) , A đưa ra một chuỗi đầu ra y = (y 0 ,
Trang 15y j = A(r 1 , …, r j )
Tức là, với mỗi kí tự đầu vào, thuật toán A cho 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 r kí hiệu cost A (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,
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 y j-1 và y j với điều kiện y j chứa trang được yêu cầu cuối cùng là r j, đâ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ừ y j-1 sang y j Từ trang r j phải di chuyển vào trong bộ nhớ nhanh, chúng
tôi muốn y j chứa r j 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í
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 y j của thuật toán offline B bây giờ có thể phụ thuộc vào đầu vào trong
Trang 16đầ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ến chia 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
Trang 17tạ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
Trang 18Hiệ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 = r 1 , r 2 , …, r n là dãy đầu vào của một thuật toán trực tuyến A
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án trực tuyến A chia cho chi phí tối
ưu (theo (1)) Một thuật toán trực tuyến A 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 tranh c
Đ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]
Trang 191.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
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
Trang 20
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:
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 =
o Khi t ≥ 10, c =
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
Trang 21sau 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 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à:
∑ (π[ ] à ấ ườ ố ấ ạ ị í )
∑ π[ ] π[1], …, π[j-1]) π[ ] π[ ]
∑
Trang 22
Khi đó, xác suất để π[j] = 1 là:
∑
∑ ∑ ) =
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 (π[ ] ) 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:
π[ ] với j tức là khi tiêu chuẩn đã bị đặt quá cao
mà π[ ] [ ] và π[ ] min (π[1], …,π[t]) tức là sẽ gặp ứng viên tốt 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
Trang 23Chươ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 nếu u=v
d(u,v) = d(v,u) với u,v 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 r i tạ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ó r 1 , r 2 , , r i-1 , r i, 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 r i+1 , r i+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
Trang 24khoả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ăm thì 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:
Trang 25Hì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í r 1
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í r 1 với khoảng cách d 1
Hình 2(d): Yêu cầu tại vị trí r 1 được thực hiện
Hình 2(e): Một máy chủ di chuyển một khoảng cách d 2 để phục vụ yêu
cầu tại vị trí r 2
Trang 26 Hình 2(f): Một máy chủ di chuyển một khoảng cách d 3 để phục vụ yêu
cầu tại vị trí r 3
Hình 2(g): Một máy chủ di chuyển mộtkhoảng cách d 4 để phục vụ yêu cầu
tại vị trí r 4
Hình 2(h): Chuỗi yêu cầu kết thúc
Hình 2(i): Đối với các chuỗi yêu cầu r = r 1 , r 2 , r 3 , r 4 chi phí cho các thuật
toán được đưa ra bởi A (r) = d 1 + d 2 + d 3 + d 4
Bài toán k-server là một trong những bài toán thực tế, hãy xem xét các điểm trong không gian mêtric M là các địa điểm trong núi và khu vực ven biển của
Croatia [16], như thể hiện trong Hình 3 với khoảng cách xác định Vào mùa hè,
ở khu vực này cháy rừng có thể xảy ra thường xuyên Giả sử khu vực có ba máy
bay trực thăng chữa cháy (số server k = 3) Ban đầu, ba trực thăng được đặt tại
Rijeka (RI), Zadar (ZD) và Dubrovnik (DU) Nếu ngọn lửa đầu tiên bắt đầu, ví
dụ tại Split (ST), thì sau đó thuật toán trực tuyến sẽ quyết định máy bay nào trong số ba máy bay đó sẽ di chuyển đến vị trí Split để chữa cháy Dường như giải pháp là máy bay nào gần nhất sẽ được di chuyển đến Split (từ Zadar) Nhưng sự lựa chọn đó có thể là sai nếu: giả sử tất cả các vụ cháy sắp tới sẽ xuất hiện giữa Zadar, Split và Dubrovnik mà không xảy ra tại nơi nào ở Rijeka
Hình3:Ví dụ về bài toán k-server