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

THUẬT TOÁN – ĐỘ PHỨC TẠP CỦA THUẬT TOÁN

29 1,9K 8
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Thuật toán – Độ phức tạp của thuật toán
Chuyên ngành Toán Học và Tin Học
Thể loại Bài viết
Định dạng
Số trang 29
Dung lượng 386 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thuật toán là một khái niệm cơ sở của Toán học và Tin học. Hiểu một cách đơn giản, thuật toán là một tập các hướng dẫn nhằm thực hiện một công việc nào đó.

Trang 1

THUẬT TOÁN – ĐỘ PHỨC TẠP CỦA THUẬT TOÁN

Mục lục

1 THUẬT TOÁN 2

2 CÁC PHƯỢNG PHÁP BIỂU DIỄN THUẬT TOÁN 8

3 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN 13

4 PHÂN LOẠI VẤN ĐỀ - BÀI TOÁN 16

5 THUẬT TOÁN ĐỆ QUY 19

6.THUẬT GIẢI 22

7.CÂU HỎI 28

8.Bài viết khác: SỰ PHÂN LỚP VẤN ĐỀ - BÀI TOÁN 29

Trang 2

1 THUẬT TOÁN

Thuật toán là một khái niệm cơ sở của Toán học và Tin học Hiểu một cách đơn giản,thuật toán là một tập các hướng dẫn nhằm thực hiện một công việc nào đó Ðối với việc giải quyết

một vấn đề - bài toán thì thuật toán có thể hiểu là một tập hữu hạn các hướng dẫn rõ ràng để người

giải toán có thể theo đó mà giải quyết được vấn đề Như vậy, thuật toán là một phương pháp thể hiệnlời giải của vấn đề - bài toán

Tại sao lại là "Thuật toán" ?

Từ thuật toán (Algorithm) xuất phát từ tên một nhà toán học người Trung Á là Abu Abd - Allah ibn Musa

al’Khwarizmi, thường gọi là al’Khwarizmi Ông là tác giả một cuốn sách về số học, trong đó ông đã dùng phương pháp

mô tả rất rõ ràng, mạch lạc cách giải những bài toán Sau này, phương pháp mô tả cách giải toán của ông đã được xem là một chuẩn mực và được nhiều nhà toán học khác tuân theo Từ algorithm ra đời dựa theo cách phiên âm tên của ông

Việc nghiên cứu về thuật toán có vai trò rất quan trọng trong khoa học máy tính vì máytính chỉ giải quyết được vấn đề khi đã có hướng dẫn giải rõ ràng và đúng Nếu hướng dẫn giải saihoặc không rõ ràng thì máy tính không thể giải đúng được bài toán Trong khoa học máy tính, thuật

toán được định nghĩa là một dãy hữu hạn các bước không mập mờ và có thể thực thi được, quá trình hành

động theo các bước này phải dừng và cho được kết quả như mong muốn

Số bước hữu hạn của thuật toán và tính chất dừng của nó được gọi chung là tính hữu hạn

Số bước hữu hạn của thuật toán là một tính chất khá hiển nhiên Ta có thể tìm ở đâu một lời giải vấn

đề - bài toán có vô số bước giải ? Tính "không mập mờ" và "có thể thực thi được" gọi chung là tính xác

3 Chọn học sinh đứng đầu danh sách để làm lớp trưởng

Khi nhận được thông báo này, giáo viên chắc chắn sẽ rất bối rối vì không hiểu là trong danhsách học sinh cần có những thông tin gì? Danh sách chỉ cần họ tên, hay cần thêm ngày tháng nămsinh? Có cần thêm điểm trung bình không? Yêu cầu 2 lại càng gây nhiều thắc mắc Cần phải sắp xếpdanh sách theo chiều tăng dần hoặc giảm dần ? Sắp theo chỉ tiêu gì ? Theo tên, theo ngày tháng nămsinh hay theo điểm trung bình chung, Giả sử sắp theo điểm trung bình thì nếu có hai học sinh cùngđiểm trung bình thì học sinh nào sẽ sắp trước, học sinh nào sẽ sắp sau ?

Hướng dẫn ở trên vi phạm tính chất "không mập mờ" của thuật toán Nghĩa là, có quá nhiều

thông tin còn thiếu để làm cho các bước 1,2 được hiểu đúng và hiểu theo một nghĩa duy nhất. Nếu sửalại một chút ít thì hướng dẫn trên sẽ trở nên rõ ràng hơn rất nhiều và có thể gọi là một thuật toán chọnlớp trưởng !

1 Lập danh sách tất các học sinh trong lớp theo hai thông tin: Họ và Tên; Ðiểm trung bình cuối năm

Trang 3

2 Sắp hạng học sinh theo điểm trung bình theo thứ tự giảm dần (từ điểm cao đến điểm thấp) Hai học sinh

có cùng điểm trung bình sẽ có cùng hạng

3 Nếu chỉ có một học sinh có hạng nhất thì chọn học sinh đó làm lớp trưởng Trường hợp có nhiều học

sinh đồng hạng nhất thì chọn học sinh có điểm môn Toán cao nhất làm lớp trưởng

Nếu vẫn còn nhiều hơn một học sinh đồng hạng nhất và có cùng điểm môn Toán cao nhất thì tiến hành bốc thăm

Ở đây chúng ta cần phân biệt mập mờ và sự chọn lựa có quyết định Mập mờ là thiếu thông

tin hoặc có nhiều chọn lựa nhưng không đủ điều kiện để quyết định Còn chọn lựa có quyết định là

hoàn toàn xác định duy nhất trong điều kiện cụ thể của vấn đề Chẳng hạn trong vấn đề chọn lớptrưởng ở trên, bước 3 thể hiện một sự lựa chọn có quyết định Tất nhiên, khi chưa lập danh sách,chưa xếp hạng theo điểm trung bình thì giáo viên không thể biết được sẽ chọn lớp trưởng theo cáchnào Nhưng khi đã sắp xong danh sách thì chỉ có một phương án chọn duy nhất

Tính "thực thi được" cũng là một tính chất khá hiển nhiên Rõ ràng nếu trong "thuật toán" tồn

tại một bước không thể thực thi được thì làm sao ta có được kết quả đúng như ý muốn? Tuy nhiên,

cần phải hiểu là "thực thi được" xét trong điều kiện hiện tại của bài toán Chẳng hạn, khi nói "lấy căn

bậc hai của một số âm" là không thể thực thi được nếu miền xác định của bài toán là số thực, nhưng

trong miền số phức thì thao tác "lấy căn bậc hai của một số âm" là hoàn toàn thực thi được Tương tự,

nếu ta chỉ đường cho một người đi xe máy đến một bưu điện nhưng con đường ta chỉ là đường cụt,đường cấm hoặc đường ngược chiều thì người đi không thể đi đến bưu điện được

Tính "dừng" là tính chất dễ bị vi phạm nhất, thường là do sai sót khi trình bày thuật toán Dĩ nhiên, mọi thuật toán đều nhằm thực hiện một công việc nào đó nên sau một thời gian thi hành hữu

hạn thì thuật toán phải cho chúng ta kết quả mong muốn Khi không thỏa tính chất này, ta nói rằng

"thuật toán" bị lặp vô tận hoặc bị quẩn Ðể tính tổng các số nguyên dương lẻ trong khoảng từ 1 đến n

ta có thuật toán sau :

B1 Hỏi giá trị của n

Ta chú ý đến bước B4 Ở đây ta muốn kết thúc thuật toán khi giá trị của i vượt quá n Thay

vì viết là "nếu i lớn hơn n" thì ta thay bằng điều kiện "nếu i bằng n+1" vì theo toán học "i = n+1" thìsuy ra "i lớn hơn n" Nhưng điều kiện "i=n+1" không phải lúc nào cũng đạt được Vì ban đầu i = 1 là

số lẻ, sau mỗi bước, i được tăng thêm 2 nên i luôn là số lẻ Nếu n là số chẵn thì n+1 là một số lẻ nênsau một số bước nhất định, i sẽ bằng n+1 Tuy nhiên, nếu n là một số lẻ thì n+1 là một số chẵn, do i

Trang 4

là số lẻ nên dù có qua bao nhiêu bước đi chăng nữa, i vẫn khác n+1 Trong trường hợp đó, thuật toántrên sẽ bị quẩn.

Tính "đúng" là một tính chất khá hiển nhiên nhưng là tính chất khó đạt tới nhất Thực vậy, khi

giải quyết một vấn đề-bài toán, ta luôn luôn mong muốn lời giải của mình sẽ cho kết quả đúng nhưngkhông phải lúc nào cũng đạt được Mọi học sinh khi làm bài kiểm tra đều muốn bài làm của mình cóđáp số đúng nhưng trên thực tế, trong lớp học chỉ có một số học sinh nhất định là có khả năng đưa ralời giải đúng!

Thuật toán thì cứng nhắc !

Các tính chất của thuật toán rất chặt chẽ và cứng nhắc Nhưng điều đó cũng có nghĩa là khả năng giải quyết vấn đề theo kiểu thuật toán cũng bị giới hạn Sau này, người ta đã "làm mềm" đi hai tính chất quan trọng của thuật toán là

tính xác định và tính đúng để giải quyết những vấn đề phức tạp hơn mà với các tính chất chặt chẽ của thuật toán thì

không thể giải quyết được Ðó là các thuật toán đệ quy và thuật giải Ta sẽ tìm hiểu về điều này ngay trong các mục 4 và

5 của chương này

Các đặc trưng khác của thuật toán

Bên cạnh 3 đặc trưng chính là xác định, hữu hạn và đúng, thuật toán còn có thêm 3 đặctrưng phụ khác

1 Ðầu vào và đầu ra (input/output) : mọi thuật toán, dù có đơn giản đến mấy cũng phải

nhận dữ liệu đầu vào, xử lý nó và cho ra kết quả cuối cùng

2 Tính hiệu quả (effectiveness) : tính hiệu quả của thuật toán được đánh giá dựa trên

một số tiêu chuẩn như khối lượng tính toán, không gian và thời gian khi thuật toán được thi hành.Tính hiệu quả của thuật toán là một yếu tố quyết định để đánh giá, chọn lựa cách giải quyết vấn đề-bài toán trên thực tế Có rất nhiều phương pháp để đánh giá tính hiệu quả của thuật toán Trong mục

3 của chương , ta sẽ tìm hiểu một tiêu chuẩn được dùng rộng rãi là độ phức tạp của thuật toán

3 Tính tổng quát (generalliness) :thuật toán có tính tổng quát là thuật toán phải áp dụngđược cho mọi trường hợp của bài toán chứ không phải chỉ áp dụng được cho một số trường hợp riêng

lẻ nào đó Chẳng hạn giải phương trình bậc hai sau đây bằng Delta đảm bảo được tính chất này vì nóluôn giải được với mọi giá trị số thực a,b,c bất kỳ Tuy nhiên, không phải thuật toán nào cũng đảmbảo được tính tổng quát Trong thực tế, có lúc người ta chỉ xây dựng thuật toán cho một dạng đặctrưng của bài toán mà thôi

Thuật toán giải phương trình bậc hai ax 2 +bx+c=0 (a?0)

1 Yêu cầu cho biết giá trị của 3 hệ số a, b, c

2 Nếu a=0 thì

2.1 Yêu cầu đầu vào không đảm bảo

2.2 Kết thúc thuật toán

3 Trường hợp a khác 0 thì

Trang 5

3.1 Tính giá trị D = b2-4ac

3.2 Nếu D > 0 thì

3.2.1 Phương trình có hai nghiệm phân biệt x1 và x2

3.2.2 Giá trị của hai nghiệm được tính theo công thức sau

3.2.3 Kết thúc thuật toán

Thuật toán tìm hộp có trọng lượng nặng nhất

Vấn đề : Có n hộp có khối lượng khác nhau và một cái cân dĩa Hãy chỉ ra cách cân

để tìm được hộp có trọng lượng nặng nhất Vấn đề này là thể hiện của một bài toán tổng quát : Cho

một tập hợp A hữu hạn và một thứ tự toàn phần trên A Hãy xây dựng thuật toán tìm phần tử lớn nhất của A Bài toán trong toán học có vẻ rất phức tạp nhưng một thể hiện trên thực tế lại rất dễ hiểu,

và cách giải quyết cũng đơn giản Từ đó ta có thể dễ dàng suy ra cách giải bài toán tổng quát

1 Nếu chỉ có 1 hộp (n=1) thì

1.1 Hộp đó chính là hộp nặng nhất

1.2 Kết thúc thuật toán

2 Ngược lại nếu có từ hai hộp trở lên (n>1)

2.1 Chọn hai hộp bất kỳ và đặt lên bàn cân

2.2 Giữ lại hộp nặng hơn, cất hộp nhẹ hơn sang chỗ khác

Trang 6

3 Nếu còn hộp chưa được cân thực hiện các bước sau, nếu không còn hộp nào nữa, sang

bước 5

3.1 Chọn một hộp bất kỳ và để lên dĩa cân còn trống

3.2 Giữ lại hộp nặng hơn, cất hộp nhẹ hơn sang chỗ khác

4 Trở lại bước 3

5 Hộp còn lại trên cân chính là hộp nặng nhất Kết thúc

Thuật toán Euclid tìm ước số chung lớn nhất

Bài toán : Cho hai số nguyên dương a và b Tìm ước số chung lớn nhất của a và b

1 Yêu cầu cho biết giá trị của a, b.

Trang 7

2 CÁC PHƯƠNG PHÁP BIỂU DIỄN THUẬT TOÁN

Khi chứng minh hoặc giải một bài toán trong toán học, ta thường dùng những ngôn từtoán học như : "ta có", "điều phải chứng minh", "giả thuyết", và sử dụng những phép suy luận toánhọc như phép suy ra, tương đương, Thuật toán là một phương pháp thể hiện lời giải bài toán nêncũng phải tuân theo một số quy tắc nhất định Ðể có thể truyền đạt thuật toán cho người khác haychuyển thuật toán thành chương trình máy tính, ta phải có phương pháp biểu diễn thuật toán Có 3phương pháp biểu diễn thuật toán :

dụng ngôn ngữ tự nhiên) Phương pháp biểu diễn này không yêu cầu người viết thuật toán cũng như

người đọc thuật toán phải nắm các quy tắc Tuy vậy, cách biểu diễn này thường dài dòng, không thểhiện rõ cấu trúc của thuật toán, đôi lúc gây hiểu lầm hoặc khó hiểu cho người đọc Gần như không cómột quy tắc cố định nào trong việc thể hiện thuật toán bằng ngôn ngữ tự nhiên Tuy vậy, để dễ đọc,

ta nên viết các bước con lùi vào bên phải và đánh số bước theo quy tắc phân cấp như 1, 1.1, 1.1.1, Bạn có thể tham khảo lại ba ví dụ trong mục 1 của chương để hiểu cách biểu diễn thuật toán theongôn ngữ tự nhiên

2.2 Lưu đồ - sơ đồ khối

Lưu đồ hay sơ đồ khối là một công cụ trực quan để diễn đạt các thuật toán Biểu diễn thuậttoán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý củathuật toán Phương pháp lưu đồ thường được dùng trong những thuật toán có tính rắc rối, khó theodõi được quá trình xử lý

Ðể biểu diễn thuật toán theo sơ đồ khối, ta phải phân biệt hai loại thao tác Một thao tác là

thao tác chọn lựa dựa theo một điều kiện nào đó Chẳng hạn : thao tác "nếu a = b thì thực hiện thao

tác B2, ngược lại thực hiện B4" là thao tác chọn lựa Các thao tác còn lại không thuộc loại chọn lựa

được xếp vào loại hành động Chẳng hạn, "Chọn một hộp bất kỳ và để lên dĩa cân còn trống." là một

thao tác thuộc loại hành động

2.2.1 Thao tác chọn lựa (decision)

Thao tác chọn lựa được biểu diễn bằng một hình thoi, bên trong chứa biểu thức điều kiện

Trang 8

2.2.2 Thao tác xử lý (process)

Thao tác xử lý được biểu diễn bằng một hình chữ nhật, bên trong chứa nội dung xử lý

2.2.3.Ðường đi (route)

Khi dùng ngôn ngữ tự nhiên, ta mặc định hiểu rằng quá trình thực hiện sẽ lần lượt đi từ bướctrước đến bước sau (trừ khi có yêu cầu nhảy sang bước khác) Trong ngôn ngữ lưu đồ, do thể hiệncác bước bằng hình vẽ và có thể đặt các hình vẽ này ở vị trí bất kỳ nên ta phải có phương pháp để thểhiện trình tự thực hiện các thao tác

Hai bước kế tiếp nhau được nối bằng một cung, trên cung có mũi tên để chỉ hướng thựchiện Chẳng hạn trong hình dưới, trình tự thực hiện sẽ là B1, B2, B3

Từ thao tác chọn lựa có thể có đến hai hướng đi, một hướng ứng với điều kiện thỏa và mộthướng ứng với điều kiện không thỏa Do vậy, ta dùng hai cung xuất phát từ các đỉnh hình thoi, trênmỗi cung có ký hiệu Ð/Ðúng/Y/Yes để chỉ hướng đi ứng với điều kiện thỏa và ký hiệu S/Sai/N/No

để chỉ hướng đi ứng với điều kiện không thỏa

Trang 9

2.2.4 Ðiểm cuối (terminator)

Ðiểm cuối là điểm khởi đầu và kết thúc của thuật toán, được biểu diễn bằng hình ovan, bêntrong có ghi chữ bắt đầu/start/begin hoặc kết thúc/end Ðiểm cuối chỉ có cung đi ra (điểm khởi đầu)hoặc cung đi vào (điểm kết thúc) Xem lưu đồ thuật toán giải phương trình bậc hai ở trên để thấycách sử dụng của điểm cuối

2.2.5 Ðiểm nối (connector)

Ðiểm nối được dùng để nối các phần khác nhau của một lưu đồ lại với nhau Bên trong điểmnối, ta đặt một ký hiệu để biết sự liên hệ giữa các điểm nối

Trang 10

2.2.6 Ðiểm nối sang trang (off-page connector)

Tương tự như điểm nối, nhưng điểm nối sang trang được dùng khi lưu đồ quá lớn, phải vẽtrên nhiều trang Bên trong điểm nối sang trang ta cũng đặt một ký hiệu để biết được sự liên hệ giữađiểm nối của các trang

Ở trên chỉ là các ký hiệu cơ bản và thường được dùng nhất Trong thực tế, lưu đồ còn cónhiều ký hiệu khác nhưng thường chỉ dùng trong những lưu đồ lớn và phức tạp Ðối với các thuậttoán trong cuốn sách này, ta chỉ cần sử dụng các ký hiệu trên là đủ

Khi thể hiện thuật toán bằng mã giả, ta sẽ vay mượn các cú pháp của một ngôn ngữ lập trình

nào đó để thể hiện thuật toán Tất nhiên, mọi ngôn ngữ lập trình đều có những thao tác cơ bản là xử

lý, rẽ nhánh và lặp Dùng mã giả vừa tận dụng được các khái niệm trong ngôn ngữ lập trình, vừa giúpngười cài đặt dễ dàng nắm bắt nội dung thuật toán Tất nhiên là trong mã giả ta vẫn dùng một phầnngôn ngữ tự nhiên Một khi đã vay mượn cú pháp và khái niệm của ngôn ngữ lập trình thì chắc chắn

mã giả sẽ bị phụ thuộc vào ngôn ngữ lập trình đó Chính vì lý do này, chúng ta chưa vội tìm hiểu về

mã giả trong bài này (vì chúng ta chưa biết gì về ngôn ngữ lập trình!) Sau khi tìm hiểu xong bài vềthủ tục - hàm bạn sẽ hiểu mã giả là gì !

Trang 11

Một đoạn mã giả của thuật toán giải phương trình bậc hai

if Delta > 0 then begin

xuất kết quả : phương trình có nghiệm kép là -b/(2*a)

else {trường hợp delta < 0 }

xuất kết quả : phương trình vô nghiệm

* Các từ in đậm là các từ khóa của ngôn ngữ Pascal

Trang 12

3 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN

Một chương trình máy tính thường được cài đặt dựa trên một thuật toán đúng để giảiquyết bài toán hay vấn đề Tuy nhiên, ngay cả khi thuật toán đúng, chương trình vẫn có thể không sửdụng được đối với một dữ liệu đầu vào nào đó vì thời gian để cho ra kết quả là quá lâu hoặc sử dụngquá nhiều bộ nhớ (vượt quá khả năng đáp ứng của máy tính)

Khi tiến hành phân tích thuật toán nghĩa là chúng ta tìm ra một đánh giá về thời gian và

"không gian" cần thiết để thực hiện thuật toán Không gian ở đây được hiểu là các yêu cầu về bộ nhớ,thiết bị lưu trữ, của máy tính để thuật toán có thể làm việc Việc xem xét về không gian của thuậttoán phụ thuộc phần lớn vào cách tổ chức dữ liệu của thuật toán Trong phần này, khi nói đến độphức tạp của thuật toán, chúng ta chỉ đề cập đến những đánh giá về mặt thời gian mà thôi

Phân tích thuật toán là một công việc rất khó khăn, đòi hỏi phải có những hiểu biết sâusắc về thuật toán và nhiều kiến thức toán học khác Ðây là công việc mà không phải bất cứ người nàocũng làm được Rất may mắn là các nhà toán học đã phân tích cho chúng ta độ phức tạp của hầu hếtcác thuật toán cơ sở (sắp xếp, tìm kiếm, các thuật toán số học, ) Chính vì vậy, nhiệm vụ còn lại củachúng ta là hiểu được các khái niệm liên quan đến độ phức tạp của thuật toán

Ðánh giá về thời gian của thuật toán không phải là xác định thời gian tuyệt đối (chạy thuật toán mất bao nhiêu giây, bao nhiêu phút, ) để thực hiện thuật toán mà là xác định mối liên

quan giữa dữ liệu đầu vào (input) của thuật toán và chi phí (số thao tác, số phép tính cộng,trừ, nhân,

chia, rút căn, ) để thực hiện thuật toán Sở dĩ người ta không quan tâm đến thời gian tuyệt đối củathuật toán vì yếu tố này phụ thuộc vào tốc độ của máy tính, mà các máy tính khác nhau thì có tốc độ

rất khác nhau Một cách tổng quát, chi phí thực hiện thuật toán là một hàm số phụ thuộc vào dữ liệu

đầu vào :

T = f(input)

Tuy vậy, khi phân tích thuật toán, người ta thường chỉ chú ý đến mối liên quan giữa độ

lớn của dữ liệu đầu vào và chi phí Trong các thuật toán, độ lớn của dữ liệu đầu vào thường được thể

hiện bằng một con số nguyên n Chẳng hạn : sắp xếp n con số nguyên, tìm con số lớn nhất trong n

số, tính điểm trung bình của n học sinh, Lúc này, người ta thể hiện chi phí thực hiện thuật toán

bằng một hàm số phụ thuộc vào n :

T = f(n)

Việc xây dựng một hàm T tổng quát như trên trong mọi trường hợp của thuật toán là mộtviệc rất khó khăn, nhiều lúc không thể thực hiện được Chính vì vậy mà người ta chỉ xây dựng hàm T

cho một số trường hợp đáng chú ý nhất của thuật toán, thường là trường hợp tốt nhất và xấu nhất

Chúng ta trở lại ví dụ về thuật toán tìm hộp nặng nhất trong n hộp cho trước, nhưng lầnnày ta làm việc trên một thể hiện khác của vấn đề Ðây là một thuật toán tương đối đơn giản nênchúng ta có thể tiến hành phân tích được độ phức tạp Trước khi phân tích độ phức tạp, ta nhắc lạiđôi điều về thuật toán này

Tìm số lớn nhất trong một dãy số

Trang 13

Bài toán : Cho một dãy số a có n phần tử a1 , a 2 , a n Hãy xây dựng thuật toán để tìm con số lớn nhất trong dãy a

Nhận xét

1 Nếu dãy chỉ có 1 phần tử thì phần tử đó là số lớn nhất

2 Giả sử dãy có n phần tử và ta đã xác định được phần tử lớn nhất là amax Nếu bổ sung thêm phần tử thứ

an+1 vào dãy mà an+1 > amax thì an+1 chính là phần tử lớn nhất của dãy có n+1 phần tử Trường hợp ngược lại, nghĩa là an+1 £ amax thì amax vẫn là phần tử lớn nhất của dãy có n+1 phần tử

Trang 14

Dựa theo sơ đồ khối của thuật toán, ta nhận thấy rằng, trong mọi trường hợp của bài toán,phép "ghi nhớ" ở bước 3.1 luôn được thực hiện và số lần thực hiện là n-1 (ứng với việc xét từ phần tử

a2 đến an) Ta gọi đây là chi phí cố định hoặc bất biến của thuật toán.

Trường hợp tốt nhất : do amax = a1 suy ra, với mọi i ³ 2, a i< amax Do đó, điều kiện ai>amax ởbước 3.1 luôn không thỏa nên bước 3.1.1 không bao giờ được thực hiện Như vậy, chi phí chung chotrường hợp này chính là chi phí cố định của bài toán

T = f(n) = n-1

Trường hợp xấu nhất :

Ta có : với mọi i>1, ai -1< a i (do định nghĩa dãy được sắp xếp tăng dần) nên điều kiện

ai>amax ở bước 3.1 luôn thỏa, bước 3.1.1 luôn được thực hiện Như vậy, ngoài chi phí chung là n-1phép so sánh, ta cần phải dùng thêm n-1 phép "ghi nhớ" ở bước 3.1.1 Như vậy, tổng chi phí củatrường hợp này là

T = f(n) = 2(n-1)=2n-2

Ngày đăng: 10/04/2013, 10:22

TỪ KHÓA LIÊN QUAN

w