1. Trang chủ
  2. » Luận Văn - Báo Cáo

MỘT số PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG của THUẬT TOÁN và ỨNG DỤNG (tóm tắt)

24 409 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 24
Dung lượng 131,5 KB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN ---Bế Thị Hương MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN VÀ ỨNG DỤNG LUẬN VĂN THẠC SĨ KHOA HỌC... ĐẠI HỌC QUỐC GIA

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

-Bế Thị Hương

MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN VÀ ỨNG DỤNG

LUẬN VĂN THẠC SĨ KHOA HỌC

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

-Bế Thị Hương

MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN VÀ ỨNG DỤNG

Chuyên ngành: Cơ sở Toán học cho Tin học

Mã số: 60460110

LUẬN VĂN THẠC SĨ KHOA HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS NGUYỄN THỊ HỒNG MINH

Hà Nội – Năm 2015

Trang 3

MỞ ĐẦU

Để đánh giá một thuật toán là tốt có rất nhiều tiêu chítrong đó không thể bỏ qua tính đúng của thuật toán Và đâycũng là nội dung chính của luận văn này theo đề tài nghiêncứu: “Một số phương pháp chứng minh tính đúng của thuậttoán và ứng dụng” Luận văn nhằm tìm hiểu, nghiên cứu,tổng hợp phương pháp chứng minh tính đúng của thuật toán.Cấu trúc luận văn gồm 3 chương, nội dung chính như sau:

Chương 1 Tổng quan về phân tích thuật toán.

Chương này nhằm tổng hợp lại một số kiến thứcchung về bài toán, thuật toán, cấu trúc dữ liệu, chương trình

và kiến thức về phân tích thuật toán Trong chương này còntổng hợp lại một số phương pháp thiết kế thuật toán thường

sử dụng trong thực tế Như kỹ thuật đệ quy, phương phápchia để trị, phương pháp quay lui, phương pháp nhánh cận,phương pháp quy hoạch động và phương pháp tham lam

Chương 2 Một số phương pháp chứng minh tính đúng của thuật toán.

Nội dung chương này gồm các chiến lược chứng minh

Trang 4

minh tính đúng của thuật toán như phương pháp quy nạp vàphương pháp bất biến vòng lặp

Trong đó, phương pháp quy nạp chứng minh cho cácthuật toán đệ quy, phương pháp bất biến vòng lặp chứngminh cho các thuật toán không đệ quy Đối với mỗi phươngpháp trình bày về đặc điểm, phương pháp chung đồng thờinêu một số ví dụ về thuật toán và chứng minh tính đúng củacác thuật toán đó

Chương 3 Ứng dụng chứng minh tính đúng của một

Trang 5

CHƯƠNG 1 TỔNG QUAN VỀ PHÂN TÍCH THUẬT

TOÁN

Để khẳng định được một thuật toán là tốt là một điềukhông dễ dàng gì Thật vậy, để đánh giá một thuật toán tốt tacần rất nhiều kỹ thuật từ thiết kế, phân tích đến đánh giá mộtthuật toán Ở chương này đề cập tổng quát đến các vấn đềtrong phân tích thuật toán và một số thuật toán cơ bảnthường dùng trong khoa học tính toán hiện đại

1.1 Một số khái niệm cơ bản

1.1.1 Bài toán

Điểm quan trọng đầu tiên khi giải một bài toán trênmáy tính đó là cần xác định rõ những gì đã biết input (dữ liệuvào) và kết quả cần thu được output (dữ liệu ra) và phân tíchmối quan hệ giữa hai yếu tố đó

1.1.2 Thuật toán (Algorithm)

Để giải một bài toán trên máy tính sau khi đã xác định

rõ ràng về bài toán việc quan trọng nhất là phải đưa ra mộtthuật toán tốt, thuật toán này có thể là một thiết kế mới hoặc

Trang 6

lựa chọn một thuật toán đã có Thuật toán là để biểu diễn vềcách giải một bài toán trên máy tính

Định nghĩa: Thuật toán (Algorithm) để giải một bài

toán là một dãy hữu hạn các thao tác được sắp xếp theo mộttrình tự xác định, sao cho sau khi thực hiện dãy thao tác ấy,

từ dữ liệu vào có thể là một giá trị hoặc một tập giá trị (input)của bài toán ta nhận được một giá trị hoặc một tập giá trị còngọi là dữ liệu ra (output) của bài toán đó

1.1.3 Cấu trúc dữ liệu (Data Structure)

1.1.4 Chương trình (Program)

Chương trình = Thuật toán + Cấu trúc dữ liệu.Chương trình là sự thể hiện bằng một ngôn ngữ lập trình cụthể một thuật toán đã cho được thể hiện trên một cấu trúc dữliệu xác định Việc lựa chọn cấu trúc dữ liệu phù hợp vớithuật toán hoặc ngược lại lựa chọn thuật toán phù hợp vớicấu trúc dữ liệu cụ thể còn phụ thuộc vào mục đích củachương trình, kỹ năng người lập trình và khả năng của ngônngữ lập trình cụ thể

Trang 7

1.2 Một số phương pháp thiết kế thuật toán

Ngày nay có nhiều phương pháp thiết kế thuật toán đãđược nghiên cứu và sử dụng trong công nghệ phần mềm Cónhững bài toán có thể giải được bằng thuật toán nhưng cũngnhững bài toán chưa có thuật toán hoặc chỉ có thuật toán cholời giải tương đối chấp nhận được Trong luận văn nàynghiên cứu về các phương pháp thiết kế thuật toán và ứngdụng cho các bài toán có thuật toán để giải

1.2.1 Kỹ thuật đệ quy

Đệ quy là một khái niệm cơ bản trong toán học và tinhọc Ta nói một đối tượng là đệ quy nếu nó được định nghĩaqua chính nó hoặc một đối tượng cùng dạng với chính nóbằng quy nạp Ý tưởng của kỹ thuật đệ quy đó là chia bàitoán cần giải quyết thành nhiều bài toán nhỏ hơn, việc chianày thực hiện cho đến khi bài toán con có lời giải và lời giảinày thường là tường minh và tương đối đơn giản

Khái niệm giải thuật đệ quy: Một bài toán T được

thực hiện bằng giải thuật của một bài toán T’ có dạng giốngnhư T thì giải thuật đó gọi là giải thuật đệ quy

Trang 8

Bài toán T’ tuy có dạng giống bài toán T nhưng T’theo một nghĩa nào đó phải là bài toán nhỏ hơn T Bài toánT’ phải dễ giải hơn bài toán T và việc giải bài toán T’ khôngcần dùng đến T.

1.2.2 Phương pháp chia để trị (Divide and Conquer)

Phương pháp chia để trị có tư tưởng là chia bài toánban đầu thành các bài toán con tương tự Các bài toán contiếp tục được chia nhỏ hơn, cứ chia liên tiếp như vậy cho tớikhi gặp bài toán con đã có lời giải hoặc có thể dễ dàng đưa ralời giải Sau đó lần lượt giải các bài toán con này và kết hợpcác kết quả lại với nhau ta thu được kết quả cần tìm của bàitoán ban đầu

1.2.3 Phương pháp quay lui (Backtracking)

Tư tưởng của thuật toán quay lui đó là tìm nghiệm củabài toán bằng cách xem xét tất cả các phương án có thể Ta

có thể thử duyệt các phương án cho đến khi tìm thấy phương

án đúng còn gọi là phương pháp thử sai Với tốc độ xử línhanh của máy vi tính thì phương pháp này có thể giải quyếtđược nhiều bài toán tuy nhiên nếu kích thước bài toán quálớn thì nó trở nên không phù hợp Bởi vì nếu kích thước bài

Trang 9

toán lớn thì kéo theo thời gian duyệt các phương án và độphức tạp về mặt không gian cũng lớn và có thể lớn đến mứcnào đó không thể chấp nhận được Do đó phương pháp nàythường chỉ hữu dụng với các bài toán có kích thước nhỏ.

1.2.4 Phương pháp nhánh cận

Tư tưởng của phương pháp nhánh cận như sau: Ta

xây dựng dần dần các thành phần của nghiệm Giả sử ta đãxây dựng được k thành phần của véc tơ nghiệm

x , x , , x1 2 k , nhiệm vụ tiếp theo là phải xây dựng đượcthành phần thứ k+1 tức là tìm xk+1 cho phù hợp Trong quátrình mở rộng nghiệm như vậy nếu như bằng cách nào đó cóthể đánh giá được tất cả các nghiệm mở rộng của nó

x , x , , x , x , 1 2 k k+1  đều không tốt bằng nghiệm tốt nhất

đã biết thì ta không mở rộng nghiệm theo nhánh này nữa.Như vậy thuật toán nhánh cận sẽ nhanh hơn thuật toán quaylui vét cạn vì nhánh cận không phải duyệt hết tất cả cáctrường hợp của bài toán Nói tóm lại, với phương pháp nhánhcận ta có thể thu hẹp phạm vi tìm kiếm nghiệm bằng cáchđánh giá trong quá trình ta mở rộng các thành phần của

Trang 10

nghiệm để bỏ đi những nhánh chắc chắn không phải lànghiệm của bài toán Do đó phương pháp nhánh cận sẽnhanh hơn và bớt độ phức tạp về mặt không gian.

1.2.5 Phương pháp quy hoạch động (Dynamic

Programming )

Phương pháp quy hoạch động nhìn chung được ápdụng cho lớp các bài toán tối ưu và cho kết quả đúng Trongthuật toán giải bài toán tối ưu thường phải giải quyết nhiềutrường hợp có thể quy về các bài toán con để giải và lựa chọngiải pháp tối ưu nhất của bài toán

Các bước để giải bài toán bằng quy hoạch động gồmnhững công việc chính sau đây:

 Tìm nghiệm của bài toán con nhỏ nhất (Thường làtrường hợp suy biến);

 Tìm công thức (gọi là công thức truy hồi) xây dựngnghiệm cho bài toán con thông qua nghiệm của bàitoán con nhỏ hơn;

 Tạo bảng phương án lưu trữ giá trị nghiệm của các bàitoán con;

 Từ bảng phương án suy ra nghiệm của bài toán banđầu cần giải

Trang 11

1.2.6 Phương pháp tham lam (Greedy Method)

Tư tưởng của phương pháp tham lam như sau: Ta

xây dựng dần dần các thành phần của nghiệm Giả sử ta đãxây dựng được k thành phần của véc tơ nghiệm

x , x , , x1 2 k , nhiệm vụ tiếp theo là phải xây dựng đượcthành phần thứ k+1 tức là tìm xk+1 Lúc này thành phần xk+1

được lựa chọn theo tiêu chí là tốt nhất theo hàm f(X) trongtập các ứng cử viên Sk để được x , x , , x , x1 2 k k+1 Cứ tiếptục xây dựng như vậy cho đến hết các thành phần củanghiệm X

Với cách làm như vậy có một số bài toán nếu xâydựng được hàm f(X) thích hợp thì có thể tìm được nghiệmtối ưu Còn đối với phần nhiều bài toán ta chỉ tìm đượcnghiệm gần đúng với nghiệm tối ưu khi sử dụng thuật toántham lam

1.3 Phân tích thuật toán

Phân tích thuật toán gồm nhiều vấn đề như phân tíchtính đúng, tính hiệu quả, độ phức tạp của thuật toán

Trang 12

1.3.1 Tính đúng đắn của thuật toán

Thiết kế xong một thuật toán câu hỏi luôn luôn phải

có đó là thuật toán được thiết kế đã đúng chưa? Cách đơngiản nhất mà được sử dụng thông dụng đó là viết chươngtrình cho thuật toán đã thiết kế và chạy thử chương trình vớinhiều bộ dữ liệu vào cụ thể (tests) để kiểm tra dữ liệu ra cóchuẩn xác hay chưa Tuy nhiên, cách này cũng chỉ khẳngđịnh được thuật toán đúng với các trường hợp cụ thể mà thôi

Có một cách khác chứng minh được thuật toán đúng đó làchứng minh bằng toán học Nhưng với cách chứng minhthuật toán đúng bằng toán học thì phức tạp hơn nhiều và đòihỏi nhiều kiến thức tổng hợp cả về toán học và tin học cộngvới khả năng của người thực hiện việc chứng minh thuậttoán Chúng ta sẽ nghiên cứu việc này cụ thể hơn ở cácchương sau

1.3.2 Độ phức tạp thuật toán

a) Độ phức tạp về mặt thời gian

b) Độ phức tạp về mặt không gian

Trang 13

CHƯƠNG 2 MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH

TÍNH ĐÚNG CỦA THUẬT TOÁN

Chúng ta đã biết thuật toán là vô cùng quan trọng và

có thể nói là thuật toán mang tính chất quyết định để giải mộtbài toán trên máy tính Nhưng một thuật toán vừa thiết kếxong chưa thể khẳng định được ngay là thuật toán đó cóđúng hay không Ở chương này nghiên cứu tổng quan về cácchiến lược chứng minh tính đúng của thuật toán Nghiên cứuchi tiết về chiến lược chứng minh tính đúng của thuật toánmột cách trực tiếp dựa vào toán học mà không cần chạy các

bộ test chương trình cụ thể

2.1 Các chiến lược chứng minh tính đúng thuật toán

Để kiểm tra thuật toán có đúng hay không ta có nhiềuchiến lược như kiểm thử, chứng minh tính đúng hoặc kết hợp

cả kiểm thử và chứng minh tính đúng nhưng mỗi chiến lượcđều có ưu, nhược điểm riêng Sau đây là một số đặc điểm sơlược về mỗi chiến lược

a) Kiểm thử (Testing):

b) Chứng minh tính đúng (Correctness proof):

Trang 14

Với chiến lược chứng minh tính đúng của thuật toáncần dùng các kiến thức toán học để chứng minh thuật toánđúng Cách này chứng minh được cho bài toán tổng quátnhưng đòi hỏi tư duy trừu tượng và logic toán học chặt chẽ.

Có các phương pháp chứng minh tính đúng của thuật toánnhư phương pháp quy nạp, phương pháp bất biến vòng lặp.Đây cũng là nội dung nghiên cứu chủ yếu khi thực hiện luậnvăn này

c) Kết hợp kiểm thử và chứng minh tính đúng:

Để đảm bảo tính đúng của thuật toán một cách chặtchẽ hơn nữa ta có thể kết hợp cả hai chiến lược kiểm thử vàchứng minh tính đúng đã nêu ở trên

2.2 Các phương pháp chứng minh tính đúng (Correctness proofs)

Làm thế nào để biết thuật toán hoạt động thế nào?Cách tốt nhất là chứng minh thuật toán là đúng Có một sốphương pháp chứng minh tính đúng của thuật toán như: Đốivới các thuật toán đệ quy có thể chứng minh tính đúng bằngphương pháp quy nạp Đối với các thuật toán không đệ quy

Trang 15

có thể sử dụng phương pháp bất biến vòng lặp cho mọi vònglặp.

2.2.1 Phương pháp quy nạp (induction)

a) Phương pháp quy nạp toán học

b) Chứng minh tính đúng của thuật toán bằng phương pháp quy nạp

Các thuật toán nếu chỉ có các dòng lệnh đơn lẻ không

có chứa đệ quy hay lặp thì ta dễ dàng thấy được tính đúngcủa nó nhưng với các thuật toán có chứa đệ quy hay vòng lặpthì việc chứng minh trở nên phức tạp hơn Sau đây ta sửdụng phương pháp quy nạp toán học đã nêu ở trên để chứngminh tính đúng của thuật toán đệ quy

Ta sẽ chứng minh tính đúng của thuật toán đệ quybằng phương pháp quy nạp theo kích thước dữ liệu vào nhưsau:

 Cơ sở của quy nạp: Trường hợp suy biến của đệ quy Đâycũng chính là điều kiện phải có để thuật toán có tínhdừng

Trang 16

 Giả thiết quy nạp: Giả sử thuật toán đúng với dữ liệu kíchthước n.

 Tổng quát: Chứng minh thuật toán đúng với dữ liệu kíchthước n+1

c) Một số ví dụ

2.2.2 Phương pháp bất biến vòng lặp (loop invariant) a) Chứng minh tính đúng của thuật toán bằng phương pháp bất biến vòng lặp

Chứng minh tính đúng của thuật toán lặp bằngphương phương pháp bất biến vòng lặp có các đặc điểm nhưsau: Bất biến vòng lặp là biểu thức logic (của các biến được

sử dụng vòng lặp) có giá trị không đổi trong quá trình lặp.Tại mỗi thời điểm của thuật toán chỉ có một vòng lặp, nếu cóvòng lặp lồng nhau thì phải bắt đầu từ các vòng lặp bêntrong Sau mỗi vòng lặp bất biến vòng lặp sẽ trả lại kết quảđúng và sự đúng này phải được duy trì ở các vòng lặp tiếptheo.Sử dụng bất biến vòng lặp để chỉ ra thuật toán lặp là cótính dừng Thông qua sự kết thúc các điều kiện chứng minhrằng thuật toán cho kết quả đúng

Trang 17

b) Các đặc trưng của bất biến vòng lặp

 Khởi tạo: bất biến của vòng lặp phải đúng trước lần lặpđầu tiên

 Duy trì: Nếu bất biến vòng lặp đúng trước một vòng lặpthì bất biến vòng lặp vẫn còn đúng trước vòng lặp tiếptheo

 Kết thúc: Khi vòng lặp kết thúc, bất biến vòng lặp nàycho chúng ta một tính chất hữu ích giúp chứng minh đượcthuật toán là đúng đắn

c) Một số ví dụ

Trang 18

CHƯƠNG 3 ỨNG DỤNG CHỨNG MINH TÍNH ĐÚNG CỦA MỘT SỐ THUẬT TOÁN

Việc chứng minh tính đúng của thuật toán bằng toánhọc đòi hỏi nhiều kiến thức tổng hợp Ở chương này nhằmnghiên cứu và chứng minh một số thuật toán kinh điển cùngvới ứng dụng của nó trong việc giải quyết các bài toán trongthực tế Mặc dù các thuật toán kinh điển đã ra đời từ lâunhưng nó vẫn luôn được cải tiến và đưa vào sử dụng trongnhiều phần mềm hiện nay Vì để tìm được một bất biến vònglặp đúng để chứng minh thuật toán đúng là vấn đề khó nênsau đây nghiên cứu về các bài toán và thuật toán sử dụngphương pháp bất biến vòng lặp:

3.1 Bài toán: Dãy con đơn điệu tăng dài nhất

Cho một dãy gồm n số nguyên a1, a2, , an Tìm dãycon đơn điệu tăng có độ dài lớn nhất của dãy số đó (các phần

tử có thể không liền kề nhau nhưng phải giữ nguyên thứ tựban đầu)

Nhận xét: Tất cả các dãy con của dãy số n phần tử banđầu là 2n Do đó phương pháp duyệt tất cả các dãy con và lựachọn dãy phù hợp là không thể thực hiện khi n lớn vì khônggian duyệt là quá lớn Do đó ta lựa chọn phương pháp quy

Trang 19

hoạch động nhằm tiết kiệm không gian nhớ và ít chi phí thờigian hơn để giải bài toán đã cho.

3.2 Bài toán: Chia kẹo

Có n gói kẹo, gói kẹo thứ i chứa a[i] chiếc kẹo, đưa racách chia các gói kẹo thành 2 phần sao cho độ lệch về số kẹotrong hai phần là ít nhất

 Input: Dữ liệu vào từ tệp ChiaKeo.INP

+ Dòng đầu là số gói kẹo n

+ Dòng thứ hai là số cái kẹo trong từng gói

 Output: Dữ liệu ra tệp ChiaKeo.OUT

+ Số gói kẹo trong mỗi phần sau khi được chia

3.3 Bài toán Cây bao trùm nhỏ nhất (Minimum spanning tree).

Bài toán: Cho đồ thị vô hướng có trọng số

G=(V,E,w) Gọi T là cây bao trùm của G, w(T) là trọng sốcủa cây bao trùm T Trọng số của cây bao trùm T là tổngtrọng số các cạnh trong T Trong một đồ thị có thể có nhiềucây bao trùm, vấn đề đặt ra là cần tìm cây bao trùm có trọng

số nhỏ nhất hay còn gọi là cây bao trùm nhỏ nhất

Ngày đăng: 18/06/2016, 14:35

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w