3.1.1.1 Quan niệm trực quan về thuật toỏn.
Định nghĩa thuật toỏn bằng ngụn ngữ thụng thường: Thuật toỏn được hiểu là một dóy hữu hạn cỏc qui tắc (chỉ thị, mệnh lệnh) nhằm mụ tả một quỏ trỡnh tớnh toỏn (xử lý thụng tin). Theo đú,ứng với mỗi bộ dữ liệu vào, cho ớt nhất một kết quả.
- Thuật toỏn đơn định: Chỉ cho ra một kết quả.
- Thuật toỏn khụng đơn định: Cho ra từ hai kết quả trở lờn.
Khỏi niệm đơn giản về thuật toỏn chỉ đủ để chứng minh bài toỏn giải được bằng thuật toỏn, nhưng chưa đủ để chứng minh loại bài toỏn khụng thể giải được.
3.1.1.2 Quan niệm toỏn học về thuật toỏn.
Định nghĩa thuật toỏn bằng ngụn ngữ toỏn học: Người ta quan niệm thuật toỏn là một mỏy Turing. Vào năm 1936, nhà toỏn học người Anh Alan Mathison Turing (1912- 1954) đó đưa ra mụ hỡnh lý thuyết đơn giản về một thiết bị tớnh toỏn được gọi là mỏy Turing.
í nghĩa của mỏy Turing trong lý thuyết khoa học mỏy tớnh là nếu một vấn đề khụng được giải quyết bằng mỏy Turing thỡ cũng khụng thể giải quyết bởi một hệ thống thuật toỏn nào khỏc. Do đú, mỏy Turing cú thể đại diện cho một biờn giới lý thuyết về khả năng của mỏy tớnh điện tử.
Cấu tạo mỏy Turing:
- Một băng tuyến tớnh vụ hạn, chia thành cỏc ụ nhớ, mỗi ụ chứa một tớn hiệu. - Bộ điều khiển: Cú hữu hạn trạng thỏi, điều khiển một đầu đọc - ghi, tại mỗi thời điểm nhũm vào một ụ nhớ.
Hoạt động của mỏy Turing:
Mỏy được xem là hoạt động trong thời gian rời rạc, được điều khiển bởi bộ điều khiển. Một bước hoạt động cơ bản của mỏy gồm cỏc động tỏc:
X XZ
- Trạng thỏi trong bộ điều khiển thay đổi sang trạng thỏi khỏc. - Đầu đọc trờn băng được dịch sang phải, trỏi hay đứng nguyờn.
Một cỏch hỡnh thức, xem mỏy Turing là một bộ:
T = ( Q, X, Y, q0, F, ) Trong đú: Q : Tập hữu hạn cỏc trạng thỏi.
X : Tập cỏc kớ hiệu băng, X chứa kớ hiệu rỗng B (Blank). Y : Tập cỏc kớ hiệu vào.
q0Q : Trạng thỏi đầu.
F Q : Tập trạng thỏi kết thỳc. : Hàm chuyển trạng thỏi.
: Q X Q { X - {B } } {L, R, S}
L, R, S là cỏc trạng thỏi : Trỏi, phải, đứng nguyờn. Vớ dụ:
Thời điểm t: Thời điểm t+1:
(sang phải)
Tại thời điểm t mỏy Turing ở trạng thỏi p, đầu đọc - ghi nhũm vào ụ nhớ cú tớn hiệu X.
Tại thời điểm tiếp theo t+1 (1 đơn vị thời gian) mỏy ở trạng thỏi q, tớn hiệu X đó thay bằng Y, đầu đọc - ghi hoặc đứng nguyờn, hoặc sang trỏi hoặc sang phải. ( p, X ) (q,Y,d) , d {L, R, S}.
hay viết: pX qYd gọi là một mệnh lệnh của mỏy Turing (T). Xõu ký tự: CpXD gọi là một hỡnh trạng của mỏy Turing (T).
CpXDC1qZD1 gọi là một bước chuyển hỡnh trạng, nếu giỏ trị (q, Z) thỡ xem như quỏ trỡnh xử lý kết thỳc hay C1qZD1 là hỡnh trạng cuối cựng.
- Nếu là hàm đơn trị thỡ T được gọi là mỏy đơn định. - Nếu là hàm đa trị thỡ T được gọi là mỏy khụng đơn định.
Z Z C1 C q p D1 D X Y
3.1.2 Cỏc tớnh chất của thuật toỏn
Thuật toỏn cú cỏc tớnh chất chung sau đõy:
- Tớnh dừng: Thuật toỏn dừng sau một số hữu hạn bước thực hiện.
- Tớnh phổ dụng: Thuật toỏn cú thể giải bất kỳ bài toỏn nào trong lớp cỏc bài toỏn.
- Tớnh xỏc định: Mỏy tớnh khụng thể thực hiện cỏc bước khụng rừ ràng. Do đú, cỏc thao tỏc ở mỗi bước phải rừ ràng.
- Đầu vào (input): Cỏc giỏ trị đầu vào từ một tập được xỏc định.
- Đầu ra (output): Từ cỏc giỏ trị đầu vào, thuật toỏn sẽ tạo ra cỏc giỏ trị đầu ra, đú là nghiệm của bài toỏn.
- Tớnh hiệu quả: Thuật toỏn cần đỳng đắn để sau khi đưa dữ liệu vào thỡ phải cho ra được kết quả như yờu cầu.
3.1.3 Hai mụ hỡnh tớnh toỏn
Hai quan niệm về thuật toỏn ứng với hai mụ hỡnh tớnh toỏn. Ứng với hai mụ hỡnh tớnh toỏn cú hai cỏch biểu diễn thuật toỏn.
- Mụ hỡnh ứng dụng: Thuật toỏn được biểu diễn bằng ngụn ngữ tựa Algol. - Mụ hỡnh lý thuyết: Thuật toỏn được biểu diễn bằng ngụn ngữ mỏy Turing.
Mụ hỡnh ứng dụng:
- Đơn vị nhớ : Một ụ nhớ chứa trọn vẹn một dữ liệu.
- Đơn vị thời gian: Thời gian để thực hiện một phộp tớnh cơ bản trong số học hay logic như cộng, trừ, nhõn, chia, ...
Mụ hỡnh lý thuyết:
- Đơn vị nhớ: Một ụ nhớ chứa một tớn hiệu, với mó nhị phõn thỡ đơn vị nhớ là một bit.
- Đơn vị thời gian: Thời gian để thực hiện một bước chuyển hỡnh trạng.
3.1.4 Khỏi niệm độ phức tạp thuật toỏn
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.