3.1.4.1 Khỏi niệm bài toỏn
Bài toỏn thường được cho dưới dạng:
Output: Cỏc dữ liệu ra (kết quả giải quyết yờu cầu của bài toỏn).
3.1.4.2 Độ phức tạp dữ liệu vào của bài toỏn
Quan niệm 1: Ứng với mụ hỡnh ứng dụng.
Độ phức tạp dữ liệu vào của bài toỏn được hiểu là số luợng dữ liệu vào của bài toỏn (kớch thước dữ liệu vào của bài toỏn). Đõy là quan niệm đơn giản, chưa chớnh xỏc.
Quan niệm 2: Ứng với mụ hỡnh lý thuyết.
Độ phức tạp dữ liệu vào của bài toỏn được hiểu là tổng độ dài của mọi dữ liệu vào đó được mó hoỏ theo cỏch nào đú (tổng dung lượng nhớ). Đõy là quan niệm chớnh xỏc, chi tiết.
3.1.4.3 Chi phớ của thuật toỏn tớnh theo một Bộ dữ liệu vào.
Núi đến chi phớ phải trả cho một quỏ trỡnh tớnh toỏn người ta thường quan tõm tới chi phớ về thời gian và bộ nhớ.
• Chi phớ thời gian của một quỏ trỡnh tớnh toỏn là thời gian cần thiết để thực
hiện một quỏ trỡnh tớnh toỏn.
- Với thuật toỏn tựa Algol: Chi phớ thời gian là số cỏc phộp tớnh cơ bản thực hiện trong quỏ trỡnh tớnh toỏn, từ khi vào dữ liệu đến khi hiện kết quả.
- Với mỏy Turing: Chi phớ thời gian là số bước chuyển hỡnh trạng từ hỡnh trạng đầu q0 đến hỡnh trạng kết thỳc qn.
• Chi phớ bộ nhớ của một quỏ trỡnh tớnh toỏn là số ụ nhớ cần thiết để thực
hiện một quỏ trỡnh tớnh toỏn.
3.1.4.4 Độ phức tạp của thuật toỏn.
Độ phức tạp của bài toỏn là yếu tố chớnh để phõn lớp bài toỏn.
Độ phức tạp của thuật toỏn liờn quan đến thời gian mà thuật toỏn đú sử dụng để giải bài toỏn (độ phức tạp thời gian) và dung lượng bộ nhớ cần thiết để thực hiện thuật toỏn với cỏc giỏ trị đầu vào cú kớch thước xỏc định (độ phức tạp khụng gian).
Việc xỏc định được một thuật toỏn cú thể đưa ra đỏp số trong một khoảng thời gian vài giõy hay trong vũng vài triệu năm, hay thuật toỏn đú đũi hỏi dung lượng bộ nhớ như thế nào rừ ràng là điều rất quan trọng.
Như vậy, việc xỏc định độ phức tạp về thời gian và độ phức tạp về khụng gian của một thuật toỏn chớnh là thước đo hiệu quả của nú.
Một số khỏi niệm về độ phức tạp của thuật toỏn:
- Độ phức tạp trung bỡnh: Độ phức tạp này rất khú tớnh được, nú được tớnh bởi cụng thức:
Tổng chi phớ của thuật toỏn trờn mọi dữ liệu vào Độ phức tạp TB =
Số lượng bộ dữ liệu vào
- Độ phức tạp cực đại
+ Độ phức tạp về bộ nhớ trong trường hợp xấu nhất
LA(n) = max{LA(e) e n}
+ Độ phức tạp về thời gian trong trường hợp xấu nhất
TA(n) = max{tA(e) e n}
+ Độ phức tạp tiệm cận
Độ phức tạp PT(n) được gọi là tiệm cận tới hàm f(n), ký hiệu là O(f(n)) nếu tồn tại n0, c mà PT(n) c.f(n), với n n0.
+ Độ phức tạp đa thức
Độ phức tạp PT(n) được gọi là đa thức, nếu nú tiệm cận tới đa thức p(n).
- Thuật toỏn đa thức- thuật toỏn hàm mũ
+ Thuật toỏn được gọi là đa thức nếu độ phức tạp về thời gian của nú trong trường hợp xấu nhất (độ phức tạp cực đại) là đa thức.
+ Thuật toỏn được gọi là hàm mũ nếu độ phức tạp về thời gian của nú trong trường hợp xấu nhất (độ phức tạp cực đại) là hàm mũ.
3.1.5 Phộp quy dẫn (dẫn về được):
Phộp quy dẫn từ một bài toỏn quyết định này về một bài toỏn quyết định khỏc, được định nghĩa như sau: Giả sử ta xem một bài toỏn tương ứng với một ngụn ngữ L trờn một bảng chữ nào đú (L *, L gồm những dữ kiện của mà cõu hỏi của cú trả lời đỳng). Ta núi L1 *
1 quy dẫn được trong thời gian đa thức về L2 *
2 và viết: L1 L2, nếu cú một hàm f: *1 →*
2, tớnh được bởi mỏy Turing đơn định trong thời gian đa thức sao cho với mọi x *
khi: f(x) L2. Khi đú, ta cũng núi bài toỏn 1, tương ứng với L1, quy dẫn được trong thời gian đa thức về bài toỏn 2, tương ứng với L2, và cũng viết 1 2 .
Cụ thể, bài toỏn B được gọi là "Dẫn về được” bài toỏn A một cỏch đa thức, ký hiệu: B A. Nếu cú thuật toỏn đơn định đa thức để giải bài toỏn A thỡ cũng cú thuật toỏn đơn định đa thức để giải bài toỏn B.
Nghĩa là: Bài toỏn A "khú hơn" bài toỏn B, hay B "dễ” hơn A.
- B được diễn đạt bằng ngụn ngữ của A. (B là trường hợp riờng của A). - Giải được A giải được B.
Chỳ ý: Quan hệ cú tớnh chất bắc cầu, C B và B A C A.
3.1.6 Phõn lớp bài toỏn theo độ phức tạp
3.1.6.1 Mục đớch của việc phõn lớp bài toỏn
Việc phõn lớp bài toỏn giỳp ta xỏc định và lựa chọn được một phương phỏp thiết kế thớch hợp với lớp bài toỏn đú.
Khi đó xỏc định được bài toỏn sẽ chọn phương phỏp nào để giải quyết, thỡ ta vẫn nờn cải tiến với phương chõm là: "đó cú lời giải tốt rồi thỡ hóy tỡm cỏch giải tốt hơn bài toỏn gốc".
3.1.6.2 Phõn lớp bài toỏn theo độ phức tạp
Với một bài toỏn cú thể chia ra làm hai lớp lớn là: Đó cú lời giài (close problem) hoặc chưa cú lời giải (open problem).
Cỏc bài toỏn đó cú lời giải được giải bằng thuật toỏn hoặc khụng giải được bằng thuật toỏn.
Cỏc bài toỏn giải được bằng thuật toỏn được hiểu là thuật toỏn xử lý trong thời gian đủ nhanh, phự hợp với thực tế, độ phức tạp thời gian là đa thức.
Cỏc thuật toỏn khú giải là thuật toỏn phải xử lý trong một thời gian dài mà trong thực tế khú cú thể chấp nhận được, độ phức tạp thời gian là hàm mũ.
Cỏc bài toỏn giải được bởi thuật toỏn được chia làm hai lớp con:
- Dễ giải (easy): là bài toỏn cú thuật toỏn được xử lý, cú độ phức tạp đa thức và cú lời giải thực tế.
- Khú giải (hard): là bài toỏn mà lời giải của nú chỉ được thực tế chấp nhận khi kớch thước đầu vào (input) cú giỏ trị đủ nhỏ. Nếu giỏ trị đầu vào lớn thỡ thuật toỏn phải xử lý trong thời gian lớn mà thực tế khú chấp nhận.
Hiện nay, người ta chưa tỡm được thuật toỏn đơn định - đa thức để giải cỏc bài toỏn thuộc loại khú giải nhưng đó tỡm được thuật toỏn đơn định - thời gian hàm mũ hoặc thuật toỏn khụng đơn định - thời gian đa thức.
3.1.7 Cấu trỳc của lớp P, NP
3.1.7.1 Lớp P (Polonomic)
Lớp bài toỏn P là lớp bài toỏn giải được bằng thuật toỏn đơn định - đa thức. Ta cú thể hỡnh dung lớp P như một tập hợp cỏc bài toỏn mà đối với chỳng, tồn tại một thuật toỏn làm việc trong thời gian đa thức. Lớp P cũng cú tầm quan trọng quyết định vỡ cỏc lớp bài toỏn ngoài P cú thể xem là khụng tớnh được (Arto Salomaa, Nhập mụn tin học lý thuyết tớnh toỏn và cỏc ụtụmat, trang 229, NXB Khoa học kỹ thuật).
3.1.7.2 Lớp bài toỏn NP (Non deterministic polynomial time)
NP là lớp cỏc bài toỏn khú giải, cú thể giải được bởi thuật toỏn khụng đơn định - đa thức hoặc thuật toỏn đơn định - thời gian hàm mũ.
3.1.7.3 Lớp bài toỏn NP-Hard
- Định nghĩa: Bài toỏn A được gọi là NP-Hard (NP-Khú) nếu với L NP đều là L A.
Bài toỏn NP-Hard cú thể nằm trong hoặc ngoài lớp NP.
- Một định nghĩa khỏc: NP hard problem - a problem that can be reduced from each NP problem ( even worst than NP… ).
- Chứng minh bài toỏn là NP-Hard
+ Cỏch 1: (Theo định nghĩa)
Bài toỏn A được gọi là NP-Hard nếu với L NP đều là L A.
Nhận xột: Cỏch chứng minh theo định nghĩa sẽ rất khú khăn, vỡ phải chứng minh mọi bài toỏn trong NP đều "dễ hơn A".
Theo cỏch 1, năm 1971Cook và Karp lần đầu tiờn đó chứng minh được bài toỏn "Thoả được" (Satisfyability) thuộc lớp NP-Hard.
+ Cỏch 2:
Để chứng minh bài toỏn A nào đú là NP-Hard thỡ người ta thường chứng minh dựa vào bài toỏn B nào đú sao cho B A (trong đú bài toỏn B đó được xỏc định là bài toỏn NP-Hard). Tức là, bài toỏn A "khú" hơn bài toỏn B.
3.1.7.4 Lớp bài toỏn NP-Complete (NP-C)
- Định nghĩa: Bài toỏn A được gọi là NP-Complete (NP- đầy đủ) nếu A là NP - Hard và A NP.
Như vậy, bài toỏn NP- Complete là bài toỏn NP-Hard nằm trong lớp NP (A problem which belongs to the NP class of problems and is a NP hard problem by itself).
- Một số định nghĩa khỏc:
+ Là bất kỳ bài toỏn NP nào dẫn về được nú (any other NP problem is reducible to it).
+ Một bài toỏn L ( L {0,1}*) là NP- Complete nếu: (1). L NP và
(2). L' p L với mọi L' NP
Nếu L thoả món (2) nhưng khụng thoả món (1) thỡ khi đú, ta núi rằng L là NP-Hard.
- Chứng minh một bài toỏn L là NP- Complete:
Bước 1: Chứng minh L NP
Bước 2: Chọn một bài toỏn L' là NP- Complete
Bước 3: Xõy dựng một phộp dẫn về f (L' L)
Bước 4: Chứng minh rằng x L' nếu f(x) {0,1}*
Bước 5: Chứng minh rằng f là một phộp biến đổi thời gian đa thức.
f biến đổi Bài toỏn L' đó biết là NP- Complete Bài toỏn L cần chứng minh là NP- Complete
Sơ đồ Vẽ minh hoạ lớp NP, NP-C (NP-Complete), NP-Hard:
Hỡnh 3.1 Sơ đồ minh hoạ cỏc lớp bài toỏn NP, NP-C, NP-Hard
3.2 Một số bài toỏn NP-C trong mụ hỡnh quan hệ [12].
Trong cỏc hệ cơ sở dữ liệu đó cú nhiều thuật toỏn được đề xuất và cài đặt, như cỏc thuật toỏn xỏc định khoỏ của lược đồ, cỏc thuật toỏn chuẩn hoỏ, cỏc thuật toỏn tối ưu hoỏ cõu hỏi, ... Phần lớn cỏc thuật toỏn đú thuộc lớp P, tức là cỏc thuật toỏn đú làm việc trong thời gian đa thức. Hiện nay việc đỏnh giỏ độ phức tạp của cỏc thuật toỏn trong cỏc hệ cơ sở dữ liệu ớt được đề cập đến, vấn đề này thường chỉ được giới thiệu trong cỏc bài bỏo. Về khớa cạch lý thuyết, ta phải nghiờn cứu và chứng minh xem cú thuật toỏn nào trong cỏc cơ sở dữ liệu thuộc cỏc lớp NP, NP- Hard, NP-C hay khụng ? Điều này sẽ giỳp cho những người cài đặt và ứng dụng cỏc thuật toỏn đó được chứng minh là thuộc lớp NP-Hard hoặc NP-C khụng phải mất thời gian vụ ớch để tỡm ra cỏc thuật toỏn mới cú khả năng làm việc trong thời gian đa thức. Tuy nhiờn, với sự phỏt triển của tư duy con người, khi thuật toỏn đó cú lời giải rồi ta vẫn luụn phải tỡm kiếm thuật toỏn cú lời giải tốt hơn. Sau đõy chỳng ta sẽ xem xột một số bài toỏn NP-C trong mụ hỡnh CSDL quan hệ.
3.2.1 Bài toỏn siờu khoỏ cú lực lượng khụng quỏ m.
- Phỏt biểu bài toỏn: Cho S = <, F> là một lược đồ quan hệ, tập cỏc thuộc tớnh = {A1, ..., An}, tập cỏc phụ thuộc hàm F trờn và một số nguyờn dương m
NP-Hard
NP
(m < | | = n). Quyết định xem với lược đồ quan hệ S, cú hay khụng một siờu khoỏ cú lực lượng nhỏ hơn hoặc bằng m.
Input: Lược đồ quan hệ < , F > và một số nguyờn m (m < || = n).
Output: Cú nếu tồn tại một siờu khoỏ của S cú số phần tử m.
Khụng nếu khụng tồn tại một siờu khoỏ của S cú số phần tử m.
- Chứng minh bài toỏn siờu khoỏ cú lực lượng khụng quỏ m là NP-C:
Để chứng minh bài toỏn này ta dựa vào định lý sau:
Định lý 3.1:
Bài toỏn siờu khoỏ cú lực lượng khụng quỏ m là NP - đầy đủ (NP-C).
Chứng minh:
Gọi P1 là bài toỏn siờu khoỏ cú lực lượng khụng quỏ m. Để chứng minh bài toỏn P1 là NP-C ta chứng minh theo định nghĩa lớp bài toỏn NP-C.
Trước hết ta chứng minh P1 NP (1)
Muốn chứng minh một bài toỏn thuộc lớp NP ta phải chỉ ra được một thuật toỏn khụng đơn định thời gian đa thức để giải bài toỏn đú.
Thuật toỏn khụng đơn định thời gian đa thức (theo n = || và p = |F|) giải P1 được xõy dựng như sau:
K := ; For j := 1 to m do Begin B := choice(); K := K {B}; End-for If K+ = then success else failure;
Ta đó biết thuật toỏn tớnh bao đúng K+ của K là thuật toỏn thời gian đa thức, nờn thuật toỏn trờn là thuật toỏn khụng đơn định thời gian đa thức. Vậy bài toỏn P1 thuộc lớp NP.
Để chứng minh bài toỏn P1 là NP-Hard ta dựa vào bài toỏn B nào đú sao cho B P1 (trong đú bài toỏn B đó được xỏc định là bài toỏn NP-C). Muốn vậy chỉ cần chỉ ra cú một bài toỏn đó biết thuộc NP-C (ở đõy ta dựng bài toỏn phủ đỉnh) dẫn đa thức về bài toỏn siờu khoỏ cú lực lượng khụng quỏ m.
Nhắc lại bài toỏn phủ đỉnh.
Cho G = (V, E) là một đồ thị vụ hướng, trong đú V là tập đỉnh, E là tập cạnh. Tập con S của V (S V) được gọi là một phủ đỉnh của đồ thị G, nếu (u,v) E thỡ hoặc u S, hoặc v S hoặc cả hai đầu mỳt u,v S. Núi cỏch khỏc mọi cạnh e=(u,v) E đều liờn thuộc với ớt nhất một đỉnh thuộc S.
Phỏt biểu bài toỏn quyết định phủ đỉnh.
Cho đồ thị vụ hướng G = (V,E) và một số nguyờn dương m, (m < |V| = n). Quyết định xem cú tồn tại hay khụng một phủ đỉnh của G cú lực lượng <=m.
Bài toỏn quyết định phủ đỉnh đó được chứng minh là NP - đầy đủ [Garey
Johnson].
Để biến đổi bài toỏn phủ đỉnh về P1 (bài toỏn siờu khoỏ cú lực lượng khụng quỏ m), ta định nghĩa là tập V và F = {Lv {v} | v V}, trong đú Lv ký hiệu tập đỉnh thuộc V mà liờn thuộc với v. Lưu ý là <, F> được xỏc định trong thời gian đa thức theo |V| và |E|, và || = |V| = |E|.
Tiếp theo ta phải chứng minh bài toỏn phủ đỉnh dẫn đa thức (tức biến đổi được trong thời gian đa thức) về bài toỏn siờu khoỏ cú lực lượng khụng quỏ m (bài toỏn P1). Bổ đề sau sẽ cho thấy bài toỏn phủ đỉnh dẫn đa thức về bài toỏn P1
Bổ đề 3.1:
Tập con K của là một siờu khoỏ của <, F> khi và chỉ khi nú là một phủ đỉnh của E trong G.
Chứng minh:
Giả thiết quy nạp rằng: khẳng định đỳng với mỗi tập con K’ của sao cho K’ K.
Nếu K = , bổ đề đỳng một cỏch hiển nhiờn. Do đú giả sử K là một tập con thực sự của .
Như đó biết K là siờu khoỏ khi và chỉ khi K+ = . Tương đương khi và chỉ khi v V\K sao cho Lv K. Theo giả thiết quy nạp K {v} là một phủ đỉnh của E trong G. Cú nghĩa, một tập con thực sự K của là một siờu khoỏ của lược đồ <,F> khi và chỉ khi nú là một phủ đỉnh của G, như đó được khẳng định.
Vậy bổ đề được chứng minh.
Do đú bài toỏn phủ đỉnh dẫn đa thức về bài toỏn P1.
Từ (1) và (2) theo định nghĩa về lớp bài toỏn NP-C ta kết luận bài toỏn P1 là NP-C.
3.2.2 Bài toỏn quyết định thuộc tớnh khoỏ hay khụng khoỏ.
- Phỏt biểu bài toỏn: Cho S = <, F> là một lược đồ quan hệ, tập cỏc thuộc tớnh = {A1, ..., An}, tập cỏc phụ thuộc hàm F trờn và thuộc tớnh bất kỳ b . Quyết định xem b cú là thuộc tớnh khoỏ hay khụng.
Input: Lược đồ quan hệ < , F > và b .
Output: Thuộc tớnh b là thuộc tớnh khoỏ hay thuộc tớnh khụng khoỏ của S.
- Chứng minh bài toỏn quyết định thuộc tớnh khoỏ là NP-C:
Để chứng minh bài toỏn này ta dựa vào định lý sau:
Định lý 3.2:
Bài toỏn quyết định thuộc tớnh khoỏ là NP - đầy đủ (NP-C).
Chứng minh:
Gọi P2 là bài toỏn quyết định thuộc tớnh khoỏ. Để chứng minh bài toỏn P2 là NP-C ta chứng minh theo hai bước.