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

Một số bài toán tối ưu tổ hợp trên đồ thị

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 (315.47 KB, 27 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC KHOA HỌC

ĐOÀN NGỌC LÀNH

MỘT SỐ BÀI TOÁN
TỐI ƯU TỔ HỢP TRÊN ĐỒ THỊ

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

Thái Nguyên - 2012

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC KHOA HỌC

ĐOÀN NGỌC LÀNH

MỘT SỐ BÀI TOÁN
TỐI ƯU TỔ HỢP TRÊN ĐỒ THỊ

Chuyên ngành: TOÁN ỨNG DỤNG
Mã số : 60.46.36

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

Người hướng dẫn khoa học: TS VŨ MẠNH XUÂN



Thái Nguyên - 2012

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




Mục lục
Mở đầu

3

1 Tối ưu tổ hợp
1.1 Thuật toán và độ phức tạp của thuật toán . .
1.1.1 Thuật toán . . . . . . . . . . . . . . . .
1.1.2 Độ phức tạp của thuật toán . . . . . .
1.1.3 Đánh giá thời gian tốt nhất, tồi nhất và
của một thuật toán . . . . . . . . . . .
1.2 Tối ưu tổ hợp . . . . . . . . . . . . . . . . . .
1.2.1 Bài toán tối ưu tổ hợp . . . . . . . . .
1.2.2 Một số bài toán cụ thể . . . . . . . . .
1.2.3 Bài toán lớp P và lớp N P . . . . . . .

. . . . . .
. . . . . .
. . . . . .
trung bình
. . . . . .
. . . . . .

. . . . . .
. . . . . .
. . . . . .

2 Một số bài toán tối ưu tổ hợp trên đồ thị
2.1 Một số khái niệm . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Đồ thị vô hướng . . . . . . . . . . . . . . . . . . .
2.1.2 Đồ thị có hướng . . . . . . . . . . . . . . . . . . .
2.1.3 Đường đi, chu trình. Đồ thị liên thông . . . . . . .
2.2 Thuật toán tìm kiếm trên đồ thị . . . . . . . . . . . . . .
2.2.1 Thuật toán tìm kiếm theo chiều sâu trên đồ thị . .
2.2.2 Tìm kiếm theo chiều rộng trên đồ thị . . . . . . .
2.3 Bài toán đường đi ngắn nhất . . . . . . . . . . . . . . . .
2.3.1 Đường đi ngắn nhất xuất phát từ một đỉnh đến các
đỉnh còn lại_Thuật toán Dijkstra . . . . . . . . .
2.3.2 Đường đi ngắn nhất giữa tất cả các cặp đỉnh_Thuật
toán Floyd . . . . . . . . . . . . . . . . . . . . . .
2.4 Bài toán luồng cực đại trong mạng và ứng dụng . . . . . .
2.4.1 Mạng. Luồng trong mạng. Bài toán luồng cực đại .
1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



.
.
.

5

5
5
7

.
.
.
.
.

10
13
13
14
16

.
.
.
.
.
.
.
.

18
18
18
19
20

22
22
25
29

. 31
. 37
. 41
. 41


2.4.2
2.4.3
2.4.4
2.4.5

Lát cắt. Đường tăng luồng. Định lí Ford - Fulkerson
Thuật toán tìm luồng cực đại trong mạng . . . . . .
Một số bài toán luồng tổng quát . . . . . . . . . . .
Một số ứng dụng trong tổ hợp từ bài toán luồng . .

43
46
54
57

Kết luận

64


Tài liệu tham khảo

65

2

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




Mở đầu
Lý thuyết đồ thị là một lĩnh vực nghiên cứu có ý nghĩa thực tiễn cao
đã bắt đầu từ lâu. Tuy nhiên, do việc tính toán trên đồ thị thường là cần
khối lượng tính toán cũng như không gian nhớ lớn, vì vậy gần đây cùng
với sự phát triển mạnh mẽ của kỹ thuật máy tính điện tử, các bài toán tối
ưu trên đồ thị ngày càng được quan tâm và đã đạt được nhiều kết quả khả
quan. Đáng chú ý, việc chứng minh giả thuyết bốn màu có thể xem như
một minh chứng rõ nét về việc chứng minh bài toán nhờ máy tính điện
tử. Mặc dù có ý nghĩa thực tiễn cao nhưng lý thuyết đồ thị cũng chỉ mới
được đưa vào chương trình giảng dạy và nói chung còn sơ sài. Đề tài này
đặt vấn đề nghiên cứu những vấn đề cơ bản về thuật toán, độ phức tạp
thuật toán, m ột số bài toán tối ưu cụ thể trên đồ thị và trình bày thuật
toán cũng như kết quả tính toán với những bài toán cụ thể.
Nội dung của bản Luận văn gồm 2 chương.
Chương 1 trình bày khái quát về thuật toán, độ phức tạp của thuật
toán, nêu một số bài toán có độ phức tạp đa thức và không đa thức.
Chương 2 trình bày một số thuật toán giải một lớp những bài toán:
duyệt đồ thị, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại
và minh họa trên những ví dụ cụ thể.

Dù đã rất cố gắng, nhưng chắc chắn nội dung được trình bày trong luận
văn không tránh khỏi thiếu sót nhất định, em rất mong nhận được sự góp
ý của các thầy cô giáo và các bạn.
Luận văn này được hoàn thành dưới sự chỉ bảo và hướng dẫn tận tình
của TS Vũ Mạnh Xuân. Thầy đã dành nhiều thời gian hướng dẫn và giải
đáp các thắc mắc của tôi trong suốt quá trình làm luận văn. Em xin được
bày tỏ lòng biết ơn sâu sắc đến Thầy.
Tôi xin cảm ơn Sở Nội vụ, Sở Giáo dục và Đào tạo Tuyên Quang, trường
THPT Xuân Vân, Tổ Toán trường THPT Xuân Vân đã giúp đỡ tạo điều
kiện cho tôi hoàn thành khóa học này.
3

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




Em xin gửi tới các thầy cô khoa Toán, phòng đào tạo sau đại học Trường
Đại học Khoa Học, Đại học Thái Nguyên cũng như các Thầy cô đã tham
gia giảng dạy khóa cao học 2010 - 2012, lời cảm ơn sâu sắc nhất về công
lao dạy dỗ trong suốt quá trình giáo dục, đào tạo của Nhà trường.
Thái Nguyên, ngày 15 tháng 7 năm 2012
Người thực hiện
Đoàn Ngọc Lành

4

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên





Chương 1

Tối ưu tổ hợp
Chương này trình bày về lớp bài toán tối ưu tổ hợp, thuật toán và mô tả
thuật toán bằng ngôn ngữ tựa Passcal, đánh giá độ phức tạp của thuật
toán. Nêu một số bài toán cụ thể thuộc lớp bài toán tối ưu tổ hợp, từ đó
đưa ra khái niệm bài toán lớp P và lớp NP.

1.1
1.1.1

Thuật toán và độ phức tạp của thuật toán
Thuật toán

Khái niệm thuật toán bắt đầu từ thuật ngữ “Algorithm” (thuật toán) là tên
nhà toán học Arập: Aba Ja’fa Mohamedibn Musaal Khowarizmi, người đã
viết cuốn sách về các chữ số Hindu - cơ sở của kí hiệu số thập phân hiện
đại. Ban đầu từ algorism được dùng để chỉ các quy tắc thực hiện các phép
tính số học với các con số được viết trên hệ thập phân. Sau đó, Algorism
chuyển thành Algorithm vào thế kỷ XIX. Với sự quan tâm ngày càng tăng
đối với các máy tính, khái niệm thuật toán đã được định nghĩa một cách
hình thức chính xác thông qua máy Turing. Tuy nhiên trong Luận văn này
khái niệm thuật toán được hiểu trực quan như sau.
Định nghĩa 1.1.1. Thuật toán để giải một bài toán (P) là một thủ tục
xác định, được chia ra thành các phép toán cơ bản, biến đổi một dãy các
dấu hiệu diễn tả các dữ liệu, không quan trọng ở chỗ thuộc bản chất gì
của bài toán (P) thành một dãy các dấu hiệu đặc trưng cho các kết quả
của (P).

Thuật toán có những đặc trưng sau:

• Đầu vào (Input): Một thuật toán nhận các giá trị đầu vào từ một
tập hợp đã được chỉ rõ (tập đã xác định).
5

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




• Đầu ra (Output): Từ mỗi tập có các giá trị đầu vào, thuật toán sẽ
tạo ra các giá trị đầu ra tương ứng. Các giá trị đầu ra chính là nghiệm
(lời giải) của bài toán.
• Tính chính xác (Precision): Các bước của thuật toán phải được mô
tả chính xác. Ở mỗi bước, các thao tác phải hết sức rõ ràng, không
gây nên sự nhập nhằng, lộn xộn, tùy tiện, đa định nghĩa. Nói rõ hơn,
trong cùng một điều kiện hai bộ xử lý cùng thực hiện một bước của
thuật toán phải cho những kết quả như nhau.
• Tính hữu hạn hay tính dừng (Finiteness): Sau một số hữu hạn
bước thuật toán phải cho kết quả với mọi đầu vào.
• Tính đơn trị (Uniqueness): Các kết quả trung gian của từng bước
thực hiện thuật toán được xác định một cách đơn trị, chỉ phụ thuộc
đầu vào và các kết quả của các bước trước. Với hai bộ dữ liệu giống
nhau cho trước làm input, thuật toán đơn định sẽ thi hành các mã lệnh
giống nhau và cho kết quả giống nhau, còn thuật toán ngẫu nhiên có
thể thực hiện theo những mã lệnh khác nhau và cho kết quả khác
nhau.
• Tính tổng quát (Generality): Thuật toán có thể giải bất kỳ một bài
toán nào trong lớp các bài toán đang xét. Với thuật toán có đầu vào

là các bộ dữ liệu khác nhau trong một miền xác định thì có thể vận
dụng được thuật toán.
• Tính hiệu quả (The effectiveness): Hiệu quả về thời gian: Thuật
toán phải được thực hiện trong thời gian cho phép, điều này khác với
lời giải toán (chỉ cần chứng minh là kết thúc sau hữu hạn bước). Tính
hiệu quả về bộ nhớ: Kích thước của thuật toán phải đủ nhỏ để phù
hợp với khả năng lưu trữ.
Mô tả thuật toán: Có nhiều cách trình bày thuật toán, như dùng ngôn
ngữ tự nhiên, ngôn ngữ lưu đồ (sơ đồ khối), ngôn ngữ lập trình, ngôn ngữ
phỏng trình. Trong đề tài này các thuật toán được trình bày bằng ngôn
ngữ tựa Pascal, trong đó cho phép vừa mô tả thuật toán bằng ngôn ngữ
thông thường, vừa sử dụng những cấu trúc lệnh tương tự như của ngôn
ngữ lập trình Pascal.

6

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




Ví dụ 1.1.2. Mô tả thuật toán tìm phần tử lớn nhất trong một dãy hữu
hạn các số nguyên.
a) Dùng ngôn ngữ tự nhiên để mô tả các bước cần thực hiện.
1. Đặt giá trị cực đại tạm thời bằng số nguyên đầu tiên trong dãy. (Cực
đại tạm thời sẽ là số nguyên lớn nhất đã được kiểm tra ở một giai đoạn
nào đó của thủ tục.)
2. So sánh số nguyên tiếp sau với giá trị cực đại tạm thời, nếu nó lớn hơn
giá trị cực đại tạm thời thì đặt cực đại tạm thời bằng số nguyên đó.
3. Lặp lại bước trước nếu còn các số nguyên trong dãy.

4. Dừng khi không còn số nguyên nào nữa trong dãy. Cực đại tạm thời ở
điểm này chính là số nguyên lớn nhất của dãy.
b) Thuật toán mô tả tựa Passcal.
Input: Dãy gồm n số nguyên a1 , a2 , ..., an
Output: Max là số lớn nhất trong dãy.
Procedure Max(a1 , a2 , ..., an : integer);
Begin
Max:= a1 ;
for i:= 2 to n do
(* Nếu ai lớn hơn Max thì gán lại Max *)
if M ax < ai then M ax := ai ;
End;
Thuật toán này trước hết gán số hạng đầu tiên a1 của dãy cho biến M ax.
Vòng lặp for được dùng để kiểm tra lần lượt các số hạng của dãy. Nếu
một số hạng lớn hơn giá trị hiện thời của M ax thì nó được gán làm giá
trị mới của M ax.
1.1.2

Độ phức tạp của thuật toán

Để đánh giá khả năng ứng dụng của chương trình ta cần phân tích tính
hiệu quả của thuật toán. Phân tích thuật toán là quá trình tìm ra những
đánh giá về thời gian tính cũng như dung lượng bộ nhớ cần thiết để thực
hiện thuật toán. Để đo tính hiệu quả của một thuật toán đã cho, ta thiết
lập mối quan hệ giữa thời gian tiến hành thuật toán, được diễn tả bởi số
các phép toán cơ bản với kích thước của bài toán đang xét, hoặc được diễn
tả bởi số các dấu hiệu cần thiết để mã hóa các dữ liệu của bài toán.
Có ba câu hỏi được đặt ra khi đánh giá thuật toán:
7


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




1) Những phép toán cơ bản đang nói đến là những phép toán nào?
2) Bộ mã hóa nào của các dữ liệu cho phép ta đo kích thước của bài
toán?
3) Những hàm nào liên kết kích thước với số các phép toán cơ bản mà
có thể giúp ta nói rằng một thuật toán là hiệu quả?
Có thể cho rằng việc trả lời câu hỏi thứ ba cho phép ta trả lời hai câu hỏi
đầu.
Thước đo hiệu quả của một thuật toán là thời gian mà máy tính sử dụng
để giải bài toán theo thuật toán đang xét, khi các giá trị đầu vào có một
kích thước xác định. Một thước đo thứ hai là dung lượng bộ nhớ đòi hỏi
để thực hiện thuật toán khi các giá trị đầu vào có kích thước xác định.
Các vấn đề như thế liên quan đến độ phức tạp tính toán của một thuật
toán.
Định nghĩa 1.1.3. Độ phức tạp tính toán của một thuật toán là lượng
thời gian và bộ nhớ cần thiết để thực hiện thuật toán (ta gọi là thời gian
tính của thuật toán).
Vì việc xem xét độ phức tạp không gian gắn liền với các cấu trúc dữ liệu
đặc biệt được dùng để thực hiện thuật toán nên ở đây ta sẽ tập trung xem
xét độ phức tạp thời gian tính của thuật toán. Chúng ta sẽ quan tâm đến:

• Thời gian tính tốt nhất của thuật toán với đầu vào kích thức n, là thời
gian tối thiểu cần thiết để thực hiện thuật toán.
• Thời gian tính tồi nhất của thuật toán với đầu vào kích thước n, là
thời gian nhiều nhất cần thiết để thực hiện thuật toán.
• Thời gian tính trung bình của thuật toán, là thời gian trung bình cần

thiết để thực hiện thuật toán, trên tập hữu hạn các đầu vào kích thước
n.
Để tính toán thời gian tính của thuật toán ta sẽ đếm số câu lệnh mà nó
phải thực hiện, hoặc trong một số trường hợp cụ thể đếm số các phép tính
số học, so sánh, gán, ... mà thuật toán đòi hỏi thực hiện. Đây là tiêu chuẩn
khách quan để đánh giá tính hiệu quả của thuật toán.
Ví dụ 1.1.4. Kiểm tra số nguyên dương n có phải là nguyên tố không?
8

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....



data error !!! can't not
read....



data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....


data error !!! can't not
read....

data error !!! can't not
read....



data error !!! can't not
read....

data error !!! can't not
read....


data error !!! can't not
read....

data error !!! can't not
read....



×