LÝ THUYẾT ĐỘ PHỨC TẠP VÀ ỨNG DỤNG
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO KHOA HỌC
ĐỀ TÀI:
LÝ THUYẾT ĐỘ PHỨC TẠP VÀ ỨNG DỤNG
Chuyên ngành : Khoa học máy tính
Giáo viên hướng dẫn : PGS.TSKH.Vũ Đình Hòa Sinh viên thực hiện: Lưu Thị Lan Hương
Lớp _K54A.
Hà Nội , 4/2008.
Trang 2CHƯƠNG MỞ ĐẦU
1 Tên đề tài
2 Lý do chọn đề tài
3 Mục đích, nhiệm vụ của đề tài
CHƯƠNG I TỔNG QUAN VỀ THUẬT TOÁN
1.1 Định nghĩa thuật toán
1.2 Các đặc trưng của thuật toán
1.3 Phân tích thuật toán và đánh giá thời gian thực hiện thuật toán
1.3.1 Phân tích thuật toán
1.3.2 Tại sao lại cần có thuật toán hiệu quả
1.3.3 Các bước phân tích thuật toán
1.3.4 Tính hiệu quả của thuật toán
1.3.5 Đánh giá thời gian thực hiện thuật toán
1.4 Các vấn đề liên quan đến thuật toán
1.4.1 Thiết kế thuật toán
1.4.2 Tính đúng đắn của thuật toán
1.4.3 Biểu diễn thuật toán
CHƯƠNG II LÝ THUYẾT ĐỘ PHỨC TẠP
2.3 Các bài toán quyết định
2.4 Các bài toán lớp P, NP và mối quan hệ giữa lớp P và lớp NP
2.4.1 Các bài toán lớp P
2.4.2 Các bài toán lớp NP
2.4.3 Mối quan hệ giữa lớp P và lớp NP
2.5 Bài toán lớp NPC
Trang 32.5.1 Phép dẫn với thời gian đa thức
2.5.4.5 Bài toán Subset-Sum
2.5.4.6 Bài toán Knapsack2.5.4.7 Bài toán Hamilton Cycle2.5.4.8 Bài toán Traveling Salesman
CHƯƠNG III MẬT MÃ VÀ MẬT MÃ KHOÁ CÔNG KHAI RSA
I Mật mã
1 Định nghĩa về mật mã và hệ mật mã
1.1 Một số khái niệm trong mật mã
1.2 Định nghĩa về hệ mật mã
2.Một số yêu cầu đối với hệ mật mã
II Mật mã khoá công khai RSA
Trang 4Ngày nay với sự xuất hiện của máy tính hiện đại và mạng máy tính đang trởthành công cụ đắc lực phục vụ cho mọi mặt của đời sống xã hội
Lý thuyết độ phức tạp là vấn đề trung tâm đang được nghiên cứu của ngànhkhoa học máy tính Việc nghiên cứu lý thuyết độ phức tạp và ứng dụng của nó vừa
là cơ sở động lực cho khoa học máy tính phát triển, vừa góp phần hiệu quả vào việcgiải quyết các bài toán trong thực tế
Ngoài những yêu cầu do thực tế và xã hội đặt ra, việc lựa chọn đề tài còn xuấtphát từ việc yêu thích môn học chuyên đề lý thuyết độ phức tạp của thuật toán nóiriêng và của khoa học máy tính nói chung
3 Mục đích, nhiệm vụ của đề tài
* Mục đích:
- Tìm hiểu sâu về lý thuyết độ phức tạp và mật mã khoá công khai RSA
- Xây dựng chương trình ứng dụng áp dụng lý thuyết độ phức tạp có ý nghĩathực tiễn
Trang 5CHƯƠNG 1 TỔNG QUAN VỀ THUẬT TOÁN
1 Định nghĩa thuật toán
Ta có thể định nghĩa (không chính thức) về thuật toán như sau:
Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán,hoặc hành động cần thực hiện… để cho ta lời giải của bài toán
1.2 Các đặc trưng của thuật toán
1.2.1 Đầu vào (Input)
Đầu vào của thuật toán chính là các giá trị cần đưa vào khi thuật toán bắt đầulàm việc Các giá trị này cần được lấy từ các tập hợp giá trị cụ thể nào đó
1.2.2 Đầu ra (Output)
Mỗi thuật toán có một hoặc nhiều dữ liệu ra Đó là các dữ liệu có quan hệ hoàntoàn xác định với các dữ liệu vào, và là kết quả của sự thực hiện thuật toán
1.2.3 Tính xác định
Ở mỗi bước, các thao tác phải rõ ràng, không gây nên sự nhập nhằng Nói rõ hơn
là trong cùng một điều kiện, hai bộ xử lí cùng thực hiện một thuật toán phải cho cùngmột kết quả như nhau
1.2.4 Tính khả thi
Tất cả các phép toán có mặt trong thuật toán phải đủ đơn giản Điều đó có nghĩa
là, các phép toán có thể được thực hiện trực tiếp (bằng giấy và but)
1.2.7 Tính tổng quát (generality)-Tính phổ dụng
Với mọi tập đầu vào thuộc dạng của bài toán thuật toán đều có thể giải được.Tức là thuật toán phải dùng để giải được một lớp các bài toán cùng loại
1.3 Phân tích thuật toán và đánh giá thời gian thực hiện thuật toán
1.3.1 Phân tích thuật toán
Trang 6Phân tích thuật toán là quá trình tìm ra những đánh giá về thời gian tính và dunglượng bộ nhớ cần thiết để thực hiện thuật toán
Hầu hết các bài toán đều có rất nhiều thuật toán khác nhau để giải quyết chúng
và nhiệm vụ của chúng ta là phải tìm ra thuật toán tốt nhất để thực hiện bài toán đã đặtra
Muốn làm được điều đó thì ta cần tiến hành phân tích thuật toán rồi so sánh cácthuật toán với nhau
1.3.2 Tại sao lại cần có thuật toán hiệu quả?
Kỹ thuật máy tính ngày càng tiến bộ rất nhanh, các máy tính lớn có thể đạt hàngtrăm triệu phép toán mỗi giây Tuy nhiên có những thuật toán mà độ phức tạp về thờigian là rất lớn mà các máy tính hiện đại nhất cũng tốn rất nhiều thời gian Khi đó thìviệc phân tích thuật toán để tìm ra những thuật toán hiệu quả là rất cần thiết
Ví dụ bài toán tháp Hà Nội, nếu sử dụng giải thuật đệ quy để chuyển 64 đĩa thảomãn yêu cầu bài toán thì cần khoảng 500 tỉ năm (giả sử mỗi lần chuyển 1 đĩa hết 1 giây
1.3.3 Phân tích hiệu quả thực hiện của thuật toán
Khi phân tích hiệu quả của thuật toán người ta quan tâm đến hai yếu tố:
- Độ phức tạp về thời gian: Là số bước tính toán hay số phép toán (phép toán sơcấp) cần để thực hiện thuật toán
- Độ phức tạp không gian: Là yêu cầu về bộ nhớ lưu trữ cần có để thuật toán cóthể thực hiện được Yếu tố này chủ yếu phụ thuộc vào cấu trúc dữ liệu được sử dụngNgoài ra khi lựa chọn thuật toán người ta còn căn cứ vào tính đơn giản, dễ hiểu, dễ càiđặt của thuật toán
1.3.4 Phân tích thời gian thực hiện thuật toán
Thời gian thực hiện một giải thuật (hay chương trình thể hiện giải thuật đó) phụthuộc vào rất nhiều yếu tố:
- Kích thước của dữ liệu đưa vào
- Các kiểu lệnh và tốc độ xử lý của máy tính, ngôn ngữ viết chương trình vàchương trình dịch ngôn ngữ ấy
Nhưng những yếu tố này không đồng đều với mọi loại máy trên đó cài đặt giảithuật, vì vậy không thể dựa vào chúng khi xác lập T(n)
1.3.4.1 Độ phức tạp về thời gian của giải thuật
Trang 7Nếu thời gian thực hiện một giải thuật là T(n) = cn2 (với c là hằng số) thì ta nói:
Độ phức tạp về thời gian của giải thuật này có cấp là n2 (hay cấp độ lớn của thời gianthực hiện giải thuật là n2) và ta ký hiệu
T(n) = O(n2) (ký hiệu chữ O lớn)Một cách tổng quát có thể định nghĩa:
Một hàm f(n) được xác định là O(g(n))
f(n) = O(g(n)) và được gọi là cấp g(n) nếu tồn tại các hằng số c và n0 saocho:
f(n) ≤ cg(n) khi n n0
nghĩa là f(n) bị chặn trên bởi một hằng số nhân với g(n), với mọi giá trị của n từ một điểm nào đó Thông thường các hàm thể hiện độ phức tạp về thời
gian của giải thuật có dạng: log2n, n, nlog2n, n2,n3, 2n, n!, nn
1.3.4.2 Xác định độ phức tạp về thời gian
* Quy tắc tổng: Giả sử T1(n) và T2(n) là thời gian thực hiện hai đoạn chươngtrình P1 và P2 mà T1(n) = O(f(n)); T2(n) = O(g(n)) thì thời gian thực hiện P1 và P2 kế tiếpnhau sẽ là:
T1(n) + T2(n) = O(max(f(n),g(n)))
Ví dụ: Trong một chương trình có 3 bước thực hiện mà thời gian thực hiện từng
bước lần lượt là O(n2), O(n3) và O(nlog2n) thì thời gian thực hiện 2 bước đầu làO(max(n2, n3)) = O(n3) Thời gian thực hiện chương trình sẽ là O(max(n3, nlog2n)) =O(n3)
Một ứng dụng khác của quy tắc này là nếu g(n) ≤ f(n) với mọi n n0 thì O(f(n) +g(n)) cũng là O(f(n)) Chẳng hạn: O(n4 + n2) = O(n4) và O(n+log2n) = O(n)
Trang 8* Quy tắc nhân: Nếu tương ứng với P1 và P2 là T1(n) = O(f(n)), T2(n) = O(g(n))thì thời gian thực hiện P1 và P2lồng nhau sẽ là:
T1(n)T2(n) = O(f(n)g(n))
Ví dụ: Câu lệnh gán: x:=x+1 có thời gian thực hiện bằng c (hằng số) nên được
đánh giá là O(1)
Câu lệnh for i:=1 to n do x:=x+1;
có thời gian thực hiện O(n.1) = O(n)
Câu lệnh: for i:=1 to n do
for j:=1 to n do x:=x+1;
có thời gian được đánh giá là O(n.n) = O(n2)
Cũng có thể thấy O(cf(n)) = O(f(n)) Ví dụ O(n2/2) = O(n2)
1.4 Các vấn đề liên quan đến thuật toán
1.4.1 Thiết kế thuật toán
Có một số kỹ thuật thiết kế thuật toán chung như:
- Chia để trị (divide and conque)
- Phương pháp tham lam (greedy method)
- Phương pháp quy hoạch động (dynamic programing)Nắm được các kỹ thuật thiết kế thuật toán là rất quan trọng giúp tìm ra các thuậttoán mới cho các bài toán mới
1.4.2 Tính đúng đắn của thuật toán
Khi đưa ra một thuật toán ta phải chứng minh được thuật toán đó khi thực hiện
sẽ cho kết quả đúng với mọi bộ dữ liệu vào hợp lệ
1.4.3 Biểu diễn thuật toán
Có nhiều phương pháp biểu diễn thuật toán Có thể biểu diễn thuật toán bằngcách liệt kê từng bước, bằng ngôn ngữ tự nhiên, bằng sơ đồ khối… Tuy nhiên để đảmbảo tính chính xác của thuật toán thì để biểu diễn thuật toán người ta thường dùng cáccách sau: Liệt kê từng bước, dùng sơ đồ khối, dùng ngôn ngữ lập trình(thường là giả mãlệnh)
Trang 9CHƯƠNG II
LÝ THUYẾT ĐỘ PHỨC TẠP Máy tính Turing
Máy tính Turing là một máy tính toán trừu tượng, vừa có khả năng của máy tínhthực sự, vừa cho phép định nghĩa về mặt toán học về những gì có thể tính toán được
2.1 Máy tính Turing tất định
2.1.1 Định nghĩa
Máy Turing tất định là một bộ M = (, A , 1, 2, 3 , q0, , qr) trong đó
: Là bảng chữ cáiA: Tập hữu hạn trạng thái bên trong
- Một tập trạng thái bên trong A
- Một đầu đọc ghi luôn đặt vào một ô trên băng và ta nói đầu đọc ghi đangnhìn ô đó Đầu đọc ghi này có thể di chuyển mỗi lần một ô (về cả hai phía trên băng).Tại một ô có thể đọc hay ghi một kí tự vào ô đó
- Một bộ điều khiển có thể ở bất kì trạng thái nào trong một tập hữu hạntrạng thái, trong đó có một trạng thái ban đầu và một trạng thái kết thúc
Trang 10Máy Turing tất định 1.2.3 Hoạt động
- Đầu đọc ghi đọc kí tự trên ô của băng, phụ thuộc vào trạng thái bên trong màđầu đọc viết một kí tự thuộc ( ) lên ô
- Đầu đọc ghi dịch chuyển một ô sang phải, sang trái hoặc là đứng yên tại chỗ
- Trạng thái bên trong được được thay đổi tuỳ thuộc vào kí hiệu được đọc vàtrạng thái ban đầu
Điều đáng ngạc nhiên là máy Turing làm được tất cả những việc mà các máytính khác làm được
Máy tính Turing có thể có nhiều băng nhưng nó không làm được gì nhiều hơnmáy tính Turing một băng (tương đương với máy tính một băng)
2.2 Máy tính Turing không tất định
2.1.1 Định nghĩa
Máy Turing không tất định là một bộ M = (, A , 1, 2, 3 , q0, , qr) trong đó
: Là bảng chữ cáiA: Tập hữu hạn trạng thái bên trong
Trang 11- Một tập trạng thái bên trong A
- Một đầu đọc ghi luôn đặt vào một ô trên băng và ta nói đầu đọc ghi đangnhìn ô đó Đầu đọc ghi này có thể di chuyển mỗi lần một ô (về cả hai phía trên băng).Tại một ô có thể đọc hay ghi một kí tự vào ô đó
- Một bộ xử lý phỏng đoán song song
Máy tính Turing không tất định 2.1.3 Hoạt động
- Đầu đọc ghi đọc kí hiệu nhận được trên băng, viết kí tự mốc dịch chuyển, đổitrạng thái như máy Turing tất định
- Bộ phỏng đoán xử lý song song giúp máy xử lý dữ liệu một cách song song Do
đó máy Turing không tất định có thể xử lý đồng thời các phỏng đoán
Tập trạng thái bên trong
1
Đầu đọc ghi
Bộ phận
phỏng đoán
Trang 12- Giả sử máy làm việc với một input x được đặt vào các ô từ 1 đến xcủabăng Giai đoạn phỏng đoán được thực hiện trên phần băng bên trái của dữ liệu vàotrước khi quá trình tính toán bắt đầu và được thực hiện bởi cơ chế phỏng đoán và đầuphỏng đoán Quá trình này cho phép viết lên các ô bên trái mỗi ô một kí hiệu nào đócho đến khi dừng lại ta có một từ trên phía trái của phần băng chứa input (gọi là từ được
dự đoán ), và giai đoạn phỏng đoán hoàn thành
Máy bắt đầu hoạt động như một máy tính Turing tất định thông thường Yếu tốkhông tất định ở chỗ trong giai đoạn phỏng đoán việc biết kí tự vào các ô bên trái của
dữ liệu vào là không xác định, tức là có thể viết theo nhiều khả năng khác nhau, xuấtphát từ một dữ kiện ban đầu, máy tính Turing không tất định có nhiều quá trình tínhtoán có thể khác nhau do từ được dự đoán có nhiều khả năng khác nhau
Sự khác nhau của máy tính Turing tất định và máy tính Turing không tất định 2.3 Các bài toán quyết định
* Định nghĩa bài toán quyết định
Bài toán quyết định là bài toán mà câu trả lời của nó chỉ là “yes” hoặc “no”(tương ứng với true/1 hay false/0)
Về nguyên tắc mọi bài toán đều có thể biểu diễn lại dưới dạng bài toán quyếtđịnh tương ứng
*Ví dụ về bài toán quyết định
Trang 13Ví dụ 1: Bài toán kiểm tra số nguyên tố
- Instance: Cho một số nguyên tố n>2
- Question: n có phải là số nguyên tố hay không?
Ví dụ 2: Bài toán HC (Hamilton cycle)
- Instance: Cho đồ thị vô hướng G = (V,E)
- Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay không?
2.4 Lớp P, NP và mối quan hệ giữa lớp P và lớp NP
2.4.1 Lớp P
* Định nghĩa:
Lớp P là lớp những bài toán giải quyết được bằng máy tính Turing tất định trongthời gian đa thức
* Ví dụ: Thuật toán Ơclide tìm UCLN của hai số là thuật toán giải được trong thời gian
đa thức Do đó bài toán tìm UCLN của hai số m và n thuộc lớp P
2.4.2 Lớp NP
* Định nghĩa:
Lớp NP là lớp các bài toán có thể giải được bằng máy Turing không tất địnhtrong khoảng thời gian đa thức
* Ví dụ: Bài toán chu trình Hamilton
- Instance: Cho đồ thị vô hướng G = (V,E)
- Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay không?
2.4.3 Mối quan hệ giữa lớp P và lớp NP
Mối quan hệ giữa lớp P và NP
NP
P
Trang 142.5 Bài toán lớp NPC
2.5.1 Phép dẫn với thời gian đa thức
* Định nghĩa:
Cho n 1 và 2 là hai bài toán quyết định
y là lớp các Instance ứng với YES
y là lớp các Instance ứng với NO
Một cách biến đổi f biến mỗi Instance của 1 thành Instance của 2 được gọi làphép dẫn thời gian đa thức nếu nó thoả mãn:
- Phép dẫn f thực hiện được trong thời gian đa thức bởi máy tính Turing
- Mỗi dữ kiện thuộc 1(y) thành dữ kiện thuộc 2(y)
- Mỗi dữ kiện thuộc 1(n) thành dữ kiện thuộc 2(n)
Hình : Minh hoạ một phép dẫn bài toán 1 thành 2 trong thời gian đa thức
2.5.2 Bài toán lớp NPC
*Định nghĩa: Một bài toán thuộc lớp NP mà mọi bài toán thuộc lớp NP khác đều dẫn
được về nó với thời gian đa thức được gọi là bài toán NPC
* Tính chất: Một bài toán là NPC nếu nó thoả mãn:
1, NP
2, Với ’ NP thì ’ dẫn được về với thời gian đa thức
Như vậy để chứng minh một bài toán là NPC ta cần chứng minh hai điều:
1, Bài toán đó phải thuộc lớp NP
2, Mọi bài toán thuộc lớp NP đều dẫn được về bài toán đó với thời gian đa thức
2.5.3 Mối quan hệ giữa các bài toán lớp P, NP và NPC
Mối quan hệ giữa P, NP và NPC được biểu diễn như hình sau:
Trang 15Mối quan hệ giữa lớp P, NP và NPC
2.5.4 Một số bài toán NPC
2.5.4.1 Bài toán SAT
Bài toán SAT được phát biểu dưới dạng quyết định như sau:
- Instance: Cho biểu thức Boolean f(x1,…,xn)
- Question: Cho biết f có thỏa được hay không?
Định lý Cook: Bài toán SAT là NPC
2.5.4.2 Bài toán 3-CNF-SAT
Bài toán 3-CNF-SAT được phát biểu dưới dạng bài toán quyết định như sau:
- Instance: C = {C1, C2,…,Cm} là các biểu thức logic độ dài 3
- Question: bảng chân lý để tất cả các Ci đều đúng
2.5.4.3 Bài toán Vertex-Cover
Instance: Cho đồ thị G =(V,E) và số kN* thoả mãn k V
Question: Tồn tại hay không một tập con V’ của V sao cho V’<k và mỗi cạnhk và mỗi cạnh{u,e} E thì một trong 2 đỉnh u hoặc e (hoặc cả đỉnh u và e ) phải thuộc V’
2.5.4.4 Bài toán Clique
Instance: Cho đồ thị G = (V,E) và số kN* thoả mãn k V
Question: Tồn tại hay không một tập con V’ của V sao cho V’ k mà mọi cặpđỉnh trong V’ đều được nối bởi 1 cạnh trong E
2.5.4.5 Bài toán Subset-Sum
Bài toán tổng hợp con (Subset-Sum) cho một tập hữu hạn S N và một đích t
N Hỏi có một tập con S’ S mà tổng các thành phần của nó có bằng giá trị t đã chohay không? Chẳng hạn như S = {1,4,16,64,256,1040,1041,1093,1284,1334,1500} và t
= 3754 thì tập con S’ = {1,16,64,256,1040,1093,1284} là một nghiệm
NPC P
NP
Trang 16Bài toán Subset-Sub được phát biểu dưới dạng bài toán quyết định như sau:Instance: Cho tập hợp S = {s1,s2,…,sn} trong đó Si N, N là một số nguyêndương; t là một số nguyên
Question: Tồn tại hay không một tập con của S mà tổng các phần tử của nó bằngt
2.5.4.6 Bài toán Knapsack
Cho S là một tập gồm n đối tượng phân biệt, mỗi đối tượng i có kích thước làmột số nguyên si và giá trị tương ứng là wi Với 2 số nguyên là s và w cho trước, câu hỏiđặt ra là có tồn tại tập hợp T S sao cho
T
i si s và
T
Bài toán Knapsack được phát biểu dưới dạng bài toán quyết định như sau:
Instance: Cho tập S = {(si,wi),…,(sn,wn)} với si Z, wi R+
Question: Có tồn tại T S sao cho
T
i si s và
T
2.5.4.7 Bài toán Hamilton Cycle
Bài toán chu trình Hamilton là bài toán đi xác định xem với một đồ thị G = (V,E)cho trước có chứa một chu trình Hamilton(chu trình đơn chứa mọi đỉnh của G) Bàitoán được phát biểu dưới dạng bài toán quyết định như sau:
Instance: Cho đồ thị G = (V,E)
Question: G có chứa một chu trình đơn đi quan mọi đỉnh hay không?
2.8.4.8 Bài toán Traveling Salesman
Bài toán Traveling Salesman được phát biểu dưới dạng bài toán đồ thị là: Cho đồ thị G cùng tham số k nguyên, mỗi cạnh e của G có một trọng số nguyênc(e) Câu hỏi đặt ra là có tồn tại một chu trình thăm tất cả các đỉnh của G (mỗi đỉnhđúng một lần) mà tổng trọng số các cạnh đã đi qua không vượt quá k không? Bài toánđược phát biểu dưới dạng bài toán quyết định như sau:
Instance: Cho tập n thành phố C = {C1,…,Cn} với khoảng cách
d(Ci,Cj) Z+ và một số nguyên dương BQuestion: Có tồn tại một hoán vị trên {1,2,…,n} sao cho:
1 1
n i
d(C(i),C(i+1)) + d(C(m),C(1)) B hay không?