Tìm hiểu về Thuật Toán Sắp Xếp
Trang 1NGHIÊN CỨU KHOA HỌC
Đề tài : Tìm hiểu về Thuật Toán Sắp Xếp
Trang 2Mục lục
NGHIÊN CỨU KHOA HỌC 1
Đề tài : Tìm hiểu về Thuật Toán Sắp Xếp 1
Mục lục 2
PHẦN MỞ ĐẦU 4
1 Lý do chọn đề tài 4
2 Mục tiêu và nhiệm vụ 5
Chương 1 MỘT SỐ KIẾN THỨC CƠ SỞ 6
1.1 Thuật toán 6
1.1.1 Khái niệm thuật toán 6
1.1.2 Các đặc trưng của thuật toán 7
Chương 2 MÔ PHỎNG THUẬT TOÁN 10
2.1 Tổng quan về mô phỏng thuật toán 10
2.1.1 Khái niệm mô phỏng thuật toán 10
2.1.2 Lịch sử mô phỏng thuật toán 11
2.1.3 Tác dụng của mô phỏng thuật toán 14
2.1.4 Kiến trúc của hệ thống mô phỏng thuật toán 18
2.1.5 Lựa chọn công cụ mô phỏng thuật toán 20
2.2 Một số yêu cầu đối với mô phỏng thuật toán 21
2.2.1 Mô tả đúng theo thuật toán 21
2.2.2 Hệ thống mô phỏng phải được thực hiện theo từng bước 21
2.2.3 Mô phỏng thuật toán phải có tính động 21
2.2.4 Phải tạo ra sự phân cấp cho người học 22
2.2.5 Cấu trúc của mô phỏng thuật toán 22
2.3 Quy trình thiết kế nhiệm vụ mô phỏng thuật toán 23
2.3.1 Nghiên cứu và phân tích giải thuật 23
2.3.2 Phân tích giải thuật thành nhiều bước, sau đó lần lượt mô phỏng từng bước đó 26
2.3.3 Phân tích khả năng tổng hợp các bước đã phân tích thành giải thuật 27 2.3.4 Phân tích những khó khăn và thuận lợi với những người lần đầu tiên biết đến giải thuật 27
2.4 Kết luận 28
Chương3 : CHƯƠNG TRÌNH ỨNG DỤNG THUẬT TOÁN SẮP XẾP 29
3.1 CÁC THUẬT TOÁN SẮP XẾP ĐƠN GIẢN 30
3.1.1 Sắp xếp lựa chọn 30
3.1.2 Sắp xếp xen vào 32
3.1.3 Sắp xếp nổi bọt 33
3.2 Sắp xếp hòa nhập 35
Trang 33.3 Sắp xếp nhanh 38 3.4 Sắp xếp sử dụng cây thứ tự bộ phận 45
Trang 4mô phỏng động bằng đồ họa của một thuật toán và các thay đổi trong cấutrúc dữ liệu của nó trong suốt quá trình thực thi.
Như một phần của quá trình học thuật toán, những sinh viên ngànhcông nghệ thông tin sẽ học về cấu trúc của một trình biên dịch (compiler)trong một ngôn ngữ lập trình cho quá trình đó Điều này sẽ chỉ ra cho chúng
ta từng nhiệm vụ của các giai đoạn khác nhau trong trình biên dịch
Hiện nay, một số hệ thống mô phỏng thuật toán được phát triển sauhai thập kỷ Hầu hết các thuật toán được đề cập đến trong giai đoạn này đều
là các hệ thống phổ biến hơn và tinh vi hơn các hệ thống mà thực tế đang sửdụng
Mô phỏng thuật toán ngày càng trở nên hữu ích và trở thành một giáo
cụ trực quan rất quan trọng trong hầu hết các lĩnh vực, nhất là trongmôi trường giáo dục Với các nhà sư phạm của ngành công nghệthông tin thì mô phỏng thuật toán có tác dụng như một tài liệu hướngdẫn trong việc dạy các thuật toán bằng máy tính Đặc biệt, nó giúp họcsinh và sinh viên hiểu cấu trúc dữ liệu và thuật toán nhanh hơn Nhưvậy, mô phỏng thuật toán góp phần to lớn vào việc ứng dụng CNTTtrong giảng dạy và góp phần vào sự phát triển nhanh chóng của hệthống elearning
Trang 5Thuật toán về sắp xếp rất đa dạng và phong phú Vì vậy vấn đề “ Mô phỏngthuật toán sắp xếp ” được chọn để nghiên cứu trong khóa luận này.
2 Mục tiêu và nhiệm vụ
Nghiên cứu tổng quan về mô phỏng thuật toán
Hướng đến các kỹ thuật lập trình với mã nguồn mở và ngôn ngữ lậptrình C#
Áp dụng kết quả nghiên cứu làm một demo mô phỏng thuật toán sắpxếp
3 Cấu trúc khóa luận
Chương 1: Một số kiến thức cơ sở
Trình bày khái niệm thuật toán, các đặc trưng của thuật toán
Độ phức tạp của thuật toán
Chương 2: Mô phỏng thuật toán
Tổng quan về mô phỏng thuật toán
Một số yêu cầu đối với mô phỏng thuật toán
Quy trình thiết kế nhiệm vụ mô phỏng thuật toán
Chương 3: Chương trình ứng dụng thuật toán sắp xếp
Phân tích và thiết kế hệ thống mô phỏng thuật toán sắp xếp
Phân tích một số thuật toán hiện tại
Trang 6Chương 1 MỘT SỐ KIẾN THỨC CƠ SỞ
1.1 Thuật toán
1.1.1 Khái niệm thuật toán
Thuật ngữ “algorithm” (thuật toán hoặc còn gọi là giải thuật) được gọi theo tên nhà toán học Ả rập thế kỷ IX al-Khowarizmi, người đã viết cuốn
sách về các chữ số Hindu – cơ sở của kí hiệu số thập phân hiện đại (xem [4],
trang 118) Xuất xứ ban đầu là từ algorism, được dùng để chỉ các quy tắc
thực hiện các phép tính số học trên các số thập phân Sau đó, vào thế kỷ
XVIII algorism biến thành algorithm Với sự quan tâm ngày càng tăng đối
với máy tính, khái niệm thuật toán đã được cho một ý nghĩa chung hơn, baohàm cả các thủ tục xác định để giải các bài toán, chứ không phải chỉ là thủtục để thực hiện các phép tính số học
Thuật 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 các thao tác ấy, từ Input củabài toán ta nhận được Output cần tìm
Cũng có thế xem thuật toán như một công cụ để giải quyết một bàitoán cụ thể Phát biểu bài toán sẽ chỉ định tổng quát mối quan hệInput/Output cần thiết Thuật toán mô tả một thủ tục tính toán cụ thể để đạtđược mối quan hệ Input/Output đó
Vào khoảng những năm 1930 - 1936, lần lượt các nhà toán họcK.Gödel,
S Kleene, A Church, A Turing đã đề ra một số định nghĩa khác nhau cho
Trang 7khái niệm thuật toán Trong số các định nghĩa toán học khác nhau (nhưngtương đương) về thuật toán, các khái niệm Máy Turing (1937) và Hàm đệquy (1931-1936) được sử dụng rộng rãi hơn vì có nhiều thuận tiện cho cácnghiên cứu cả về lí thuyết lẫn thực hành
1.1.2 Các đặc trưng của thuật toán
Các thuật toán có một số tính chất chung, đó là:
Đầu vào (Input): Một thuật toán có các giá trị đầu vào từ một
tập xác định
Đầu ra (Output): Từ mỗi tập giá trị đầu vào, thuật toán sẽ tạo ra
các giá trị đầu ra Các giá trị đầu ra chính là nghiệm của bàitoán
Tính xác định: Các bước của thuật toán phải được xác định một
cách chính xác
Tính đúng đắn: Một thuật toán phải cho các giá trị đầu ra đúng
đối với mỗi tập giá trị đầu vào
Tính hữu hạn: Một thuật toán phải tạo ra các giá trị đầu ra sau
một số hữu hạn (có thể rất lớn) các bước thực hiện đối với mỗitập đầu vào
Tính hiệu quả: Mỗi bước của thuật toán phải thực hiện được
một cách chính xác và trong một khoảng thời gian chấp nhậnđược
Trang 8 Tính tổng quát: Thuật toán cần phải áp dụng được cho mọi tập
dữ liệu đầu vào của bài toán, chứ không phải chỉ cho một tậpđặc biệt các giá trị đầu vào
1.2.Độ phức tạp của thuật toán
Cần chú ý rằng mỗi thuật toán chỉ giải một lớp bài toán nào đó,nhưng có thể có nhiều thuật toán khác nhau giải cùng một bài toán Một vấn
đề đặt ra là ta cần chọn một thuật toán tốt để giải bài toán đã cho
Nhưng thế nào là thuật toán tốt? Thước đo hiệu quả là thời gian máytính sử dụng để giải bài toán theo thuật toán đang xét khi các giá trị đầu vào
có kích thước xác định, và dung lượng bộ nhớ đòi hỏi để thực hiện thuậttoán đó Như vậy khi xem xét đến độ phức tạp tính toán của thuật toán ta
phải xem xét đến độ phức tạp thời gian và độ phức tạp không gian
Độ phức tạp không gian gắn liền với cấu trúc dữ liệu cụ thể được
dùng để thực hiện thuật toán
Các thuật ngữ thường dùng cho độ phức tạp của thuật toán:
O(1): Độ phức tạp hằng số
Trang 10Chương 2 MÔ PHỎNG THUẬT TOÁN
2.1 Tổng quan về mô phỏng thuật toán
2.1.1 Khái niệm mô phỏng thuật toán
Mô phỏng thuật toán là quá trình tách dữ liệu, thao tác, ngữ nghĩa vàtạo mô phỏng đồ họa cho quá trình trên [Stasko 1990] (xem [23]) Mô phỏngthuật toán được thiết kế để giúp người dùng có thể hiểu thuật toán, đánh giáchương trình và sửa lỗi chương trình
Một chương trình máy tính chứa các cấu trúc dữ liệu của thuật toán
mà nó thực thi Trong quá trình thực thi chương trình, các giá trị trong cơ sở
dữ liệu được thay đổi Mô phỏng thuật toán sử dụng biểu diễn đồ họa đểbiểu diễn cấu trúc dữ liệu và chỉ ra sự thay đổi giá trị trong cơ sở dữ liệutrong mỗi trạng thái Thông qua đó, người sử dụng có thể xem được từngbước thực thi chương trình và nhờ vậy có thể hiểu chi tiết được thuật toán
Mô phỏng thuật toán cũng được dùng để đánh giá một chương trình
đã có bằng cách cung cấp các mô phỏng cho các thành phần của hệ thống,nhờ đó có thể kiểm tra được hiệu năng của hệ thống
Bên cạnh việc giúp người sử dụng hiểu hơn về hệ thống, mô phỏngthuật toán còn được dùng để giúp thực hiện quá trình dò lỗi dễ dàng hơn Để
sử dụng mô phỏng thuật toán trong quá trình dò lỗi của một chương trình,người sử dụng chú thích vào các trạng thái của chương trình để tạo ra cáclệnh mô phỏng, sau đó chúng sẽ được đưa vào hệ thống mô phỏng thuật toán
để tạo mô phỏng Người sử dụng có thể xem chương trình của họ đã thựchiện như thế nào, các giá trị dữ liệu ở mỗi bước và một bước sẽ ảnh hưởng
Trang 11tới các bước sau như thế nào Nó sẽ giúp người sử dụng tìm ra tất cả các lỗi
có thể xảy ra trong chương trình
2.1.2 Lịch sử mô phỏng thuật toán
Mô phỏng thuật toán đã được xây dựng từ hai thập kỷ gần đây Nhưngchương trình mô phỏng thuật toán đầu tiên là của Ken Knowlton ở BellTelephone Laboratories khi mô phỏng ngôn ngữ liên kết danh sách vào năm
1966 Mô phỏng thuật toán phát triển mạnh vào đầu những năm 80 của thế
kỷ 20
Vào năm 1981, video (sorting out sorting) được xây dựng bởi RonaldBaecker ở đại học Toronto được coi là khởi điểm của lĩnh vực mô phỏngthuật toán Từ đó các nhà giáo dục đã sử dụng mô phỏng thuật toán để trợgiúp quá trình dạy học Giữa những năm 80 và đầu những năm 90, hai hệthống có ảnh hưởng mạnh đến về sau được phát triển và có ý nghĩa lớn trêntất cả những hệ thống sau này Hai hệ thống này là BALSA-I (BrownALgorithm Simulator and Animator) [Brown 1984] và TANGO (Transition-based Animation GeneratiOn) [Stasko 1990]
BALSA-I là hệ thống mô phỏng thuật toán nổi tiếng rộng khắp đầutiên Nó được phát triển bởi Marc Brown và Robert Sedgewick tại trườngđại học Brown BALSA-I là hệ thống mô phỏng thuật toán tương tác mà hỗtrợ đồng thời nhiều cái nhìn của một cấu trúc dữ liệu thuật toán và có thểhiển thị nhiều thuật toán thực thi đồng thời Sự phát triển của nó là động cơthúc đẩy các nhà nghiên cứu khác tham gia vào việc phát triển các hệ thống
mô phỏng thuật toán khác nữa
Một hệ thống khác là TANGO, được phát triển bởi John Stasko củatrường đại học Brown Sự nổi bật của TANGO là chỉ ra mô hình path-
Trang 12transition để thiết kế mô phỏng và một framework cho hệ thống mô phỏngthuật toán Nó đưa ra một khái niệm framework mới mà được chấp nhận bởimột số hệ thống sau này như kiến trúc cơ sở của chúng Kiến trúc này sẽđược mô tả trong mục tiếp theo
Từ khi hai hệ thống của BALSA và TANGO được phát triển, các hệthống đi sau của hai hệ thống đáng chú ý này cũng được phát triển BALSA-
I có một hệ thống đi sau đó là BALSA-II [Brown 1988] BALSA-II là một
hệ thống mô phỏng thuật toán vùng-độc lập thao tác các ảnh với nhiều cáinhìn và cung cấp quá trình tạo ra bộ điều khiển dễ dàng TANGO thì khác,
có nhiều hệ thống đi sau XTANGO [Stasko 1992] là hệ thống trực tiếp đisau TANGO POLKA được thiết kế để xây dựng mô phỏng đồng thời chocác chương trình song song Nó là một hệ thống mô phỏng thuật toán hướngđối tượng 2-D và được mở rộng thành hệ thống 3-D, POLKA 3-D POLKA3-D cung cấp cái nhìn 3-D và 3-D nguyên thủy, ví dụ như: hình nón, hìnhcầu, hình lập phương và một số hình khác nữa Người dùng không bị yêucầu phải có hiểu biết trước về đồ họa máy tính 3-D để sử dụng POLKA 3-D.Samba cho phép thể hiện mô phỏng tương tác mà đọc các câu lệnh ASCII vàthực hiện các hành động mô phỏng tương ứng Có một phiên bản Java của
Các hệ thống mô phỏng thuật toán khác bao gồm: Zeus, Leonardo,CATAI, Mocha Zeus [Brown 1991] được phát triển tại trường đại họcBrown cùng với BALSA và BALSA-II, nó được coi như một trong số các hệthống phần mềm có ảnh hưởng lớn đến nhau đầu tiên Zeus được thực thitrong môi trường multi-threaded và multi-processor, vì thế nó có thể làm cho
Trang 13http://wonderland.dia.unisa.it/catai/) là một hệ thống mô phỏng các chươngtrình C++ Nó tin tưởng vào những công nghệ đối tượng phân tán và chophép một vài người dùng chia sẻ mô phỏng đó thông qua sự trừu tượng hóalớp học thực tế Truyền thông và sự đồng bộ hóa giữa các khách hàng môphỏng và thuật toán được mô phỏng được đảm bảo bởi người phục vụ môphỏng Java mà sử dụng công nghệ CORBA Mocha (xem
với kiến trúc client-server nhằm tối ưu phân chia những thành phần của phầnmềm trong một hệ thống mô phỏng thuật toán tiêu biểu Trong mô hìnhMocha, chỉ mã giao diện được xuất tới máy người dùng, trong khi thuật toánđược thực hiện trên một server chạy trên máy của nhà cung cấp
Với việc phát triển của công nghệ mới, tính phổ dụng của mạng toàncầu và sự tiến hóa của ngôn ngữ lập trình Java, những người phát triển đãxây dựng những hệ thống mô phỏng thuật toán trực tuyến, có lợi thế củanhững hệ thống mở dễ tiếp cận hơn
Một số nhà phát triển cũng hợp nhất việc sử dụng đa phương tiệntrong các hệ thống của họ Việc sử dụng các hệ thống mô phỏng thuật toánkhông còn bị bó hẹp trong các lớp học truyền thống hoặc phòng thí nghiệmgiảng dạy nữa mà đã được mở rộng để dạy từ xa
Trong khoảng hai thập niên gần đây, một số rất lớn các hệ thống môphỏng thuật toán đã ra đời và phát triển mạnh mẽ Phần lớn các hệ thống môphỏng thuật toán đã đề cập trong mục này đều phổ biến hơn và phức tạp hơncác hệ thống đang được sử dụng trong thực tế Chúng đã được phát triển và
sử dụng bởi những nhà chuyên môn, với mục đích giáo dục hoặc nghiên cứuthực nghiệm của họ Một trong số các hệ thống này có một kiến trúc phứctạp và cần những công nghệ đặc biệt để chạy nó Chúng ta không có bất kỳ
Trang 14tiện ích nào của các hệ thống này để xây dựng hệ thống mô phỏng các thuậttoán đồ thị; thay vào đó, chúng ta đã ước lượng được các hệ thống mô phỏnghiện hữu khác mà kích thước nhỏ hơn và có những kiến trúc đơn giản hơn
2.1.3 Tác dụng của mô phỏng thuật toán
Các hệ thống mô phỏng thuật toán được sử dụng rộng rãi như công cụ
hỗ trợ giảng dạy trong ngành giáo dục khoa học máy tính Một số nghiêncứu thực nghiệm đã ước lượng hiệu quả của chúng trong giáo dục và kết quảnhận được có thay đổi Cụ thể là:
Brown (1984) đã sử dụng BALSA-I để dạy một khóa giới thiệu lậptrình và một khóa “ cấu trúc dữ liệu và giải thuật” Hệ thống được sử dụngnhư một chương trình trực quan trong khóa giới thiệu, và như một người môphỏng thuật toán mức cao trong lớp cấu trúc dữ liệu Ông ta báo cáo rằngviệc sử dụng các hoạt cảnh mô phỏng để phụ thêm vào thuyết trình dẫn tới
‘những lợi ích có thể chứng minh được trong việc tăng tốc độ hiểu biết’ qua
thuyết trình truyền thống Stasko (1997) đã sử dụng Samba, chương trình môphỏng của hệ thống XTango dạy một khóa thuật toán khoa học máy tính.Những sinh viên được yêu cầu sử dụng hệ thống có thêm vào mô phỏng chocác chương trình ấn định của họ Các kết quả thu được cho biết rằng nhữngsinh viên thích các mô phỏng và những mô phỏng đó có thể làm tăng tínhsáng tạo của các sinh viên Hơn nữa, sự hiểu biết của sinh viên về thuật toánđược tăng lên nhờ việc mô phỏng
Tuy nhiên, sử dụng thuật toán trong việc dạy học không phải lúc nàocũng thành công Các nhà giáo dục đã làm các thực nghiệm và thu được cáckết quả pha trộn Stasko et al (1993) đã chỉ ra một thí nghiệm bằng việc dạyhai nhóm sinh viên với hai cách thuyết trình khác nhau Cả hai nhóm sinhviên này cùng nghiên cứu thuật toán “ Pairing heap” (ghép đôi đống) Một
Trang 15nhóm học thuật toán dựa vào sự mô tả văn bản và nhóm kia cũng nhận cáctài liệu đó nhưng có thêm sự trợ giúp bằng các chương trình mô phỏng thuậttoán Mặc dầu những kết quả chỉ ra rằng nhóm thứ hai đạt được nhiều điểmhơn nhóm kia, nhưng không có điểm nổi trội nào có thể được kết luận là nhờ
sự trợ giúp của mô phỏng
Tương tự, Byrne et al (1996) đã chủ đạo hai thí nghiệm mà trong đócác kết quả chỉ ra rằng lợi ích của mô phỏng không phải là hiển nhiên.Những kết quả pha trộn này đã gây ra chán nản, nhưng đa số các nhà giáodục đều tin tưởng rằng mô phỏng hỗ trợ việc học
Tuy nhiên, những kết quả thí nghiệm bất lợi này gợi ý những yếu tốquan trọng khác trong việc sử dụng mô phỏng thuật toán Các kết quả đãthông báo rằng để đạt được hiệu quả mô phỏng thuật toán đầy đủ thì điềuquan trọng là mô phỏng được sử dụng phối hợp với những yếu tố khác.Lawrence et al (1994) đã sử dụng các hệ thống XTANGO và POLKA đểdạy thuật toán cây khung nhỏ nhất Kruskal Trong số nhóm sinh viên tham
dự các thí nghiệm, kết quả của những sinh viên mà tham dự một phiên thínghiệm tương tác tốt hơn đáng kể so với những sinh viên mà tham dự nhữngphiên thí nghiệm bị động Các kết quả này đã cho phép các sinh viên điềukhiển và tương tác với mô phỏng tốt hơn, chẳng hạn, chương trình môphỏng cho phép sinh viên đưa vào tập dữ liệu của chính họ và thực hiện môphỏng trên tập dữ liệu này chứ không chỉ dừng lại ở việc quan sát những tập
dữ liệu mẫu
Hơn nữa, nhiều nghiên cứu gần đây bởi Kehoe et al (1999) cho thấy
có thể sử dụng mô phỏng như một công cụ giáo dục Thí nghiệm được thựchiện trong một thái độ khác từ các thí nghiệm khác Những sinh viên đượcchia thành hai nhóm và cả hai nhóm đều học thuật toán ‘binomial heap”
Trang 16(đống nhị thức) Một nhóm học thuật toán bởi sự tương tác với mô phỏngtrong khi nhóm còn lại là đọc những hình dạng phẳng về các điểm khóa thaotác của thuật toán Sự khác nhau trong thí nghiệm này là kịch bản bài tập vềnhà Những sinh viên được đưa cho những câu hỏi trước khi bắt đầu khóahọc Trong suốt thời gian kiểm tra thử, những sinh viên có thể truy cập tớibài dạy và thời gian để hoàn thành bài kiểm tra thử này được cho tương đốinhiều Các kết quả của thí nghiệm này cho thấy nhóm được trang bị chươngtrình mô phỏng thuật toán thực hiện bài kiểm tra thử tốt hơn nhóm kia Cácsinh viên của nhóm có sử dụng mô phỏng thuật toán phản hồi rằng môphỏng đã giúp đỡ họ hiểu thuật toán tốt hơn.
Báo cáo của Kehoe et al (1999) đã trình diễn một cách sử dụng môphỏng thuật toán trong việc dạy để đạt được giá trị sư phạm cao hơn Nó đãđược thuyết trình rằng mô phỏng thuật toán được sử dụng tốt hơn trong cáctình trạng học tương tác và mô phỏng (như một bài tập về nhà) Cũng nhưvậy, mô phỏng thuật toán có thể có tính sư phạm hơn khi nó được sử dụngtrong việc phối hợp với các cách học khác hoặc giúp đỡ những chỉ dẫn khác
để giải thích làm thế nào thực hiện một thao tác của thuật toán Báo cáo cũngnói rằng với mô phỏng thuật toán người ta có thể dễ dàng học các thao táctheo thủ tục của các thuật toán Ngoài ra nó có thể làm cho việc học mộtthuật toán bớt đáng sợ hơn vì nó làm cho thuật toán dễ tiếp cận hơn
Stasko et al (1993) đã kết luận từ thí nghiệm của họ một số điều kiện
mà mô phỏng thuật toán có thể có lợi nhất Một trong số những điều kiệnnày là hỗ trợ mô phỏng thuật toán với những chỉ dẫn thúc đẩy toàn diện Khi
mô phỏng thuật toán đóng vai trò chỉ dẫn này, màn hình mô phỏng phảiđược bổ sung bởi các mô tả văn bản của các thao tác đang diễn ra Một điềukiện khác đó là hệ thống mô phỏng thuật toán cần phải bao gồm các chức
Trang 17năng: quay lại hoặc lặp lại những bước thực hiện thuật toán để cho phépnhững người dùng sao lưu và xem lại những thao tác quan trọng Một số bàigiảng đòi hỏi các trạng thái thực hiện thuật toán cũng cần phải được ghi lại
và cung cấp lại được Sự phản hồi của sinh viên cũng là quý giá trong việccải thiện chất lượng chỉ dẫn của mô phỏng
Mặc dù những kết quả được đưa ra từ những nghiên cứu thực nghiệmnày không phải luôn có lợi, thì cũng không có nghĩa rằng mô phỏng thuậttoán không hiệu quả trong dạy học Hiện nay đang có nhiều nghiên cứu đangđược tiến hành về thiết kế và đánh giá mô phỏng thuật toán Hansen et al.(1999) tin rằng các kết quả trong các nghiên cứu thực nghiệm trên chưa tốtkhông phải vì mô phỏng thuật toán là phương pháp dạy học không tốt, mà vìcách thức thực hiện các mô phỏng chưa tốt Họ đã phát triển một hệ thống
trực quan hóa giải thuật siêu phương tiện gọi là HalVis (Hypermedia Algorithm Visualizations) Dựa vào framework của chúng, họ đã thiết kế các
trực quan hóa giải thuật, và họ đã hướng dẫn vài thí nghiệm thực nghiệm bởiviệc sử dụng hệ thống này Tất cả các kết quả thí nghiệm cho thấy trực quanhóa giải thuật bằng đồ họa có hiệu quả hơn so với các phương pháp dạytruyền thống Những kết quả này cho thấy rằng để mô phỏng thuật toán cóhiệu quả và có lợi cho người dùng, thì việc thiết kế cho thích hợp và cáchthức mô phỏng là những yếu tố quan trọng Để mô phỏng thuật toán có hiệuquả thì hệ thống mô phỏng cần phải đáp ứng những điều sau :
Truy cập mở (Open access): Người dùng có thể truy cập hệ thống mô
phỏng mở Hơn nữa, nếu có cài đặt hệ thống mô phỏng trong trườnghọc, thì họ có thể truy cập tới hệ thống này từ nhà hoặc từ bất cứ nơinào khác
Trang 18 Mô phỏng một cách có điều khiển (Control animation): Người dùng
có thể tự tạo tập dữ liệu của chính mình khi sử dụng hệ thống môphỏng Trong khi các tập dữ liệu được cài đặt sẵn cũng có thể giúp đỡsinh viên có những sự hiểu biết ban đầu, hệ thống nên có cả 2 tùychọn này
Tương tác (Ineractivity): Hệ thống mô phỏng phải cung cấp được sự
tương tác giữa người dùng và hệ thống Sự tương tác bao gồm: ngườidùng xem theo từng bước, hủy, chạy nhanh tới một bước mong muốn,hay xem lại từ đầu,
Lịch sử (History): Hệ thống mô phỏng cho phép người dùng xem lại
các bước trước trong quá trình thực hiện
Phản hồi (Feedback): Phải tiếp thu phản hồi của sinh viên về việc sử
dụng hệ thống mô phỏng để ước lượng hiệu quả của hệ thống cũngnhư để cải thiện hệ thống
2.1.4 Kiến trúc của hệ thống mô phỏng thuật toán
Đa số các hệ thống mô phỏng thuật toán có những thư viện hỗ trợ thủtục mô phỏng và giao diện mô phỏng Vài hệ thống mô phỏng đòi hỏi phảiđưa vào trực tiếp bằng tay những thông điệp gửi tới các thủ tục mô phỏngtrong chương trình thực hiện thuật toán Những hệ thống mô phỏng thuậttoán ra đời sớm như: BALSA and TAGO là sự kiện – điều khiển (event-driven), nghĩa là chúng có một chương trình phát sinh những sự kiện trongdạng những thông điệp tới một máy chủ thông điệp Máy chủ thông điệpchuyển thông điệp tới những cảnh quan tương ứng Một cảnh quan là mộtcửa sổ trong một thiết bị màn hình nơi người dùng nhìn những đối tượng môphỏng Thông điệp bao gồm thông tin của một đối tượng mô phỏng Sau khi
Trang 19cảnh quan nhận thông điệp, nó tính toán lại đối tượng và kéo lại nó trên cảnhquan
Vài hệ thống gần đây được viết bằng Java và tất cả đều có những kiếntrúc tương tự nhau Ví dụ như: JSamba, hệ thống POLKA tiền tiêu (xem
và mô phỏng thuật toán trên mạng, xem
trường đại học Duke vào năm 1996 Những hệ thống này chấp nhậnframework của TANGO như kiến trúc của nó Tất cả các hệ thống sẽ gồm có
3 thành phần, các hàm mô phỏng (animator), kênh mô phỏng (animationinterpreter) và trình diễn mô phỏng (animation viewer) như đã chỉ ra trong
sơ đồ sau:
Hình 1 Kiến trúc của hệ thống mô phỏng thuật toán
- Các hàm mô phỏng: Chứa các thư viện để vẽ các đối tượng môphỏng trên thiết bị màn hình
- Màn hình trình diễn mô phỏng: Cung cấp một môi trường đồ họa
để trình diễn mô phỏng trên thiết bị màn hình tới người dùng cuối
- Kênh mô phỏng: Đóng vai trò như một kênh truyền thông giữa hệthống mô phỏng và người dùng cuối Nó đọc một file kịch bảnASCII được cung cấp bởi người dùng cuối mà trong đó có chứa
mô phỏng văn bản cung cấp việc phát sinh những lệnh
Kênh mô phỏng
Trang 20- Kênh mô phỏng dịch các lệnh kịch bản thành các lệnh mô phỏngtương ứng và chuyển qua những tham số điều khiển của đối tượng
mô phỏng tới các hàm mô phỏng
- Các hàm mô phỏng vẽ đối tượng được mô phỏng theo các tham sốđiều khiển của đối tượng đó tới Animation viewer
- Các tham số điều khiển bao gồm tọa độ x và y chỉ rõ nơi đối tượngđược mô phỏng xuất hiện trong Animation viewer hoặc màu sắccủa đối tượng được mô phỏng
2.1.5 Lựa chọn công cụ mô phỏng thuật toán
Trong mục này, chúng ta sẽ phân tích cách tiếp cận khác để xây dựng
hệ thống mô phỏng và tính khả thi của chúng Chúng ta cũng sẽ ước lượngmột vài công cụ mô phỏng thuật toán thích hợp để xây dựng hệ thống môphỏng thuật toán Công cụ thích hợp nhất sẽ được lựa chọn và các căn chỉnhtrên sự lựa chọn này sẽ được cung cấp
Có ba cách tiếp cận có thể để xây dựng hệ thống mô phỏng phân tách.Cách tiếp cận đầu tiên sẽ xây dựng hệ thống từ đầu nhờ việc sử dụng ngônngữ C# Cách tiếp cận thứ hai sẽ lựa chọn hệ thống mô phỏng thuật toán cómục đích chung thích hợp để xây dựng các thành phần tương tác của hệthống phân tách từ đầu Cách tiếp cận cuối cùng là lựa chọn một hệ thống
mô phỏng thuật toán phân tách đã tồn tại và sửa đổi hệ thống đó thành hệthống cuối cùng
Trang 212.2 Một số yêu cầu đối với mô phỏng thuật toán
2.2.1 Mô tả đúng theo thuật toán
Thuật toán được đưa ra mô phỏng phải chính xác, các bước thực hiệnthuật toán phải trực quan và phản ánh đúng theo nội dung thuật toán đã đưa
ra để đảm bảo tính đúng đắn của thuật toán
Để kiểm tra tính đúng đắn của thuật toán, ta có thể cài đặt giải thuật
đó trên máy tính rồi đưa vào các bộ dữ liệu xác định, lấy kết quả thu đượcxác định với kết quả đã biết Bộ dữ liệu đưa vào phải đảm bảo kết quả thuđược phải vét kín các trường hợp nghiệm của bài toán (trường hợp thôngthường và các trường hợp đặc biệt) Làm theo cách này thì không chắc chắn,
ta chỉ phát hiện được thuật toán sai chứ không khẳng định được luôn đúng.Tính đúng đắn chỉ có thể khẳng định bằng phương pháp chứng minh toánhọc
2.2.2 Hệ thống mô phỏng phải được thực hiện theo từng bước
Thuật toán thường là trìu tượng, nếu để chương trình chạy tự động thìngười dùng sẽ khó hiểu Vì vậy, cần phải có chế độ thực hiện mô phỏngthuật toán theo từng bước, để người học có thể quan sát, theo dõi sự thay đổigiá trị của từng biến Nhờ đó, sẽ giúp cho người học hiểu thuật toán rõ hơn
và nhanh hơn
2.2.3 Mô phỏng thuật toán phải có tính động
Để mô tả trực quan hóa quá trình thực hiện của thuật toán ta nên đưavào hình ảnh động (có thể có âm thanh) để thể hiện sự thay đổi của dữ liệutrong quá trình thực thi Thuật toán phải được thử nghiệm trong mọi trườnghợp để đảm bảo thời gian thực thi tốt nhất
Trang 22Một thuật toán được mô phỏng phải đảm bảo là thuật toán tốt, dễ hiểu
và đúng đắn Muốn vậy ta phải thử nghiệm trong các trường hợp dữ liệungẫu nhiên, tốt nhất, xấu nhất Nếu thuật toán vẫn chạy tốt và trong một thờigian cho phép thì thuật toán mới hiệu quả Ta không thể chấp nhận một thuậttoán đúng mà thời gian chạy quá lớn
2.2.4 Phải tạo ra sự phân cấp cho người học
Đối tượng học thuật toán thường là các sinh viên Họ có trình độ tiếpthu khác nhau, nên ta phải đưa ra nhiều chế độ thao tác khác nhau để ngườihọc được phép lựa chọn
2.2.5 Cấu trúc của mô phỏng thuật toán
Hình 2 Cấu trúc của mô phỏng thuật toán
Biểu diễn bằng demo
Độ phức tạp của thuật toán
Trang 232.3 Quy trình thiết kế nhiệm vụ mô phỏng thuật toán
Hình 3 Sơ đồ quy trình thiết kế nhiệm vụ mô phỏng thuật toán
2.3.1 Nghiên cứu và phân tích giải thuật
Trước khi lập trình cho máy tính giải một bài toán, điều đầu tiên làchúng ta phải đi xác định bài toán, để từ đó xây dựng giải thuật cho bài toán.Một bài toán đưa ra có thể có nhiều hơn một giải thuật, vấn đề là ta phải điđánh giá các giải thuật đó để lựa chọn ra một giải thuật tốt nhất Vậy như thếnào là một giải thuật tốt? Để làm được điều này ta có thể căn cứ vào các tiêuchuẩn sau:
Giải thuật đưa ra phải đúng đắn
Giải thuật phải đơn giản (dễ hiểu)
Giải thuật phải thực hiện nhanh (độ phức tạp của thuật toán phải thấp)Khi đưa ra một giải thuật, điều đầu tiên chúng ta quan tâm đến đó là tínhđúng đắn của giải thuật đó Để biết giải thuật mình đưa ra có đúng đắn haychưa ta có thể cài đặt giải thuật bằng một ngôn ngữ lập trình cụ thể và chothực hiện trên máy với bộ dữ liệu mẫu, lấy kết quả thu được so sánh với kếtquả đã biết Cách làm này nói chung là chưa chắc chắn, vì kết quả có thểđúng với bộ dữ liệu mẫu, nhưng với bộ dữ liệu khác thì chưa khẳng định làđúng được Mặt khác, cách làm này thực tế chỉ phát hiện ra giải thuật sai chứ
thuận lợi khi tiếp
thu giải thuật
Tổng hợp các bướcthành giải thuật
Phân tích giải thuậtthành nhiều bước
Trang 24không kết luận được là giải thuật đúng Tính đúng đắn của giải thuật cầnphải được chứng minh bằng toán học Nhưng điều này không hề đơn giản.
Vì vậy, chúng ta có thể kiểm tra tính đúng đắn của giải thuật bằng cách kiểmtra với các bộ dữ liễu mẫu, sao cho các bộ dữ liệu này phải phủ kín cáctrường hợp nghiệm có thể của bài toán
Sau khi xây dựng giải thuật của bài toán xong Khâu tiếp theo là chúng tatiến hành cài đặt giải thuật của bài toán bằng một ngôn ngữ lập trình nào đó.Nếu bài toán với dữ liệu nhỏ, không quan tâm đến thời gian chạy chươngtrình (tức là thuật toán chỉ được sử dụng một vài lần) thì giải thuật sẽ tốt hơnnếu việc cài đặt nó là dễ dàng và người dùng dễ hiểu
Tuy nhiên, giải thuật cho một bài toán sau khi được cài đặt thường xử lývới dữ liệu lớn và được sử dụng nhiều lần trong chương trình Vì thế khi xâydựng một giải thuật, người lập trình thường quan tâm đến độ phức tạp củathuật toán (thường là độ phức tạp về thời gian mà đã được đề cập rất kỹ ởmục 1.3) Điều này dẫn đến việc giải thuật được xây dựng phải có tính hiệuquả về thời gian thực hiện chương trình
Các phương pháp diễn tả giải thuật
- Phương pháp liệt kê từng bước (sử dụng ngôn ngữ tự nhiên)
- Giả mã và ngôn ngữ lập trình thân thiện với người dùng (ví dụnhư: PASCAL)