Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
TRƯỜ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.
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
1
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
CHƯƠ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.1 Máy tính Turing tất định
2.1.1 Định nghĩa
2.1.2 Cấu tạo
2.1.3 Hoạt động
2.2 Máy tính Turing không tất định
2.1.1 Định nghĩa
2.1.2 Cấu tạo
2.1.3 Hoạt động
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
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
2
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
2.5 Bài toán lớp NPC
2.5.1 Phép dẫn với thời gian đa thức
2.5.2 Bài toán lớp NPC
2.5.3 Mối quan hệ giữa các bài toán 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
2.5.4.2 Bài toán 3-CNF-SAT
2.5.4.3 Bài toán Vertex-Cover
2.5.4.4 Bài toán Clique
2.5.4.5 Bài toán Subset-Sum
2.5.4.6 Bài toán Knapsack
2.5.4.7 Bài toán Hamilton Cycle
2.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
1. Đặt vấn đề
2. Giải thuật RSA
2.1 Chọn khoá
2.2 Mã hoá
2.3 Giải mã
2.4 Ví dụ minh hoạ
3. Ðộ an toàn của hệ RSA
4. Ứng dụng của hệ mật mã RSA
5. Chữ ký điện tử
5.1 Giới thiệu về chữ ký điện tử và vấn đề xác nhận
5.2 Sơ đồ chữ ký RSA
5.3 Tấn công chữ ký điện tử
CHƯƠNG IV. DEMO VỚI RSA
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
3
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
CHƯƠNG MỞ ĐẦU
1.Tên đề tài:
LÝ THUYẾT ĐỘ PHỨC TẠP VÀ ỨNG DỤNG
2.Lý do chọn đề tài
Trong mọi thời đại thông tin đều có ý nghĩa không thể thiếu đối với con
người cùng với các hoạt động kinh tế, chính trị và xã hội. Đặc biệt ở thế kỷ 21, thế
kỷ công nghệ thông tin, thông tin được khai thác triệt để, nó đóng vai trò ngày càng
quan trọng hơn đối với mọi quốc gia trên thế giới. Do đó chúng ta phải làm sao bảo
đảm được tính trong suốt của thông tin nghĩa là thông tin không bị thay đổi , sai
lệch, lộ trong suốt quá trình chuyển từ nơi gửi đến nơi nhận
Ngà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ành
khoa 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ệc
giả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ất
phá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ói
riê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ĩa
thực tiễn
* Nhiệm vụ:
- Đưa ra một báo cáo tìm hiểu về lý thuyết độ phức tạp và mật mã khoá công
khai RSA
- Xây dựng được chương trình áp dụng lý thuyết độ phức tạp có ý nghĩa thực
tiễn
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
4
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
CHƯƠ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 đầu là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àn
toà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ùng
mộ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.5 Tính dừng
Với mọi bộ dữ liệu đầu vào(lấy từ các tập của dữ liệu vào), thuật toán phải dừng sau
một số hữu hạn bước thực hiên.
1.2.6 Tính đơn trị (uniqueness)
Các giá trị trung gian của thuật toán trong từng bước và kết quả thực hiện thuật
toán được xác định một cách đơn trị và chỉ phụ thuộc vào đầu vào và kết quả của các
bước trước.
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
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
5
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
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 và dung
lượ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 đã đặt ra
⇒ 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ác thuậ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àng
tră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ời
gian 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ảo
mã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ụng
Ngoà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ải
thuậ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
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
6
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
Nếu thời gian thực hiện một giải thuật là T(n) = cn
2
(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à n
2
(hay cấp độ lớn của thời gian
thực hiện giải thuật là n
2
) và ta ký hiệu
T(n) = O(n
2
) (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à n
0
sao
cho:
f(n) ≤ cg(n) khi n ≥ n
0
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: log
2
n, n, nlog
2
n, n
2
,n
3
, 2
n
, n!, n
n
log
2
n n nlog
2
n n
2
n
3
2
n
0 1 0 1 1 2
1 2 2 4 8 4
2 4 8 16 64 16
3 8 24 64 512 256
4 16 64 256 4096 65536
5 32 160 1024 32768 2147483648
Các hàm như 2
n
, n!, n
n
được gọi là hàm loại mũ. Một giải thuật mà thời gian thực
hiện của nó có cấp là các hàm loại mũ thì tốc độ rất chậm. Các hàm như log
2
n, n, nlog
2
n,
n
2
,n
3
được gọi là các hàm loại đa thức. Giải thuật với thời gian thực hiện có cấp hàm đa
thức thì thường chấp nhận được.
1.3.4.2 Xác định độ phức tạp về thời gian
* Quy tắc tổng: Giả sử T
1
(n) và T
2
(n) là thời gian thực hiện hai đoạn chương
trình P
1
và P
2
mà T
1
(n) = O(f(n)); T
2
(n) = O(g(n)) thì thời gian thực hiện P
1
và P
2
kế tiếp
nhau sẽ là:
T
1
(n) + T
2
(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(n
2
), O(n
3
) và O(nlog
2
n) thì thời gian thực hiện 2 bước đầu là
O(max(n
2
, n
3
)) = O(n
3
). Thời gian thực hiện chương trình sẽ là O(max(n
3
, nlog
2
n)) =
O(n
3
).
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
7
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
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 ≥ n
0
thì O(f(n) +
g(n)) cũng là O(f(n)). Chẳng hạn: O(n
4
+ n
2
) = O(n
4
) và O(n+log
2
n) = O(n).
* Quy tắc nhân: Nếu tương ứng với P
1
và P
2
là T
1
(n) = O(f(n)), T
2
(n) = O(g(n))
thì thời gian thực hiện P
1
và P
2
lồng nhau sẽ là:
T
1
(n)T
2
(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(n
2
)
Cũng có thể thấy O(cf(n)) = O(f(n)). Ví dụ O(n
2
/2) = O(n
2
)
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ật
toá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ằng cách
liệt kê từng bước, bằng ngôn ngữ tự nhiên, bằng sơ đồ khối… Tuy nhiên để đảm bả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ác cá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)
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
8
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
CHƯƠ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ính
thự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
, q
0
, , q
r
) trong đó
Σ: Là bảng chữ cái
A: Tập hữu hạn trạng thái bên trong
δ
1
:
Là hàm kí tự
δ
1
: (Σ ∪ { }) × A → (Σ ∪ { })
δ
2
:
Là hàm dịch chuyển
δ
2
: (Σ ∪ { }) × A → {-1,0,1}
δ
2
:
Là hàm trạng thái
δ
3
: (Σ ∪ { }) × A → A
q
0
: Trạng thái ban đầu (q
0
∈ A)
q
r
: Trạng thái kết thúc (q
r
∈ A)
: Ký tự rỗng
2.1.2 Cấu tạo
Máy tính Turing tất định là một máy trừu tượng bao gồm:
- Một bảng chữ cái Σ
- Băng vô hạn có thể mở rộng về một phía hoặc cả hai phía. Trên băng
được chia thành các ô chứa một kí hiệu lấy từ bảng chữ cái Σ
- 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 đang
nhì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ạn
trạng thái, trong đó có một trạng thái ban đầu và một trạng thái kết thúc
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
9
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
Má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áy tí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ơn
má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
, q
0
, , q
r
) trong đó
Σ: Là bảng chữ cái
A: Tập hữu hạn trạng thái bên trong
δ
1
:
Là hàm kí tự
δ
1
: (Σ ∪ { }) × A → (Σ ∪ { })
δ
2
:
Là hàm dịch chuyển
δ
2
: (Σ ∪ { }) × A → {-1,0,1}
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
0 1 0 1 1 0
Tập trạng thái
bên trong
10
Báo cáo nghiên cứu khoa học GVHD: PGS.TS Vũ Đình Hoà
δ
2
:
Là hàm trạng thái
δ
3
: (Σ ∪ { }) × A → A
q
0
: Trạng thái ban đầu (q
0
∈ A)
q
r
: Trạng thái kết thúc (q
r
∈ A)
: Ký tự rỗng
2.1.2 Cấu tạo
Máy tính Turing tất định là một máy trừu tượng bao gồm:
- Một bảng chữ cái Σ
- Băng vô hạn có thể mở rộng về một phía hoặc cả hai phía. Trên băng
được chia thành các ô chứa một kí hiệu lấy từ bảng chữ cái Σ
- 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 đang
nhì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, đổi
trạ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.
Sinh viên thực hiện: Lưu Thị Lan Hương K54A-CNTT-DHSPHN
0 1 1 0 1 0
Tập trạng thái
bên trong
1
Đầu đọc ghi
Bộ phận
phỏng đoán
11