1. Trang chủ
  2. » Tài Chính - Ngân Hàng

Một số bài toán tối ưu rời rạc trong lý thuyết đồ thị

57 925 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 1,17 MB

Nội dung

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

Trang 1

MỤC LỤC

Trang

Trang 2

LỜI CẢM ƠN

Em xin chân thành cảm ơn Ban Giám hiệu, Phòng Đào tạo Sau Đại học, Khoa Công nghệ Thông tin Trường Đại học công nghệ thông tin và

truyền thông Thái Nguyên đã tận tình giúp đỡ, tạo mọi điều kiện thuận lợi cho

em trong quá trình học tập, nghiên cứu và thực hiện luận văn

Đặc biệt, em xin gửi lời tri ân sâu sắc đến GS TS Đặng Quang Á – người đã dành nhiều thời gian, công sức và tận tình hướng dẫn khoa học cho

em trong suốt quá trình hình thành và hoàn chỉnh luận văn

Xin chân thành cảm ơn Quý Thầy, Cô đã giảng dạy, truyền đạt cho em những tri thức quý báu, thiết thực trong suốt khóa học

Cuối cùng xin bày tỏ lòng biết ơn đối với gia đình, người thân, bạn bè, đồng nghiệp đã giúp đỡ, động viên, đóng góp ý kiến quý báu cho em trong việc hoàn thành luận văn này

Thái Nguyên, ngày tháng năm 2014

Tác giả

Nguyễn Anh Văn

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi dưới sự hướng dẫn trực tiếp của GS.TS Đặng Quang Á

Mọi trích dẫn sử dụng trong báo cáo này đều được ghi rõ nguồn tài liệu tham khảo theo đúng qui định

Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm

Thái Nguyên, ngày tháng năm 2014

Tác giả

Nguyễn Anh Văn

Trang 4

DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT

Trang 5

DANH MỤC BẢNG

TrangBảng 1.1 Liệt kê tất cả các đỉnh kề với mỗi đỉnh của đồ thị

Bảng 1.2 Biểu diễn đồ thị có hướng trên hình 1.10

Bảng 2.1: Sắp xếp các cạnh theo thứ tự trọng số tăng dần

121223

Trang 6

DANH MỤC HÌNH

TrangHình 1.: Đồ thị vô hướng

Hình 1.2: Đồ thị có hướng

Hình 1.3: Đa đồ thị

Hình 1.4: Đồ thị hỗn hợp

Hình 1.5 Đồ thị có hướng

Hình 1.6 Đường đi trên đồ thị vô hướng

Hình 1.7 Đường đi trên đồ thị có hướng

Hình 1.8 Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông

Hình 1.14 Mô hình phân lớp các bài toán

Hình 2.1 Đồ thị có trọng số biểu thị tiền thuê bao hàng tháng đường

truyền thông trong mạng máy tính

Hình 2.10 Đồ thị G và H đã được tô màu

Hình 2.11 Tô màu đồ thị vô hướng

Hình 3.1 Bảng danh sách các môn thi

Hình 3.2 Đồ thị biểu diễn các môn thi

Hình 3.3 Đồ thị các môn thi đã được lên lịch

Hình 3.4 Mẫu quản lý bậc học

Hình 3.5 Mẫu quản lý phòng thực hành

Hình 3.6 Mẫu quản lý giờ thi

Hình 3.7 Mẫu chọn nhóm cho các môn thi

Hình 3.8 Mẫu chọn phòng thực hành

Hình 3.9 Mẫu xếp lịch thi

4556789101111121314151920

222530

323536373839404144455353545455565657

Trang 7

Hình 3.10 Mẫu đăng kí tài khoản

Hình 3.11 Mẫu đăng nhập hệ thống

Hình 3.12 Mẫu đổi mật khẩu

57

Trang 8

đồ thị, với cách tiếp cận đối tượng nghiên cứu và phương pháp tư duy khá độc đáo thực sự ngày càng hữu ích có nhiều ứng dụng phong phú và gây không ít bất ngờ

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 Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sỹ:

Leonhard Euler Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về 7 cái cầu ở thành phố Konigberg Một cách không chính thức, đồ thị

là một tập các đối tượng được gọi là các đỉnh (hoặc nút) nối với nhau bởi các cạnh (hoặc cung) Cạnh có thể có hướng hoặc vô hướng Đồ thị thường được vẽ dưới dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn thẳng (các cạnh) Có rất nhiều loại đồ thị đã được nghiên cứu như là cây, đồ thị ngẫu nhiên, đồ thị có hướng và vô hướng, đồ thị trọng số và không có trọng số

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ày nay, cùng với sự phát triển mạnh mẽ của khoa học và công nghệ, đặc biệt là máy tính, người ta có khả năng giải quyết được nhiều bài toán rất phức tạp Tuy nhiên, còn những vấn đề là “không giải được” cho dù kỹ thuật máy tính có phát triển và cũng có những vấn đề được xem là “quá phức tạp”, vượt mọi khả năng tính toán thực tế vì mất quá nhiều thời gian Việc nghiên cứu về

độ phức tạp của thuật toán đã cho phép chúng ta phân loại được các lớp bài toán theo từng mức độ phức tạp khác nhau, và chỉ ra ranh giới giữa các lớp bài toán giải được và những lớp bài toán không thể giải được trong thời gian

đa thức

Trang 9

Trong khuôn khổ của luận văn thạc sỹ, tôi chọn đề tài “Một số bài toán tối

ưu rời rạc trong lý thuyết đồ thị” nhằm nghiên cứu về lý thuyết đồ thị, độ phức tạp của thuật toán

2. Đối tượng nghiên cứu

Tìm hiểu tổng quan về tối ưu rời rạc, một số bài toán tối ưu thuộc lớp P , NP-C trong lý thuyết đồ thị

3. Phạm vi nghiên cứu

Luận văn nghiên cứu các kiến thức chung về tối ưu rời rạc và lý thuyết đồ thị, và tập trung vào một số bài toán tối ưu thuộc các lớp P, NP-C trong lý thuyết đồ thị và các thuật giải chúng

4. Nhiệm vụ nghiên cứu

- Tìm hiểu chung về tối ưu rời rạc và lý thuyết đồ thị

- Tìm hiểu một số bài toán tối ưu thuộc lớp P (Polynomial) trong lý thuyết

đồ thị và thuật giải

- Tìm hiểu một số bài toán tối ưu thuộc lớp NP-hard trong lý thuyết đồ thị

và thuật giải

- Cài đặt một thuật toán và thử nghiệm

5. Những nội dung nghiên cứu chính

Bố cục của luận văn gồm phần mở đầu trình bày lý do chọn đề tài, đối tượng và nhiệm vụ nghiên cứu của đề tài Chương một, tập trung trình bày một số kiến thức cơ bản về lý thuyết đồ thị các bài toán NP-C Chương hai, trình bày một số bài toán tối ưu lớp P trong đồ thị Chương 3, một số bài toán tối ưu thuộc lớp NP-C trong đồ thị, trong chương này tôi trình bày phần cài đặt chương trình ứng dụng

Với những kết quả đạt được, phần cuối của luận văn nêu ra tính hiệu quả của nghiên cứu, đánh giá thuật toán và nêu vài đề xuất nhằm tối ưu thuật toán, đánh giá các kết quả đạt được, những hạn chế và đề xuất hướng nghiên cứu tiếp theo của đề tài

6. Phương pháp nghiên cứu

- Phương pháp đọc tài liệu

- Phương pháp quan sát

- Phương pháp phân tích – tổng hợp lý thuyết

- Phương pháp thực nghiệm

Trang 10

Chương 1: MỘT SỐ KIẾN THỨC CƠ BẢN VỀ LÝ THUYẾT

Định nghĩa 1.1 [3] Đơn đồ thị vô hướng G=(V, E) bao gồm V là tập các

đỉnh, và E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.

Hình 1.: Đồ thị vô hướng

Định nghĩa 1.2.[3] Đa đồ thị vô hướng G=(V, E) bao gồm V là tập các đỉnh,

và E là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh e1 và e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh.

Định nghĩa 1.3.[3] Đơn đồ thị có hướng G=(V, E) bao gồm V là tập các đỉnh,

và E là tập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung

Hình 1.2: Đồ thị có hướng

Định nghĩa 1.4 [3] Đa đồ thị có hướng G=(V, E) bao gồm V là tập các đỉnh,

và E là họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung Hai cung e1 và e2 được gọi là cung lặp nếu chúng cùng tương ứng với một cặp đỉnh.

Trang 11

Hình 1.3: Đa đồ thịHai loại đồ thị cơ bản:

a) Đồ thị vô hướng (6 đỉnh, 9 cạnh) b) Đồ thị có hướng (5 đỉnh, 7 cung)

Chúng ta có thể coi các đồ thị vô hướng và có hướng là các trường hợp riêng

của đồ thị hỗn hợp G=(V, E, A) khi mà A =Ø hoặc E=Ø.

1.1.1 Các thuật ngữ cơ bản

Định nghĩa 1.6.[3] Hai đỉnh u và v của đồ thị vô hướng G được gọi là kề

nhau nếu (u,v) là cạnh của đồ thị G Nếu e=(u,v) là cạnh của đồ thị thì chúng

ta nói cạnh này là liên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e là nối đỉnh u và đỉnh v, đồng thời các đỉnh u và v sẽ được gọi là các đỉnh đầu của cạnh (u,v).

Để có thể biết được bao nhiêu cạnh liên thuộc với một đỉnh, ta đưa vào định nghĩa sau

Định nghĩa 1.7.[3] Chúng ta gọi bậc của đỉnh v trong đồ thị vô hướng là số

cạnh liên thuộc với nó và sẽ kí hiệu là deg(v).

Trang 12

Định lý 1.1 [3] Giả sử G=(V,E) là đồ thị vô hướng với m cạnh Khi đó

Chứng minh Rõ ràng mỗi cạnh e=(u,v) được tính một lần trong deg(u) và

một lần trong deg(v) Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai

lần số cạnh

Ví dụ 1.1: Đồ thị với n đỉnh và mỗi đỉnh có bậc là 6 có bao nhiêu cạnh?

Giải: Theo định lý 1.1, ta có 2m=6n Từ đó suy ra số cạnh của đồ thị là 3n.

Hệ quả 1.1.[3] Trong đồ thị vô hướng, số đỉnh bậc lẻ (nghĩa là có bậc là số

Định nghĩa 1.8.[3] Nếu e=(u,v) là cung của đồ thị có hướng G thì chúng ta

nói hai đỉnh u và v là kề nhau, và nói cung (u,v) nối đỉnh u và đỉnh v hoặc cũng nói cung này là đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh u (v) sẽ được gọi là đỉnh đầu (cuối) của cung (u,v)

Định nghĩa 1.9.[3] Chúng ta gọi bán bậc ra (bán bậc vào) của đỉnh v trong

đồ thị có hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là

deg ( )(deg ( ))+ vv

Hình 1.5 Đồ thị có hướng

Ví dụ 1.2 Xét đồ thị cho trong hình 1.5 Ta có

deg - (A) = 2, deg - (B) = 3, deg - (C) = 1, deg - (D) = 2, deg - (E) = 2

deg + (A) =3, deg + (B) =2, deg + (C) =2, deg + (D) = 2, deg + (E) =1

1.1.2 Đường đi, chu trình và đồ thị liên thông

Định nghĩa 1.12.[3] Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó

n là số nguyên dương, trên đồ thị vô hướng G = (V, E) là dãy

x0, x1, , xn-1, xn, trong đó u = x0, v = xn, (xi , xi+1) ∈ E, i = 0, 1, 2, , n - 1.

Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh:

(x0, x1), (x1, x2), , (xn-1, xn).

Trang 13

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi

có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.

Ví dụ 1.3 Xét đồ thị vô hướng cho trong hình 1.6.

Hình 1.6 Đường đi trên đồ thị vô hướng

Ta có: a, d, c, f, e là đường đi đơn độ dài 4 Còn d, e, c, a không là đường đi,

do (c, e) không phải là cạnh của đồ thị Dãy b, c, f, e, b là chu trình độ dài 4 Đường đi a, b, e, d, a, b có độ dài là 5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó hai lần

Định nghĩa 1.13.[3] Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số

nguyên dương, trên đồ thị có hướng G = (V, A) là dãy

x0, x1, , xn-1, xn, với u = x0, v = xn, (xi , xi+1) ∈ A, i = 0, 1, 2, , n - 1.

Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:

(x0, x1), (x1, x2), , (xn-1, xn).

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi

có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.

Ví dụ 1.4 Xét đồ thị có hướng cho trong hình 1.7

Hình 1.7 Đường đi trên đồ thị có hướng

Ta có a, d, c, f, e là đường đi đơn độ dài 4 Còn d, e, c, a không là đường đi,

do (c, e) không phải là cạnh của đồ thị Dãy b, c, f, e, b là chu trình độ dài 4 Đường đi a,b, e, d, a, b có độ dài là 5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó hai lần

Nếu sử dụng đồ thị để biểu diễn mạng máy tính (trong đó các đỉnh của đồ thị tương ứng với các máy tính, còn các cạnh tương ứng với các kênh nối) câu hỏi đặt ra là hai máy tính bất kì có thể trao đổi thông tin với nhau hoặc trực tiếp qua kênh nối chúng hoặc thông qua một vài máy tính trong mạng trung gian không? Câu hỏi đó được phát biểu trong ngôn ngữ đồ thị như sau: Tồn

Trang 14

tại hay không đường đi giữa mọi cặp đỉnh của đồ thị? Để trả lời câu hỏi đó ta xét định nghĩa.

Định nghĩa 1.14.[3] Đồ thị vô hướng G = (V, E) được gọi là liên thông

nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó

Hai máy tính bất kì trong mạng có thể trao đổi thông tin được với nhau khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông

Ví dụ 1.5 Trong hình 1.8: Đồ thị G là liên thông, còn đồ thị H là không liên thông

Hình 1.8 Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H1, H2,

H3

1.1.3 Đồ thị có trọng số

Đồ thị được sử dụng để giải các bài toán trong nhiều lĩnh vực khác nhau Chẳng hạn, đồ thị được sử dụng để xác định các mạch vòng trong vấn đề giải tích mạch điện Chúng ta có thể xác định xem hai máy tính trong mạng có thể trao đổi thông tin với nhau được hay không Khi đó, đồ thị được sử dụng để biễu diễn mạng truyền thông với các đỉnh là các nút mạng, các cạnh, các cung

là các đường truyền dữ liệu giữa các nút mạng Đồ thị có thể dùng để biễu diễn các đường đi trong một vùng: các đỉnh tương ứng với các ngã 3, ngã 4, còn các cạnh, các cung tương ứng là các đường đi 2 chiều và đường đi 1 chiều Để cấu trúc đồ thị có thể biễu diễn được các bài toán thực tế người ta đưa vào khái niệm đồ thị có trọng số, trên mỗi cạnh hay mỗi cung được gán một trọng số thể hiện chi phí cho việc thực hiện một mục đích nào đó trên cạnh hay trên cung

1.1.4 Các cấu trúc dữ liệu biểu diễn đồ thị

Có nhiều cách khác nhau để lưu trữ các đồ thị trong máy tính Sử dụng cấu trúc dữ liệu nào thì tùy theo cấu trúc của đồ thị và thuật toán dùng để thao tác trên đồ thị đó Trên lý thuyết, người ta có thể phân biệt giữa các cấu trúc danh sách và các cấu trúc ma trận Tuy nhiên, trong các ứng dụng cụ thể, cấu trúc tốt nhất thường là kết hợp của cả hai Người ta hay dùng các cấu trúc danh

Trang 15

sách cho các đồ thị thưa (sparse graph), do chúng đòi hỏi ít bộ nhớ Trong khi

đó, các cấu trúc ma trận cho phép truy nhập dữ liệu nhanh hơn, nhưng lại cần lượng bộ nhớ lớn nếu đồ thị có kích thước lớn

Biểu diễn đồ thị: [2]

Một cách biểu diễn đồ thị không có cạnh bội là liệt kê tất cả các cạnh của

đồ thị Nói cách khác, để biểu diễn đồ thị không có cạnh bội ta dùng danh sách kề Danh sách này chỉ rõ các đỉnh nối với mỗi đỉnh của đồ thị

Ví dụ 1.6 Dùng danh sách kề để mô tả đơn đồ thị trên hình 1.9

b c d e

b,c,e a a,d,e c,e a,c,d

Ví dụ 1.7 Biểu diễn đồ thị có hướng trên hình 1.10 bằng cách liệt kê tất cả

các đỉnh cuối của các cung xuất phát từ mỗi đỉnh của đồ thị

Đỉnh Các đỉnh kề a

b c

b,c,d,e b,d a,c,e

Trang 16

Giả sử G= (V, E) là một đơn đồ thị, trong đó |V| = n và các đỉnh được liệt

kê một cách tùy ý v1,…vn Ma trận kề A ( hay AG) của G ứng với danh sách các đỉnh này là ma trận không - một cấp n x n có phần tử tại vị trí hàng i cột j bằng 1 nếu vi và vj kề nhau và bằng 0 nếu chúng không được nối với nhau Nói cách khác, ma trận kề của đồ thị là ma trận A = [aij] trong đó

1 nếu{ vi,vj} là một cạnh của G

0 nếu không có cạnh nối đỉnh vi với vj

Ta sắp xếp các đỉnh theo thứ tự a, b, c, d Ma trận biểu diễn đồ thị này là:

Ma trận kề cũng có thể dùng để biểu diễn đồ thị vô hướng có khuyên và có

cạnh bội Khuyên tại đỉnh ai được biểu diễn bằng 1 tại vị trí (i,j) của ma trận

kề khi có cạnh bội, ma trận kề không còn là ma trận không - một nữa, vì phần

tử ở vị trí thứ (i,j) của ma trận này bằng số cạnh nối các đỉnh ai và aj Tất cả

các đồ thị vô hướng, kể cả đa đồ thị và giả đồ thị đều có ma trận kề đối xứng

Ví dụ 1.9 Dùng ma trận kề biểu diễn giả đồ thị trên hình 1.12

a

d

Trang 17

1 nếu có cạnh đi từ vi tới vj

1 nếu có cạnh ej nối với đỉnh vi

0 nếu có cạnh ej không nối với đỉnh vi

Trang 18

1.2 Khái niệm về lớp các bài toán P và NP

1.2.1 Khái niệm các loại thời gian tính

Thời gian tính tốt nhất: là thời gian tính tối thiểu cần thiết để thực hiện

thuật toán với mọi bộ dữ liệu đầu vào kích thước n

Thời gian tính tồi nhất: là thời gian tính tối đa cần thiết để thực hiện thuật

toán với mọi bộ dữ liệu đầu vào có kích thước n

Thời gian tính trung bình: là thời gian tính cần thiết để thực hiện thuật toán

trên một tập hữu hạn các bộ dữ liệu đầu vào có kích thước n Thời gian tính trung bình được tính theo công thức sau:

Thời gian tính trung bình = (Tổng thời gian tính tất cả các bộ dữ liệu có

thể)/ Số bộ dữ liệu

Định nghĩa 1.18 Bài toán quyết định là bài toán mà đầu ra chỉ có thể là

‘yes’ hoặc ‘no’(đúng/sai, 0/1)

Đối với một bài toán quyết định, có những bộ dữ liệu vào cho ra câu trả lời (đầu ra) là ‘yes’, chúng ta gọi đây là bộ dữ liệu ‘yes’, nhưng cũng có những

bộ dữ liệu vào cho ra câu trả lời là ‘no’, chúng ta gọi những bộ dữ liệu này là

bộ dữ liệu ‘no’

1.2.2 Lớp bài toán P.

Định nghĩa 1.19.[1] Một máy Turing M được gọi là có độ phức tạp thời gian

T(n) (hoặc thời gian chạy T(n)) nếu mỗi khi M được cho một nguyên liệu đầu vào w có độ dài n thì M sẽ dừng sau khi thực hiện tối đa T(n) bước chuyển, bất kể M có kiểm nhận w hay không

Chúng ta chủ yếu quan tâm khi T(n) là một hàm đa thức.

Một ngôn ngữ L thuộc lớp P nếu có một hàm đa thức T(n) sao cho L = L(M) với một máy Turing đơn định M nào đó có độ phức tạp thời gian T(n)

Trang 19

Ví dụ 1.11: [2] Thuật toán Kruskal tìm cây khung bé nhất của một đồ thị có V

là số đỉnh và E là số cạnh với thời gian O (E log V) Thời gian thực hiện bởi

máy Turing cũng cùng bậc như vậy

1.2.3 Lớp bài toán NP.

Định nghĩa 1.20.[1] Ngôn ngữ L thuộc lớp NP (Nondeterministic

Polynomial) nếu máy Turing không đơn định M và một độ phức tạp thời gian T(n) sao cho L=L(M) và khi M được cho một nguyên liệu có độ dài n thì

nó sẽ kiểm nhận sau không quá T(n) bước chuyển.

Nhận xét: Vì mỗi máy Turing đơn định đều là máy Turing không đơn định không bao giờ có lựa chọn bước chuyển nên P NP Tuy nhiên, dường như

NP cũng chứa nhiều bài toán không thuộc lớp P Một câu hỏi toán học sâu sắc còn bỏ ngỏ là liệu P = NP hay không, nghĩa là mọi thứ có thể thực hiện được bởi một NTM thật sự trong thời gian đa thức có thể được thực hiện bởi một DTM trong một thời gian đa thức hay không, dù có thể là một hàm đa thức

bậc cao hơn

1.2.4 Lớp bài toán NP-đầy đủ (NP-Complete).

Định nghĩa 1.21.[1] Ta nói L là bài toán thuộc loại NP-C nếu các khẳng

định sau là đúng:

1) L thuộc NP

2) Với mọi ngôn ngữ L’ NP có một phép thu thời gian đa thức L’ về L

Định lý 1.2.[1] Nếu bài toán P1 là NP-C, P2 là NP và có một phép thu thời

gian đa thức từ P1 về P2 thì P2 cũng là NP-C.

Chứng minh: Ta cần chứng tỏ rằng mỗi ngôn ngữ L thuộc NP đều thu được

P2 trong thời gian đa thức Khi đó theo định nghĩa P2 sẽ thuộc NP-C.

Thật vậy, vì P1 là NP-C nên có một phép thu đa thức L về P1 Giả sử thời gian của phép thu này là P(n) Vì thế một chuỗi W ∈ L có chiều dài n được biến đổi thành một chuối x ∈ P1 có chiều dài tối đa là P(n) Ta cũng biết rằng

có một phép thu đa thức từ P1 về P2 Giả sử thời gian của phép thu này là

q(m) Thế thì phép thu này biến đổi chuỗi x ∈ P1 về chuỗi y nào đó thuộc P2

với thời gian tối đa là q(p(n)) Vì thế phép biến đổi W ∈ L về y ∈ P2 mất thời

gian tối đa là p(n) + q(p(n)), đây cũng là một đa thức Như vậy, ta kết luận rằng L có thể thu về P2 trong thời gian đa thức

Định lý 1.3.[1] Nếu có một bài toán nào đó là NP-C mà lại thuộc lớp P thì ta

có P = NP.

Chứng minh: Giả sử có bài toán Q ∈ NP-C và Q ∈ P Thế thì mọi ngôn ngữ

L trong NP đều thu được về Q trong thời gian đa thức Nếu Q ∈ P thì L ∈ P Như vậy NP ∈ P Kết hợp với điều hiển nhên là P ∈ NP ta được P = NP Nhận xét: Chúng ta vẫn tin tưởng rằng nhiều bài toán thuộc lớp NP nhưng không thuộc P nên chúng ta sẽ xem việc chứng minh một bài toán là NP-C có

giá trị ngang với việc chứng minh rằng nó không thể giải được trong thời gian

Trang 20

đa thức, và vì thế không có lời giải đúng nào bằng máy tính (và ta sẽ chỉ đi tìm lời giải gần đúng).

1.2.5 Lớp bài toán NP-khó (NP-Hard).

Một cách ngắn gọn có thể hiểu bài toán NP-khó là bài toán mà không có thuật toán thời gian tính đa thức để giải nó trừ khi P = NP, mà chỉ có các thuật toán giải trong thời gian hàm mũ Sau đây là định nghĩa chính thức của bài toán NP-khó

Định nghĩa 1.22.[1] Một bài toán A được gọi là NP- khó (NP-hard) nếu như

sự tồn tại thuật toán đa thức để giải nó kéo theo sự tồn tại thuật toán đa thức

để giải mọi bài toán trong NP.

Như vậy mọi bài toán NP-C đều là NP-Hard.

Một số bài toán NP-khó tiêu biểu như:

Bài toán bè cực đại (MaxClique): Cho một đồ thị vô hướng G = (V, E) V là tập các đỉnh, E là tập các cạnh tương ứng các đỉnh trong V Cần tìm bè lớn nhất của G Bè là tập các đỉnh trong đồ thị mà đôi một có cạnh nối với nhau (là một đồ thị con đầy đủ trong đồ thị G)

Bài toán phủ đỉnh (Vertex cover): Ta gọi một phủ đỉnh của đồ thị vô hướng

G = (V, E) là một tập con các đỉnh của đồ thị S ⊆ V sao cho mỗi cạnh của đồ

thị có ít nhất một đầu mút trong S Bài toán đặt ra là: Cho đồ thị vô hướng G

= (V, E) và số nguyên k Hỏi G có phủ đỉnh với kích thước k hay không?

Một cách không hình thức, có thể nói rằng nếu ta có thể giải được một cách hiệu quả một bài toán NP-khó cụ thể, thì ta cũng có thể giải hiệu quả bất kỳ bài toán trong NP bằng cách sử dụng thuật toán giải bài toán NP-khó như một chương trình con

Từ định nghĩa bài toán NP-khó có thể suy ra rằng mỗi bài toán NP-đầy đủ đều là NP-khó Tuy nhiên một bài toán NP-khó không nhất thiết phải là NP-đầy đủ

Cũng từ bổ đề nêu trên, ta có thể suy ra rằng để chứng minh một bài toán A nào đó là NP-khó, ta chỉ cần chỉ ra phép qui dẫn một bài toán đã biết là NP-khó về nó

Từ phần trình bày trên, ta thấy có rất nhiều bài toán ứng dụng quan trọng thuộc vào lớp NP-khó, và vì thế khó hy vọng xây dựng được thuật toán đúng hiệu quả để giải chúng Do đó, một trong những hướng phát triển thuật toán giải các bài toán như vậy là xây dựng các thuật toán gần đúng

Trang 21

Hình 1.14 Mô hình phân lớp các bài toán

Trang 22

Chương 2 MỘT SỐ BÀI TOÁN TỐI ƯU LỚP P, NP-C TRONG ĐỒ THỊ

Một công ty lập kế hoạch xây dựng mạng truyền thông nối năm trung tâm máy tính với nhau Bất kì hai trung tâm nào cũng có thể được nối kết với nhau bằng đường điện thoại Cần phải kết nối như thế nào để đảm bảo giữa hai trung tâm máy tính bất kì luôn có đường truyền thông sao cho tổng số tiền thuê bao của toàn mạng là tối thiểu? Chúng ta cần mô hình bài toán này bằng

đồ thị có trọng số như hình 2.1, trong đó mỗi đỉnh là một trung tâm máy tính, mỗi cạnh là một đường truyền thông được thuê bao, còn trọng số của mỗi cạnh là tiền thuê bao hàng tháng của đường truyền thông được biểu thị bằng cạnh đó Có thể giải bài toán này bằng cách tìm cây khung sao cho tổng các trọng số của các cạnh của cây đạt cực tiểu Cây khung như thế được gọi là cây khung nhỏ nhất

Hình 2.1 Đồ thị có trọng số biểu thị tiền thuê bao hàng tháng đường truyền

thông trong mạng máy tính

Định nghĩa 2.1.[2] Cây khung nhỏ nhất trong một đồ thị liên thông có trọng

số là cây khung có tổng trọng số trên các cạnh của nó là nhỏ nhất.

Để minh hoạ cho ứng dụng của bài toán cây khung nhỏ nhất, dưới đây ta nghiên cứu thuật toán Kruskal

Tư tưởng [6]

Thuật toán do Joseph Kruskal phát minh vào năm 1956 Để thực hiện thuật toán Kruskal, chọn cạnh có trọng số nhỏ nhất của đồ thị

Trang 23

Lần lượt ghép thêm vào cạnh có trọng số tối thiểu và không tạo thành chu trình với các cạnh đã được chọn Thuật toán dừng sau khi (n-1) cạnh đã được chọn.

Giả sử ta cần tìm cây bao trùm nhỏ nhất của đồ thị G Thuật toán bao gồm các bước sau:

• Khởi tạo rừng F (tập hợp các cây), trong đó mỗi đỉnh của G tạo thành một cây riêng biệt

• Khởi tạo tập S chứa tất cả các cạnh của G

• Chừng nào S còn khác rỗng và F gồm hơn một cây

 Xóa cạnh nhỏ nhất trong S

 Nếu cạnh đó nối hai cây khác nhau trong F, thì thêm nó vào F và hợp hai cây kề với nó làm một

 Nếu không thì loại bỏ cạnh đó

Khi thuật toán kết thúc, rừng chỉ gồm đúng một cây và đó là một cây bao trùm nhỏ nhất của đồ thị G

Thuật toán Kruskal [2]

Procedure Kruskal (G: đồ thị V đỉnh, liên thông, có trọng số)

T:= T với cạnh e đã được ghép thêm vào.

end { T là cây khung nhỏ nhất}

Trang 26

Cây khung cần tìm có 7 cạnh (đã chọn) và tổng độ dài các cạnh là: 14.

2.2 Bài toán tìm đường đi ngắn nhất -Thuật toán Dijkstra [2]

Trước khi trình bày thuật toán ta xét một ví dụ minh họa

Ví dụ 2.2 Tính độ dài của đường đi ngắn nhất giữa a và z trong đồ thị có

Trang 27

Chỉ có hai đỉnh b và d liên thuộc với a nên chỉ có hai đường đi xuất phát từ

a là a,b và a,d với các độ dài tương ứng là 4 và 2 Do đó d là đỉnh gần a nhất Bây giờ tìm đỉnh tiếp theo gần a nhất trong các đường đi qua a và d ( cho đến khi đạt đến đỉnh cuối cùng) Đường đi như thế ngắn nhất tới b là a,b với

độ dài 4 và đường đi như thế ngắn nhất tới e là a,d,e, độ dài 5 Do vậy đỉnh tiếp theo gần a nhất là b.

Để tìm đỉnh thứ ba gần a nhất, ta chỉ xét các đường đi qua a, d và b (cho đến khi đạt tới đỉnh cuối cùng) Đó là đường đi a,b,c độ dài 7 và đường đi a,d,e,z độ dài 6 Vậy z là đỉnh tiếp theo gần a nhất và độ dài của đường đi ngắn nhất từ a tới z là 6

Ví dụ 2.2 minh họa những nguyên tắc chung dung trong thuật toán

Dijkstra Đường đi ngắn nhất từ đỉnh a tới z có thể tìm được bằng cách kiểm tra trực tiếp Nhưng cách làm này là hoàn toàn không dùng được cho cả người

và máy khi đồ thị có nhiều cạnh

Tư tưởng

Bây giờ sẽ nghiên cứu bài toán tìm độ dài của đường đi ngắn nhất giữa a và

z trong đơn đồ thị liên thông, vô hướng có trọng số Thuật toán Dijsktra được

thực hiện bằng cách tìm độ dài của đường đi ngắn nhất từ a tới đỉnh thứ hai…

cho tới khi tìm được độ dài của đường đi ngắn nhất từ đỉnh a tới đỉnh z.

Thuật toán dựa trên một dãy các bước lặp Một tập đặc biệt các đỉnh được xây dựng bằng cách cộng thêm một đỉnh trong mỗi bước lặp Thủ tục gán

nhãn được thực hiện trong mỗi lần lặp đó Trong thủ tục gán nhãn này, đỉnh w được gán nhãn bằng độ dài đường đi ngắn nhất từ a tới w và chỉ đi qua các

đỉnh đã thuộc tập đặc biệt Một đỉnh được thêm vào tập này là đỉnh có nhãn nhỏ nhất so với các đỉnh chưa có trong tập đó

Bây giờ sẽ đưa ra chi tiết của thuật toán Dijsktra Đầu tiên, gán cho đỉnh a nhãn bằng 0 và các đỉnh khác là ∞ Ta kí hiệu L0(a)=0 và L0(v) = ∞ cho tất cả

các nhãn ( bước lặp thứ 0) Các nhãn này là độ dài đường đi ngắn nhất từ đỉnh

a tới các đỉnh này, trong đó đường đi này chỉ chứa đỉnh a.( Vì không có

đường đi từ a tới các đỉnh khác a nên ∞ là độ dài đường đi ngắn nhất giữa a

Trang 28

nhỏ nhất Khi đỉnh u được gộp vào Sk ta sửa đổi nhãn của các đỉnh không thuộc Sk sao cho Lk(v), nhãn của v tại bước k, là độ dài của đường đi ngắn nhất

từ a tới v mà đường đi này chỉ chứa các đỉnh thuộc Sk ( tức là các đỉnh đã thuộc tập đặc biệt các đỉnh cùng với u).

Giả sử v là một đỉnh không thuộc Sk Để sửa nhãn của v ta thấy Lk(v) là độ dài của đường đi ngắn nhất từ a tới v và chỉ chứa các đỉnh thuộc Sk Để sửa đổi nhãn, lưu ý rằng đường đi ngắn nhất từ a tới v chỉ chứa phần tử của Sk hoặc là đường đi ngắn nhất từ a tới v chỉ chứa các phần tử của Sk-1 hoặc là đường đi ngắn nhất từ a tới u ở bước k-1 cùng với cạnh (u,v) Nói cách khác

ta có:

Lk(a,v) = min {Lk-1(a,v), Lk-1(a,u) + w(u,v)}

Thủ tục này được lặp bằng cách liên tiếp thêm các đỉnh vào tập đặc biệt các

đỉnh cho tới khi đạt tới đỉnh z Khi thêm z vào tập đặc biệt các đỉnh thì nhãn của nó bằng độ dài của đường đi ngắn nhất từ a tới z.

Thuật toán Dijsktra[2]

procedure Dijsktra (G: đơn đồ thị liên thông có trọng số, với trọng số

for tất cả các đỉnh v không thuộc S

if L(u) + w(u,v) < L(v) then L(v) := L(u) + w(u,v)

{thêm vào S đỉnh có nhãn nhỏ nhất và sửa đổi nhãn của các đỉnh không thuộc S}

end { L(z) = độ dài đường đi ngắn nhất từ a tới z }

Độ phức tạp [7]

Thuật toán Dijkstra tìm được đường đi ngắn nhất trên đồ thị sau thời gian

cỡ O(n 2 ).

Ví dụ 2.3 Dùng thuật toán Dijsktra hãy tìm độ dài đường đi ngắn nhất giữa

hai đỉnh a và z của đồ thị có trọng số trên hình 2.4(a)

Các bước dùng thuật toán Dijsktra tìm độ dài của đường đi ngắn nhất giữa

hai đỉnh a và z được biểu diễn trên hình 2.4 Tại mỗi bước lặp của thuật toán các đỉnh của tập S được khoanh tròn Đường đi ngắn nhất chỉ chứa các đỉnh

Ngày đăng: 14/04/2017, 22:48

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Kenneth H. Rosen (Người dịch: Phạm Văn Thiều, Đặng Hữu Thịnh), Toán rời rạc ứng dụng trong tin học, NXB Khoa học và Kỹ thuật, 2003 Sách, tạp chí
Tiêu đề: Toán rời rạc ứng dụng trong tin học
Nhà XB: NXB Khoa học và Kỹ thuật
[3] Nguyễn Tô Thành, Nguyễn Đức Nghĩa, Giáo trình Toán rời rạc NXB, Trường Đại học Bách Khoa Hà Nội Sách, tạp chí
Tiêu đề: Giáo trình Toán rời rạc
[4] Nguyễn Đức Nghĩa, Nguyễn Thanh Hùng, Giáo trình lý thuyết đồ thị NXB Đại học Quốc gia TPHCMTài liệu tiếng Anh Sách, tạp chí
Tiêu đề: Giáo trình lý thuyết đồ thị
Nhà XB: NXB Đại học Quốc gia TPHCMTài liệu tiếng Anh
[5] Panos M. Pardalos and Jue Xue, The Maximum Clique Problem. Journal of Global Optimization, 4:301–324, 1994 Sách, tạp chí
Tiêu đề: The Maximum Clique Problem. Journal of Global Optimization
[6] C. Fulves and M. Gardner, The Kruskal Principle, The Pallbearers Review, June 1975 Sách, tạp chí
Tiêu đề: The Kruskal Principle, The Pallbearers Review
[7] C.L. Liu, Introduction to Combinatorial mathematics, McGraw-Hill Book Com-pany, 1968 Sách, tạp chí
Tiêu đề: Introduction to Combinatorial mathematics
[1] Đặng Quang Á, Bài giảng về Một số phương pháp toán học chọn lọc trong CNTT Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w