1. Trang chủ
  2. » Công Nghệ Thông Tin

PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG

41 577 1

Đ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 41
Dung lượng 0,92 MB

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

Nội dung

Luận đề này khẳng định mọi hàm toán học tính được thì cũng có thể dùng các máy Turing để tính, và do đó cho phép định nghĩa các khái niệm như sự tính được của hàm hay thuật 1 Máy Turi

Trang 1

Thông tin cơ bản

Điều kiện tiên quyết: Học xong các học phần COMP340, COMP334, COMP433, COMP138

Chương 1 THUẬT TOÁN VÀ CÁC CÁCH TIẾP CẬN DẠY HỌC THUẬT TOÁN 1.1 Sự hình thành khái niệm thuật toán trong toán học

1.1.1 Nguồn gốc của từ thuật toán

Theo Steven và Robert (1988), từ "thuật toán" hay “thuật giải” ("algorithm") có nguồn gốc từ tên gọi Mohamed ibn Musa al-Khowarizmi là tên của nhà toán học cổ đại người Trung Á (năm

825 sau công nguyên), người đã phát minh ra tập các qui tắc để thực hiện các phép toán cộng, trừ, nhân, và chia các số thập phân

Vào năm 1857, quyển sách đại số của ông bắt đầu được dịch sang chữ Latin Trong bản dịch

tiếng Anh, từ al-Khowarizmi (hoặc al-Khwarizm, nguyên bản Latin là “al-Khwârizmî”) được phát âm là "algoritmi" và sau này được nhiều người gọi là algorithm

Ngoài ra, từ “algebra” (“đại số”) mà chúng ta dùng hiện nay chính là ngụ ý một phần trong tiêu

đề bằng chữ A-rập của quyển sách này, phiên bản Latin của nó là “Kitâb al-jabr wa‟l-muqâbala”

(“Quyển sách của Aljabr và Almuqâbala”)

Theo Steven và Robert (1988), tên gọi của nhà đại số này nghĩa là Mohamed, con trai của Musa, đến từ huyện Khowarizmi Quê hương của của Mohamed sau này là nước Cộng hòa xã hội chủ

nghĩa Xô-Viết của người Kazakh, Turkmen, và Uzbek Tuy nhiên Donald E Knuth (1980) lại cho

rằng phần tên gọi al-Khwârizmî lại không chứng minh được ông sinh ra ở Khwarizm Vì công việc nghiên cứu của ông diễn ra ở Baghdad, ở nơi mà một số nhà khoa học vẫn gọi là “Ngôi nhà thông thái” (“House of Wisdom”) của Caliph al-Ma‟mun - nhà tài trợ nối tiếng cho các nhà nghiên cứu khoa học, đã từng mời nhiều người đến khóa học của ông để tuyển chọn và mở rộng những tài năng trên thế giới Nhà sử học al-Tabari đã thêm từ "al-Qutrubbulli" vào tên của al-Khwârizmî, là có ý đề cập đến huyện Qutrubbulli gần Baghdad Do đó, Knuth nghĩ rằng al-Khwârizmî được sinh ra trong Khwarizm và sống phần lớn cuộc đời ở Qutrubbull sau được triệu tập tới Baghdad của Caliph, nhưng sự thật có thể sẽ không bao giờ được được biết đến

Trang 2

1.1.2 Sự hình thành khái niệm thuật toán trong toán học

Theo Dimitris Samaras (2009), thuật toán có vai trò quan trọng trong toán học Các tài liệu toán

học cổ điển đã bao gồm các mô tả về các thuật toán giải quyết các nhiệm vụ khác nhau như: tìm số nguyên tố, tìm ước số chung lớn nhất của hai số nguyên, …

Khái niệm thuật toán bản thân nó không được định nghĩa chính xác cho đến tận thế kỉ 20 Trước

thế kỉ 20, các nhà toán học chỉ có một khái niệm trực giác (intuitive notation) về cái gọi là thuật

toán và dựa vào khái niệm đó khi sử dụng thuật toán Khái niệm trực giác về thuật toán không đủ để

có một cái nhìn sâu hơn về việc hiểu thuật toán Nhiều tài liệu nghiên cứu đều ghi lại rằng chương

trình của David Hilbert đã phải đối diện với sự phát triển của khái niệm hình thức của một thuật

toán (formal notation of an algorithm) Năm 1900, Hilbert đã đề cập đến chương trình của mình tại

hội nghị Toán học quốc tế tại Paris Trong bài giảng của mình, ông chỉ ra 23 bài toán thách thức của

thế kỉ Trong số các bài toán này, bài toán thứ 10 đòi hỏi "một qui trình phụ thuộc câu hỏi có hay không một đa thức có nghiệm nguyên?" và Hilbert đã không sử dụng thuật ngữ "thuật toán" Bài

toán thứ 10 khi đó là không giải được, nghĩa là không có thuật toán mà nó có thể trả lời được câu hỏi tồn tại hay không tồn tại một đa thức có nghiệm nguyên Khái niệm trực giác về thuật toán đã

không có tác dụng trong việc chỉ ra không tồn tại thuật toán để giải bài toán thứ 10 của Hilbert

Việc cung cấp khái niệm “không tồn tại một thuật toán để giải một bài toán đã cho” đòi hỏi phải có định nghĩa chính thức về thuật toán

Năm 1936, Alonzo Church và Alan Turing đã đề xuất định nghĩa hình thức cho khái niệm

thuật toán (formal definitions for the concept of algorithm) (xem Goldberg, 2012) Church đã sử dụng một hệ thống khái niệm gọi là phép toán  (-calculus) để định nghĩa khái niệm thuật toán, còn Turing dùng máy Turing (TM - Turing machine) của chính mình để định nghĩa khái niệm thuật

toán1 Cả hai định nghĩa này đều tương đương và khá phức tạp, vì nó được phát biểu dài dòng và sử dụng các thuật ngữ và kí hiệu toán học Các máy Turing được xây dựng không dành cho việc trực tiếp chế tạo ra máy tính, mà là dành cho các thí nghiệm tưởng tượng để tìm hiểu về các giới hạn của việc tính toán trên máy móc Việc nghiên cứu các tính chất của máy Turing cho biết nhiều kiến thức quan trọng trong lĩnh vực Khoa học máy tính và lý thuyết về độ phức tạp tính toán Máy Turing mà

có khả năng mô phỏng lại hoạt động của tất cả các máy Turing khác được gọi là máy Turing vạn

năng (hay đơn giản là máy vạn năng) Máy vạn năng cũng đã được Alonzo Church mô tả, khi xây

dựng các lý thuyết về phép tính  Lý thuyết của Church và Turing được tổng kết lại trong luận đề Church-Turing Luận đề này khẳng định mọi hàm toán học tính được thì cũng có thể dùng các máy Turing để tính, và do đó cho phép định nghĩa các khái niệm như sự tính được của hàm hay thuật

1

Máy Turing là một mô hình về thiết bị xử lý các ký tự, tuy đơn giản, nhưng có thể thực hiện được tất cả các thuật

toán máy tính Các máy Turing đã được Alan Turing trình bày vào năm 1936 Các máy Turing được xây dựng không dành cho việc trực tiếp chế tạo ra máy tính, mà là dành cho các thí nghiệm tưởng tượng để tìm hiểu về các giới hạn của việc tính toán trên máy móc Việc nghiên cứu các tính chất của máy Turing cho biết nhiều kiến thức quan trọng trong lĩnh vực khoa học máy tính và lý thuyết về độ phức tạp tính toán

Máy Turing mà có khả năng mô phỏng lại hoạt động của tất cả các máy Turing khác được gọi là máy Turing vạn

năng (hay đơn giản là máy vạn năng) Máy vạn năng cũng đã được Alonzo Church mô tả, khi xây dựng các lý thuyết

về phép tính lambda Lý thuyết của Church và Turing được tổng kết lại trong luận đề Church-Turing Luận đề này khẳng định mọi hàm toán học tính được thì cũng có thể dùng các máy Turing để tính, và do đó cho phép định nghĩa các khái niệm như sự tính được của hàm hay thuật toán

Trang 3

toán Các định nghĩa hình thức khác về thuật toán đã được nhiều tác giả đề xuất như Kleene sử dụng các hàm hồi qui (recursive functions), Markov sử dụng các qui tắc đạo hàm và gọi chúng là

thuật toán chuẩn (normal algorithm) Về mặt bản chất, các định nghĩa này đều tương đương với

nhau và tương đương với máy Turing

Năm 1970, Yuri Matijasevic, tập hợp các nghiên cứu của Martin Davis, Hilary Putnam, và Julia

Robinson và đã chỉ ra rằng “không tồn tại thuật toán để kiểm tra có hay không một đa thức có nghiệm nguyên” (xem Adrian Francalanza, 2009)

Harry R Lewis và Christos H Papadimitriou (1981) đã thảo luận về khái niệm thuật toán của

Church-Turing (thủ tục tính toán) và khẳng định rằng luận đề Church-Turing đã rút ra được nguyên

lí: “các máy Turing là các phiên bản của thuật toán và không tồn tại thủ tục tính toán nào được xem như một thuật toán ngoại trừ nó được biểu diễn như một máy Turing” 1

định nghĩa thuật toán dựa vào máy Turing, ví dụ Robb T Koether (2008) đã phát biểu “Một thuật

toán là một máy Turing mà nó luôn luôn dừng” Máy Turing được xây dựng là để quyết định (đoán nhận) một ngôn ngữ Do đó, định nghĩa của Robb T Koether tương đương với định nghĩa một thuật toán là một máy Turing mà nó quyết định một ngôn ngữ Nhiều nghiên cứu đã chỉ ra rằng mọi bài

toán đều có thể biểu diễn dưới dạng một ngôn ngữ (biểu diễn nhị phân) để giải được bằng máy Turing Tuy nhiên định nghĩa thuật toán như vậy dường như không làm các nhà nghiên cứu cảm thấy hài lòng, và họ vẫn tiếp tục tìm câu trả lời cho câu hỏi “Thuật toán là gì?”

Andreas Blassy và Yuri Gurevichz (2003) đã mô tả về quá trình “truy tìm” để hiểu và định

nghĩa khái niệm thuật toán, bắt đầu với luận đề Church – Turing, rồi giới thiệu một số các cách tiếp cận tương phản với Church và Turing và cuối cùng là một số khám phá mới như hình thức hóa các khái niệm thuật toán tuần tự (sequential algorithms), thuật toán song song (parallel algorithms) và thuật toán phân phối (distributed algorithms) Yuri và Andreas cho biết có những bằng chứng thực nghiệm không ủng hộ luận đề Church-Turing Hơn nữa người ta thường giả định rằng luận đề Church-Turing trả lời được câu hỏi “thuật toán là gì?”, nhưng không hoàn toàn như vậy Nếu nhìn lại năm 1936, Alonzo Church đã đưa ra một sự phỏng đoán táo bạo “các hàm hồi qui là các hàm tính được” Vài tháng sau, trong một nghiên cứu độc lập, Alan Turing cũng chứng minh một khẳng định tương tự “mọi số thực tính được là có thể tính được bằng một máy Turing” Như vậy luận đề Church-Turing quan tâm đến khái niệm hàm tính được nhiều hơn là khái niệm thuật toán Luận đề Church-Turing là một bước tiến lớn tới sự hiểu biết thuật toán, nhưng nó chưa trực tiếp giải quyết vấn đề “thuật toán là gì”

1Nguyên bản: Turing machines are formal versions of algorithms and that no computational procedure will be considered as an

algorithm unless it can be presented as a Turing machine

Trang 4

Công việc đi tìm bản chất của định nghĩa thuật toán lại được nỗ lực quan tâm vào năm 1953 bởi

Andrei N Kolmogorov mà quan điểm thuật toán của ông được Yuri và Andreas trình bày lại như

sau:

- Một qui trình của thuật toán được chia ra thành các bước và độ phức tạp của nó được giới hạn trước, nghĩa là giới hạn này độc lập với input và trạng thái hiện tại của việc tính toán

- Mỗi bước của thuật toán thực hiện ngay một sự biến đổi trực tiếp trạng thái hiện tại

- Biến đổi này áp dụng chỉ một phần của trạng thái và không biến đổi phần còn lại của trạng thái

- Qui trình của thuật toán thực hiện cho đến khi hoặc bước tiếp theo không thể xảy ra hoặc có dấu hiệu đã đạt được lời giải

Với quan điểm trên, Kolmogorov đã đề xuất một mô hình tính toán mới và cùng với Vladimir

A Uspensky, mô hình này được phát triển thành một mô hình tổng quát hơn cho máy Turing và khắc phục những hạn chế của máy Turing nguyên gốc

Yiannis N Moschovakis (2001) đã cho rằng: Khi các thuật toán được định nghĩa một cách

chính xác (rigorously) trong các tài liệu Khoa học máy tính, thì chúng được nhận ra bởi một máy trừu tượng, là mô hình toán học của máy tính, đôi khi được lí tưởng hóa bằng cách thêm vào một

“bộ nhớ không giới hạn” Từ đó, Yiannis đề xuất cách định nghĩa trực giác các thuật toán và đưa ra cách mà các nhà khoa học máy tính giải thích và áp dụng kết quả của cách định nghĩa này Yiannis

đã trình bày định nghĩa thuật toán theo cách hồi qui (recursive definitions) để giao cho mô hình máy thực hiện sự cài đặt (implementations), mô hình này cũng được xem là một kiểu của thuật

toán1 Dù đã nhắc đến một máy trừu tượng để khái quát cho một máy tính cụ thể, nhưng định nghĩa thuật thuật toán của Yiamis, cũng như của nhiều nhà toán học thuần túy, là một định nghĩa hết sức toán học, khó hiểu và có một khoảng cách xa so với một định nghĩa thuật toán mà sự mô tả nó tiệm cận với sự cài đặt trên các máy tính để thực hiện

1.2 Khái niệm thuật toán trong khoa học máy tính

Những nhà toán học và khoa học máy tính, đặc biệt là các nhà khoa học máy tính thuần túy, thường đưa ra các khái niệm chính thức về thuật toán theo cách trực quan và hướng đến đối tượng

“hiểu được”, đồng thời có khả năng “thực hiện được” thuật toán

1

Nguyên bản: Algorithms are recursive definitions while machines model implementations, a special kind of algorithms.

Trang 5

Steven C Althoen và Robert J.Bumcrot (1988) đã đưa ra một định nghĩa khá đơn giản: "Một

thuật toán là một danh sách các bước chỉ dẫn để giải quyết một bài toán cụ thể1 Ví dụ, công thức

làm bánh bao từ bột yến mạch là một thuật toán đơn sơ, là bản đồ chỉ đường"

Ngược lại, Leonard Soicher và Franco Vivaldi (2004) đã đưa ra định nghĩa một cách thận

trọng như sau: “Một cách không chính thức, một thuật toán là một dãy xác định các chỉ dẫn rõ ràng

để thực hiện một nhiệm vụ cụ thể” 2

Karlheinz Essl (2007), người sáng tạo phương pháp “Soạn nhạc theo thuật toán” (“Algorithmic

Compositon”), đã định nghĩa thuật toán như sau: “Một thuật toán có thể được định nghĩa như là một tập xác định trước các chỉ dẫn để giải quyết một vấn đề cụ thể trong một số giới hạn các bước Thuật toán có thể thay đổi từ một dãy các phép toán số học đơn giản đến sự kết hợp các thủ tục phức tạp hơn, sử dụng nhiều chỉ dẫn hơn từ khoa học máy tính như dựa trên nguyên tắc ngữ pháp,

đệ quy và suy luận xác suất.”3

Piotr Fulmanski (2008) đã định nghĩa “Trong toán học và trong khoa học máy tính, thuật toán

là một danh sách xác định, có thứ tự các thao tác được định nghĩa rõ ràng, cần đến để thực hiện một nhiệm vụ nào đó4.”

Chung-Yang Huang và các cộng sự (2009) đã đưa ra định nghĩa thuật toán hướng trực tiếp đến

máy tính, là đối tượng thực hiện thuật toán, một cách rõ ràng rằng: “Một thuật toán là một danh sách có thứ tự các chỉ dẫn được chỉ ra chính xác để thực hiện một công việc hay giải quyết một bài toán Nó có thể được mô tả trong ngôn ngữ tự nhiên, giả mã, sơ đồ, hoặc thậm chí trong ngôn ngữ lập trình5.”

João Fernando Peixoto Ferreira (2010) đã giải thích câu nói nôm na “toán học là thuật toán

một cách tự nhiên” như sau: “Khi ta nói rằng toán học là thuật toán một cách tự nhiên, không có nghĩa là thuật toán dùng để giải toán Ở đây, chúng tôi muốn nói rằng các nguyên tắc và kĩ thuật được phát triển để xây dựng và giải quyết những vấn đề thuật toán có thể được sử dụng để giải quyết nhiều vấn đề toán học6.”, và ông đã định nghĩa “Một thuật toán là một dãy xác định các chỉ dẫn mà nó có thể được thực hiện một cách hệ thống trong lời giải bài toán đã cho7

Nguyên bản: An algorithm can be defined as a predetermined set of instructions for solving a specific problem in a limited

number of steps Algorithms can range from a mere succession of simple arithmetical operations to more complex combinations of procedures, utilising more involved constructions from computer science such as rule-based grammars, recursion and probabilistic inference.

4

Nguyên bản: In mathematic and computer science, algorithm mean finite, ordered sequence of clearly defined actions, needed

to perform some task

5 Nguyên bản: An algorithm is a sequence of well-defined instructions for completing a task or solving a problem It can be

described in a natural language, pseudocode, a flowchart, or even a programming language

6 Nguyên bản: When we say that mathematics is algorithmic in nature, we do not mean that we have an algorithm to do

mathematics Instead, we want to say that the principles and techniques that have been developed to formulate and solve algorithmic problems can be used to solve many mathematical problems.

7Nguyên bản: An algorithm is a finite sequence of instructions that can be systematically executed in the solution of a given

problem.

Trang 6

Robert Sedgewick (1946) - người viết cuốn sách nổi tiếng được dịch sang tiếng Việt với tựa đề

“Cẩm nang thuật toán”] đã gián tiếp đề cập đến khái niệm thuật toán ở góc độ lập trình như sau:

"Khi viết một chương trình máy tính, ta thường cài đặt một phương pháp đã được nghĩ ra trước đó

để giải quyết một vấn đề Phương pháp này thường độc lập với một máy tính cụ thể sẽ được dùng,

nó hầu như thích hợp như nhau cho nhiều máy tính Trong bất kì trường hợp nào thì phương pháp, chứ không phải bản thân chương trình máy tính, là cái phải được nghiên cứu để học cách làm thế

nào để can thiệp vào bài toán Từ "thuật toán" được dùng trong khoa học máy tính để mô tả một phương pháp giải bài toán thích hợp cho việc cài đặt như là các chương trình máy tính1

Thuật toán là "chất liệu" ("stuff") của khoa học máy tính: chúng là đối tượng nghiên cứu trung tâm trong nhiều, nếu không nói là hầu hết, các lĩnh vực của tin học"

Quan điểm về thuật toán của Robert không đi ngược lại các định nghĩa hình thức đúng đắn về thuật toán như đã đề cập trên đây, và cũng giống như các nhà khoa học máy tính khác, Robert lược

bỏ các thuật ngữ phức tạp của toán học, để lột tả một cách dễ hiểu rằng một thuật toán một khi nó được mô tả bởi một người làm về khoa học máy tính thì nó phải đủ gần gũi tựa như giả mã (pseudo code), cũng như đủ độ dễ chuyển đổi sang một mã nguồn nào đó (source code) không phụ thuộc vào phần cứng máy tính đối với một hoạt động lập trình Thoạt đầu, ta cảm thấy phát biểu của Robert có vẻ như sơ sài, vì ông không đả động gì đến "các bước chỉ dẫn chính xác để giải bài toán" như các định nghĩa thuật toán của đa số các nhà toán học và các nhà tin học khác Tuy nhiên không phải như vậy, mô tả này nhấn mạnh vào "cách giải" bài toán một cách thích hợp sao cho nó có thể

cài đặt được và thực hiện được trên máy tính Với một cách giải mà máy tính thực hiện được thì đương nhiên là thuật toán nhất định phải là các chỉ dẫn chính xác để theo đó máy tính thực hiện giải quyết bài toán Hơn thế nữa, mô tả thuật toán của Robert có ưu điểm là nó đã tính đến tính khả thi

của thuật toán khi giao cho máy tính thực hiện

Cùng quan điểm với Robert, Donald E Knuth (1975) - nhà khoa học máy tính nổi tiếng, tác

giả của cuốn sách “Nghệ thuật lập trình máy tính” (“The Art of Computer Programming”) - đã viết:

“Cách ưa thích của tôi để mô tả khoa học máy tính là nói rằng khoa học máy tính là nghiên cứu về

thuật toán” và ông định nghĩa: “Một thuật toán là một dãy xác định các qui tắc mà nó cho biết sẽ thực hiện như thế nào để tạo ra thông tin output từ thông tin input đã cho trong một số hữu hạn các bước.2” Đặc biệt, Knuth đã cho rằng “Một thể hiện riêng của thuật toán được gọi là một chương trình, cũng giống như chúng ta dùng từ “dữ liệu” để chỉ một thể hiện riêng của “thông tin”

Donald E Knuth (1975, 1980) đã mất một thời gian dài để trả lời câu hỏi: “Vai trò thực sự của khái niệm thuật toán trong khoa học toán học là gì?”, “Khoa học máy tính và mối quan hệ của nó với toán học là gì?” Theo Knuth, ở Mĩ, ngành Khoa học máy tính (Computer Sciences) nhấn mạnh thuật toán phải được thực hiện bởi máy móc Nhưng ở Đức và Pháp, ngành Tin học (Informatique) nhấn mạnh rằng có nhiều thứ cần đến thuật toán để xử lí hơn là nhờ các qui trình tự vận hành Ở

1 Nguyên bản: The term algorithm is universally used in computer science to describe problem-solving methods suitable for

implementation as computer programs

2

Nguyên bản: An algorithm is a precisely-defined sequence of rules telling how to produce specified output information from

given input information in a finite number of steps

Trang 7

Liên xô (cũ), ngành Điều khiển học (Cybertics) nhấn mạnh rằng thuật toán cần thiết cho sự điều khiển các qui trình; và ngành toán học ứng dụng (Applied Mathematics) nhấn mạnh các tiện ích của thuật toán đối với một số chủ đề và mối quan hệ chặt chẽ của thuật toán đến toán học nói chung

Trong nhiều năm, Knuth đã thuyết phục các đồng nghiệp rằng khoa học máy tính là nguyên nhân chính dẫn đến nhu cầu cần phải nghiên cứu thuật toán, và đã có những người không đồng ý với

quan điểm của ông Nguyên nhân của sự bất đồng quan điểm này đơn giản là có rất nhiều định

nghĩa thuật toán Knuth cho rằng, thuật toán bao gồm tất cả các khái niệm về những qui trình được xác định rõ ràng, chứa đựng cấu trúc dữ liệu được thao tác, cũng như chứa đựng các cấu trúc tuần

tự các phép toán được thực hiện Tất nhiên Knuth không tán thành một số quan niệm về thuật toán

theo cách đơn thuần, cho rằng thuật toán là sự kết hợp lẫn lộn các phương pháp để tìm lời giải cho một bài toán cụ thể, tương tự như các định lý riêng lẻ trong toán học

Trở lại với al-Khwârizmî, nhà khoa học nổi tiếng thế kỉ 19 mà tên gọi của ông là nguồn gốc của

từ “thuật toán” Donald E Knuth trong [16] bình luận rằng, nếu gọi các thuật toán là các qui tắc đại

số mà al-Khwârizmî phát minh, để thực hiện các phép toán cộng, trừ, nhân và chia, thì các thuật toán này đã bỏ qua rất nhiều giải thích chi tiết một cách toán học, kể cả khi chúng được viết bởi chính al-Khwârizmî! Nếu thực hiện các phép toán này trên giấy và bút thì người ta sẽ phải gạch và xóa nhiều lần một số kết quả trung gian trong quá trình tính toán và những chỗ chưa gạch xóa đó là các giải thích chi tiết một cách toán học cho việc thực hiện các phép toán Rõ ràng các qui tắc (thuật toán) này như các thủ tục được sử dụng để tính toán trực tiếp trên bàn tính ở một chừng mực nào đấy Khoảng hai thế kỉ sau, các phương pháp (thuật toán) tính toán không dùng bàn tính mới được phát triển Knuth thậm chí còn đề cập đến một nhà khoa học khác đến từ Khwarizm, đó là Abu Rayhân Muhammad ibn Ahmad al-Bîrunî (973-1048 sau công nguyên), và đánh giá al-Bîrunî vừa là nhà toán học vừa là nhà khoa học máy tính Al-Bîrunî là nhà khoa học máy tính vì ông đã đưa ra được nguyên tắc (thuật toán) tính toán rất hiệu quả Ví dụ xét bài toán tính giá trị biểu thức 1 + 2 + + 263 là tổng số hạt ngũ cốc được xếp vào các ô của “bàn cờ vua” kích thước 8  8 theo nguyên tắc: ô thứ nhất chứa 1 hạt, từ ô thứ hai trở đi chứa số hạt gấp đôi ô trước đó Al-Bîrunî đã sử dụng chiến lược “chia để trị” và chứng minh rằng tổng cần tính là (((16 ) ) ) 1

2

2 2

2  và đưa ra câu trả lời là

hơn 18 tỷ tỷ hạt (cụ thể là 18.446.744.073.709.551.615 hạt) dựa vào hệ thống gồm ba khái niệm (hệ thập phân - decimal, hệ lục thập phân – sexagesimal, và bảng chữ cái A-rập) Al-Bîrunî thậm chí đã chỉ ra rằng con số rất lớn này là xấp xỉ của tổng số hạt ngũ cốc ở trên 2305 ngọn núi, nếu mỗi ngọn nút có 10.000 con suối cạn, mỗi con suối cạn có 1.000 bầy la, mỗi bầy la chở 10.000 đống, mỗi đống có 8 cái bao, và mỗi cái bao đựng 10.000 hạt ngũ cốc

Trang 8

- Một thuật toán không đực xem là một lời bài toán bao gồm cả việc chứng minh tính đúng đắn của lời giải Nói cách khác, có thể xem thuật toán là một lời giải tóm tắt cho một bài toán, lược bỏ đi rất nhiều các giải thích chi tiết

1.3 Khái niệm thuật toán được dạy ở trường phổ thông

Sách giáo khoa Tin học lớp 10 (2006, NXB Giáo dục) đã làm ẩn đi bản chất toán học trong định nghĩa chính thức về thuật toán, và xuất phát từ khái niệm bài toán trong tin học

Định nghĩa bài toán: "Trong phạm vi tin học, "bài toán" là một việc nào đó ta muốn máy tính

thực hiện" Trong định nghĩa bài toán được nêu ở trên, cụm từ "một việc nào đó" bao gồm các bài

toán giải được (đơn định và khả thi) của toán học và bao gồm các bài toán của riêng tin học Ví dụ

xét những việc sau đây:

A In lên màn hình một dòng chữ chuyển động thuộc bài toán của riêng tin học

B In ra giấy in danh sách học sinh giỏi từ một cơ sở

dữ liệu quản lý học tập của học sinh:

thuộc bài toán của riêng tin học

C Chứng minh tập các số nguyên tố là vô tận nói chung thuộc bài toán của riêng

toán học

D Chứng minh không tồn tại thuật toán để cho biết

một đa thức có nghiệm nguyên hay không:

thuộc bài toán của riêng toán học

E Giải bất phương trình bậc nhất ax + b ≤ 0 với các số

Định nghĩa thuật toán: "Thuật toán để 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ột trình tự nhất định sao cho khi thực hiện dãy thao tác ấy, từ Input (là dữ liệu vào của bài toán), ta nhận được output (là dữ liệu ra của bài toán) cần tìm"

Định nghĩa về thuật toán trong tin học được nêu trên đây hàm ý nhấn mạnh việc chỉ ra một cách tường minh cách tìm lời giải (output) cụ thể của bài toán, và không có xu hướng nghiên cứu định tính các bài toán của toán học (vì toán học thường dừng lại ở việc chứng minh sự tồn tại hay không

tồn tại lời giải của bài toán.) Ví dụ, để tính f(n) là hàm cho biết số hạng Fibonaci thứ n, toán học chỉ

cần đưa ra công thức qui nạp toán học:

2 ( ) 1 (

2 1

1 )

(

n if n

f n f

n or n if n

f

Với công thức này, trong thời gian không được quá lâu, người làm toán chỉ có thể tính được giá

trị của hàm f(n) với n đủ nhỏ Ngược lại, chỉ trong vài giây (không kể dưới 10 phút gõ chương trình), người lập trình có thể trả lời được giá trị cụ thể của hàm f(n) bằng bao nhiêu với n khá lớn,

Trang 9

thậm chí rất lớn Hơn nữa, một lập trình viên có kinh nghiệm sẽ không chọn thuật toán đệ qui để áp dụng công thức qui nạp trên đây, để thuật toán đảm bảo tính khả thi Người lập trình phải xây dựng một thuật toán mới mà nó cần đến nhiều khái niệm đặc trưng của tin học, như biến, phép gán và câu lệnh lặp

1.4 Các tính chất của thuật toán

Có thể chia các tính chất của một thuật toán thành hai nhóm: các tính chất cơ bản và các tính chất mở rộng

1.4.1 Các tính chất cơ bản của thuật toán

Các tính chất cơ bản của thuật toán bao gồm:

Có hai quan điểm về mối quan hệ giữa thuật toán và các tính chất của thuật toán:

- Quan điểm thứ nhất cho rằng một thuật toán có thể vi phạm các tính chất nói trên

- Quan điểm thứ hai cho rằng thuật toán luôn gắn liền với các tính chất nói trên, nói cách khác, nếu một dãy hữu hạn các chỉ dẫn vi phạm một trong các tính chất trên đây thì dãy hữu hạn đó không được xem là một thuật toán

Quan điểm tán thành khái niệm chặt chẽ về thuật toán (quan điểm thứ hai) có những hạn chế nhất định khi muốn tìm “thuật toán” giải quyết nhiều bài toán thực tế Vì thế, một số người sử dụng thuật ngữ “thuật giải” nhằm mở rộng khái niệm “thuật toán” để cho phép một thuật toán có thể đưa

ra những lời giải gần đúng, nghĩa là nó có thể không đáp ứng tính đúng đắn tuyệt đối của thuật toán (nếu không thể), ví dụ như các thuật toán tính toán xấp xỉ để giải gần đúng phương trình, hệ phương trình, tính toán nội suy, giải quyết các bài toán tối ưu Thuật ngữ “thuật giải” còn cho phép một thuật toán có thể nhiên không cần đảm bảo tính xác định (nếu không thể), ví dụ như các thuật toán ngẫu

Quan điểm tán thành khái niệm thuật toán có thể vi phạm các tính chất cơ bản (quan điểm thứ nhất) sẽ không cần đến khái niệm “thuật giải” hoặc khái niệm “qui tắc, phương pháp tựa thuật giải”,

và nó cho phép mở rộng cách giải quyết nhiều bài toán thực tế cần đến tính toán mềm hoặc tính toán gần đúng, ví dụ về những bài toán liên quan đến mạng nơ-ron, logic mờ và tính toán mờ,

phương pháp sai phân và phương pháp phần tử hữu hạn Nhờ có những kiến thức này mà ngành khoa học máy tính phát triển thành nhiều nhánh khác nhau giải quyết được nhiều bài toán thực tế như trong lĩnh vực học máy, lĩnh vực trí tuệ nhân tạo, khai phá dữ liệu

Trang 10

Trong chương trình tin học phổ thông, học sinh được dạy chính thức ba tính chất đầu tiên của thuật toán đó là tính dừng, tính xác định và tính đúng đắn Tuy nhiên giáo viên có thể giới thiệu ba tính chất còn lại, đó là tính luôn tồn tại Input, Output; tính phổ dụng; và tính hiệu quả Tính luôn có Input/Output được nhắc đến như một tính chất ngầm định Tính phổ dụng được nhắc đến để nhấn mạnh một thuật toán nên giải quyết những bài toán tổng quát thay vì giải quyết những bài toán

riêng lẻ Riêng tính hiệu quả của thuật toán được giới thiệu rất hạn chế và chủ yếu được đề cập đến

khi viết chương trình ở những khía cạnh mà nó tránh né khái niệm về tính hiệu quả của thuật toán,

ví dụ như cách tổ chức dữ liệu, cách cải tiến thuật toán để chương trình chạy nhanh hơn Việc đánh giá một thuật toán “tốt hơn” so với thuật toán khác dựa vào những đánh giá trực quan Ví dụ hãy so sánh hai thuật toán sắp xếp kiểu chọn trực tiếp sau đây?

Thuật toán 1 Thuật toán 2

for i := 1 to n-1 do begin

k := i;

for j : = i + 1 to n do

if (a[j] < a[i]) then k := i;

if (k<>i) then begin

x := a[i]; a[i] := a[j]; a[j] := x;

end;

end;

for i := 1 to n-1 do for j := i+1 to n do

if (a[j] < a[i]) then begin

x := a[i]; a[i] := a[j]; a[j] := x;

end;

1.4.2 Các tính chất mở rộng

a) Tính hiệu quả của thuật toán được đo bởi độ phức tạp thuật toán

Ở chương trình bậc đại học, tính hiệu quả của thuật toán được đề cập đến trong những vấn đề như “Phân tích thiết kế thuật toán và đánh giá độ phức tạp thuật toán”, “Lý thuyết độ phức tạp” Cần phân biệt thời gian thực hiện thuật toán và độ phức tạp thuật toán

Thời gian thực hiện thuật toán là hàm của dữ liệu đầu vào mà nó cho biết số lần thực hiện các

phép tính cơ bản trong thuật toán Các phép tính cơ bản bao gồm:

1 Lời gọi thủ tục như read, write, và lời gọi hàm như sqr, sqrt,

2 Câu lệnh gán

3 Phép tính số học (+, -, *, /)

4 Phép toán logic và phép toán so sánh

Có ba loại thời gian tính:

Trang 11

 Thời gian tính tốt nhất: Là thời gian thực hiện nhanh nhất của thuật toán với một bộ dữ liệu vào nào đó

 Thời gian tính tồi nhất: Là thời gian thực hiện chậm nhất của thuật toán với một bộ dữ liệu vào nào đó

 Thời gian tính trung bình: Là trung bình cộng của các thời gian thực hiện thuật toán đối với tất cả các trường hợp thực hiện thuật toán (ứng với một bộ dữ liệu vào đầy đủ)

Độ phức tạp thuật toán cũng là thời gian thực hiện thuật toán nhưng được ước lượng thành dạng tổng quát để đánh giá xem thuật toán đó phức tạp cỡ nào

Ví dụ ta nói một thuật toán có “độ phức tạp bình phương”, nghĩa là nếu dữ liệu đầu vào của

thuật toán là n và T(n) là hàm biểu thị độ phức tạp thuật toán, thì giá trị của T(n) phải không vượt

quá C.n2 với một hằng số C nào đó và với n đủ lớn Một cách tổng quát, nếu T(n) C.f(n) với số dương C nào đó và với mợi n n0 nào đó, thì ta nói thuật toán có độ phức tạp cỡ f(n), hay chính xác

là không vượt quá f(n) Trong trường hợp này ta thường biểu diễn hàm T(n) theo kí hiệu big-O dạng: T(n) = O(f(n)) Nếu f(n) = n2

thì T(n) = O(n2)

Ví dụ: Thuật toán sắp xếp kiểu chọn lựa (Selection Sort)

Thuật toán sắp xếp kiểu chọn lựa kinh điển (chưa tối ưu)

for i := 1 to n-1 do begin (* chọn phần tử nhỏ nhất trong dãy a[i] đến a[n]*)

1

k := i ; (*vị trí của phần tử nhỏ nhất*) n-1

lần 2

min := a[i] (*giá trị phần tử nhỏ nhất*) n-1

lần for j := i + 1 to n do

Trang 12

Trường hợp 1: Thời gian thực hiện P(i) là một hằng số và không phụ thuộc vào i, nghĩa là T(P(i)) = t , với t là hằng số Khi đó thời gian thực hiện câu lệnh lặp là n lần thực hiện P(i),

tức là:

t n n

T( )

Trường hợp 2: Thời gian thực hiện của P(i) phụ thuộc vào i, nghĩa là T(P(i)) = t(i) Khi đó

thời gian thực hiện câu lệnh lặp “for i” với i lần lượt nhận giá trị từ 1 đến n là T(n) = t(1) +

T

1)()

(

Trở lại thuật toán sắp xếp kiểu lựa chọn

Xét thuật toán trong trường hợp tồi nhất: dãy (a) đã được sắp xếp không tăng Ta cần đánh giá được số lần thực hiện hai câu lệnh cơ bản 3 và 4, do đó tính được thời gian P(i) để thực hiện các câu

lệnh for j phụ thuộc vào i

- i = 1: hai câu lệnh 3 và 4 thực hiện n - 1 lần

- i = 2: hai câu lệnh 3 và 4 thực hiện n - 2 lần

- …

- i = n-1: hai câu lệnh 3 và 4 thực hiện 1 lần

Vậy T(P(i)) = 1 + 2 + … + (n-2) + (n-1) = n(n-1)/2 (ta đặt bằng p)

biểu thị độ phức tạp thuật toán

Thuật toán sắp xếp chọn trực tiếp cải tiến (tối ưu hơn)

for i :=1 to n-1 do begin (* chọn phần tử nhỏ nhất trong dãy a[i] đến a[n]*)

1

Trang 13

5 a[i] := a[k];

end;

Trong thuật toán trên:

Thời gian thực hiện thuật toán là T(n) = 2(n-1) + n(n-1)/2 = (1/2)n2

+ (3/2)n - 2 Độ phức tạp thuật toán là Vậy T(n) = O(n2) Trong ví dụ này, ta thấy khi thay đổi thuật toán, độ phức tạp không thay đổi nhưng thời gian tính toán ít hơn

b) Tính hiệu quả của thuật toán được đánh giá một cách trực quan (tính khả thi)

Ví dụ: Cho hệ phương trình đại số tuyến tính

,

b

trong đó A là ma trận vuông cấp n với định thức khác 0

Về lý thuyết có thể giải hệ trên bằng công thức Cramer

107073

100782

c) Tính ổn định

Một thuật toán gọi là ổn định nếu sai số tính toán (do máy tính làm tròn số) không bị khuếch đại trong quá trình tính

Ví dụ 1 (tính ổn định) Giả sử cần tính tích phân

Trang 14

1 1

thì du = nxn-1dx; đặt dv = ex-1

dx thì v = ex-1 ta được

1 11

1

0

1 1

1)1( 101

1 1

0

,2,1

Kết quả giảm dần từ 0.3679 (khi n=1) đến 0.0555 (khi n=16)

Kết quả sau đó kết quả thay đổi thất thường và giá trị tuyệt đối tăng rất nhanh

Điều này hoàn toàn không phù hợp với lý thuyết vì theo lý thuyết thì I n 0 khi n do đó

.1

10

I đã bị khuyếch đại trong quá trình tính

Nguyên nhân: thay vì

e

I11 ta thu được~I1I1, trong đó là sai số Giả sử các tính toán tiếp theo không mắc phải sai số Với n = 2 ta được

.22

)21()(21

1 1

I

Trang 15

Thu được ~I2với sai số ~I2I2 2 Tương tự, ở bước thứ n thay cho giá trị đúng I ta thu được n

giá trị gần đúng I~n với sai số I~nI nn! Do đó, dù  có bé thì khi n đủ lớn, sai số vẫn đủ lớn và

ta không thể nhận được giá trị chấp nhận được là gần đúng cho I n

1.5 Các quan điểm về tư duy thuật toán

1.5.1 Quan điểm về tư duy thuật toán của các nghiên cứu trong nước

Trong số rất hiếm những người nghiên cứu sâu về chủ đề dạy học thuật toán cho HS phổ thông

có lẽ phải kể đến Vương Dương Minh (1996) với luận án “Phát triển tư duy thuật toán cho học sinh trong khi dạy học các hệ thống số ở trường phổ thông” Tác giả đã nghiên cứu PPDH thuật toán

trên các hệ thống số ở trường phổ thông Trước hết tác giả đưa ra định nghĩa trực giác nhưng chính

xác về thuật toán như sau: “Thuật giải là một qui tắc chính xác và đơn trị một số hữu hạn những thao tác sơ cấp theo một trình tự xác định trên đối tượng sao cho sau một số hữu hạn thao tác đó ta thu được kết quả mong muốn” Dựa trên định nghĩa này, các bài toán số học và các bài toán giải

bằng phương pháp số ở trường phổ thông được tác giả chỉ ra các bước đơn trị và xác định (thuật thoán) để giải quyết Trong luận án của mình, Vương Dương Minh (1996) đã đưa ra hệ thống các tư tưởng chủ đạo về phát triển tư duy thuật giải trong môn toán như sau:

1) Rèn luyện cho HS các hoạt động tư duy thuật giải trong khi và nhằm vào thực hiện những yêu cầu toán học

2) Gợi động cơ và hướng đích cho các hoạt động tư duy thuật giải bao gồm:

 Gợi động cơ và hướng đích mở đầu các hoạt động tư duy thuật giải;

 Gợi động cơ và hướng đích trong khi tiến hành các hoạt động tư duy thuật giải

 Gợi động cơ kết thúc hoạt động tư duy thuật giải

3) Truyền thụ cho HS những tri thức phương pháp về tư duy thuật giải trong khi tổ chức, điều khiển tập luyện các hoạt động tư duy thuật giải

4) Phân bậc các hoạt động

Những tư tưởng chủ đạo trên đã quán triệt những yêu cầu đầu tiên của việc khai thác hoạt động trong nội dung dạy học toán, vì các hoạt động tư duy thuật giải tương thích với các nội dung toán học cần dạy học Các hoạt động tư duy thuật giải xuất hiện trước hết như phương tiện chiếm lĩnh tri thức và rèn luyện kỹ năng Sau đó, do có vai trò quan trọng trong học tập và đời sống, nó đã trở thành mục đích dạy học Vì vậy, các hoạt động tư duy thuật giải đạt được hai chức năng: chức năng phương tiện và chức năng mục đích Tiến hành các hoạt động tư duy thuật giải trong khi và nhằm vào thực hiện các yêu cầu toán học chính là nhằm phối hợp hai chức năng này

Bùi Văn Nghị và các cộng sự (2005) đã đơn giản hóa khái niệm thuật toán để tiệm cận với thuật

toán giải bài toán trên máy tính như sau: “Thuật toán được hiểu như một quy trình mô tả những chỉ dẫn rõ ràng và chính xác để người (hay máy) thực hiện một loạt thao tác nhằm đạt được mục đích đặt ra hay giải một lớp bài toán nhất định” Hơn nữa, các tác giả cho rằng, thuật toán có các đặc

điểm sau đây:

Trang 16

- Đó là một dãy hữu hạn các bước sắp xếp theo một trình tự nhất định

- Mỗi bước là một thao tác sơ cấp, trường hợp đặc biệt cũng có thể là một thuật toán đã biết Các bước rõ ràng, thao tác chính xác (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 thì phải cho ra cùng một kết quả)

- Có tính kết thúc (sau một số hữu hạn bước thực hiện) và tính phổ dụng (giải quyết được các bài toán cùng loại)

Theo các tác giả, “tư duy thuật toán là cách suy nghĩ để nhận thức, để giải quyết vấn đề một cách có trình tự (sắp xếp lần lượt, thứ tự trước sau)”

Nguyễn Bá Kim (2009) đã trình bày khá rõ ràng một số vấn đề cơ bản về thuật giải1, về các qui tắc tựa thuật giải, và về rèn luyện tư duy thuật giải trong dạy học giải một số toán Các qui tắc tựa thuật giải được xem là một loại tri thức phương pháp đặc biệt và hữu hiệu trong giải toán Tri thức

phương pháp là thuật giải được tác giả đề cập ba lần với mức chi tiết tăng dần như sau:

Lần thứ nhất, bàn về “Định hướng quá trình dạy học môn toán” (tr 41-44), tác giả nhấn mạnh

việc dạy học môn toán cần trang bị cho HS những dạng tri thức khác nhau, gồm tri thức sự vật (ví

dụ như các khái niệm, định lí); tri thức phương pháp (liên hệ với hai loại phương pháp khác nhau

về bản chất, đó là những phương pháp là các thuật giải, ví dụ như giải phương trình bậc hai, và những phương pháp có tính chất tìm tòi, ví dụ như phương pháp tổng quát của Pôlya để giải bài tập toán học); tri thức chuẩn (ví dụ như đơn vị đo lường, qui ước làm tròn số), và tri thức giá trị có nội

dung là các mệnh đề đánh giá (ví dụ “khái quát hóa là hoạt động cần thiết cho mọi khoa học”) Lần thứ hai, bàn về “Phương pháp dạy học môn toán” (tr 143-149), tác giả nhấn mạnh rằng cần dẫn dắt HS kiến tạo tri thức, nhất là tri thức phương pháp, bao gồm: Những tri thức phương pháp là những hoạt động tương ứng với những nội dung toán học cụ thể (ví dụ như giải phương trình, dựng tam giác); Những tri thức phương pháp thực hiện những hoạt động toán học phức hợp (như định nghĩa, chứng minh); Những tri thức phương pháp thực hiện những hoạt động trí tuệ phổ biến trong dạy học môn toán; Những tri thức phương pháp thực hiện những hoạt động trí tuệ chung (so sánh, khái quát hóa, trừu tượng hóa, ); và Những tri thức phương pháp thực hiện những hoạt động ngôn ngữ logic (như thiết lập mệnh đề đảo của mệnh đề cho trước) Những tri thức phương pháp kể trên

có hai loại: tri thức phương pháp là thuật giải và tri thức phương pháp tìm đoán Ở đây, cần chú ý

rằng khi dạy các tri thức phương pháp là thuật giải có hai trường hợp xảy ra: tri thức phương pháp này phải được dạy tường minh theo qui định của chương trình, và nó có thể không cần dạy tường minh do trong chương trình không qui định Tác giả chỉ ra ba cấp độ dạy các tri thức phương pháp, đặc biệt là áp dụng cho các thuật giải:

1) Dạy tường minh tri thức phương pháp được phát biểu tổng quát, ví dụ như dạy các bước giải phương trình bậc hai Khi đó tùy theo có thể dạy các tri thức này ở mức độ hoàn chỉnh (chỉ ra một quá trình gồm đầy đủ các bước thực hiện) và/hoặc mức độ chặt chẽ (có chứng minh tính đúng đắn của thuật giải)

1

“Thuật toán” và “thuật giải” là hai cách dịch khác nhau của từ “algorithm” Tuy nhiên một số nhà khoa học Việt Nam cho rằng “thuật giải” là mở rộng của khái niệm “thuật toán” để chấp nhận tính gần đúng (ví dụ thuật toán tham lam) và tính đa trị tại mỗi bước thực hiện thuật toán (ví dụ giải thuật ngẫu nhiên)

Trang 17

2) Thông báo tri thức trong quá trình hoạt động, ví dụ “để giải phương trình trùng phương, ta đặt

ẩn phụ để đưa về dạng bậc hai quen thuộc”

3) Tập luyện những hoạt động ăn khớp với tri thức phương pháp Khi đó các chỉ dẫn được lặp lại

ở dạng phát biểu tổng quát để HS hình thành qui tắc chung

Lần thứ ba, bàn về “Những tình huống điển hình trong dạy học môn toán” (tr 376-385), tác giả dành hẳn một nội dung “Dạy học qui tắc, phương pháp”, để trình bày quan điểm và định hướng dạy

học thuật giải, và những qui tắc tựa thuật giải, để giải toán và rèn luyện tư duy thuật giải cho HS

Về khái niệm thuật giải và qui tắc tự thuật giải: Tác giả đưa ra một phát biểu trực quan về thuật

toán như sau: “Thuật giải theo nghĩa trực giác được hiểu là như một dãy hữu hạn những chỉ dẫn thực hiện một cách đơn trị, kết thúc sau một số hữu hạn bước và đem lại kết quả là biến đổi thông tin vào của một lớp bài toán thành thông tin ra mô tả lời giải của lớp bài toán đó” Theo tác giả,

ngoài thuật giải, còn có những qui tắc tựa thuật giải và chúng rất có hiệu lực trong việc chỉ dẫn hành

động và giải toán “Qui tắc tựa thuật giải được hiểu là một dãy hữu hạn những chỉ dẫn thực hiện theo một trình tự xác định nhằm biến đổi thông tin vào của một lớp bài toán thành thông tin ra mô

tả lời giải bài toán đó” Khác với thuật giải, qui tắc tựa thuật giải không đảm bảo chắc chắn sau

một số hữu hạn bước thì đem lại kết quả là lời giải của lớp bài toán; kết quả thực hiện sau mỗi chỉ dẫn có thể không đơn trị; và mỗi chỉ dẫn trong qui tắc có thể chưa mô tả hành động một cách xác định

1.5.2 Quan điểm về tư duy thuật toán của các nghiên cứu trên thế giới

Knuth, D E., (1980, 1985) có lẽ là một trong những nhà khoa học quan tâm nhiều nhất đến mối quan quan hệ giữa toán học và khoa học máy tính, đồng thời quan tâm đến hai kiểu tư duy toán học

và tư duy thuật toán Tuy nhiên Knuth vẫn chưa đưa ra khái niệm chính thức về tư duy thuật toán Parsons (2006) đã có một đề xuất rèn luyện tư duy thuật toán cho người học, trong khi không phát biểu tường minh khái niệm về tư duy thuật toán

Theo Gerald Futsche (2006), tư duy thuật toán (Algoritthmic thinking) là một trong những năng lực quan trọng nhất cần đạt được trong nền giáo dục Tin học, nó có thể phát triển độc lập từ việc học lập trình., tư duy thuật toán là sự kết nối các năng lực của tư duy theo cách nào đó để hiểu và xây dựng được thuật toán, bao gồm:

1 Năng lực phân tích bài toán đã cho

2 Năng lực xác định tính chính xác của bài toán

3 Năng lực tìm ra các thao tác cơ bản tương ứng với bài toán đã cho

4 Năng lực xây dựng một thuật giải chính xác bằng cách sử dụng các thao tác cơ bản

5 Năng lực tư duy về tất cả các trường hợp (bình thường và đặc biệt) có thể xảy ra của một bài toán

6 Năng lực nâng cao hiệu quả của một thuật toán

Hai năng lực đầu tiên giúp học sinh thực hiện tốt nhiệm vụ “Xác định bài toán” Các năng lực còn lại giúp học sinh hiểu và làm tốt nhiệm vụ “Mô tả thuật toán” Trong đó, năng lực 3 và 4 được

Trang 18

xem là những năng lực tìm ra các thao tác cơ bản để mô tả thuật giải bài toán , năng lực 5 và 6 được xem là những năng lực tư duy giúp học sinh xây dựng được một thuật toán đảm bảo tính đúng đắn và tính hiệu quả Gerald đề nghị nên dùng các bài toán khó nhưng phát biểu bài toán dễ hiểu để rèn luyện tư duy thuật toán cho ngươi học, những hình dung thích hợp về bài toán này sẽ giúp họ hiểu được các khái niệm cơ bản gắn kết với thuật toán như: Tính chính xác (correctness), tính dừng (termination), tính hiệu quả (efficiency), (determinism), tính song song (parallelism), vv…

Để minh họa cho quan điểm của mình, Gerald Futsche đã chọn bài toán “Tìm đường trong mê cung” đã được chọn để phân tích quá trình tìm ra thuật toán đúng đắn thông qua quá trình tối ưu

hóa “cách đi” (thao tác cơ bản) để thoát khỏi mê cung Quá trình này có thể tóm tắt qua các bước sau đây:

Bước 1: Phân tích bài toán

Bài toán được xác định 3 nhiệm vụ cần giải quyết, đó là

Tìm đường đi ra khỏi mê cung,

Tìm đường đi xuyên qua mê cung, hoặc

Tìm đường đi đến một vị trí cụ thể nào đó bên trong mê cung

Các nhiệm trên dẫn đến một nhiệm vụ chung đó là:

Tìm đường đi từ vị trí A tới vị trí B (Nhiệm vụ chung)

Bước 2: Xác định thao tác cơ bản thứ nhất: “Đi theo hành lang bên trái”

Tại bước này, tác giả phân tích để chứng tỏ thao tác cơ bản “Đi theo hành lang bên trái” (xem Hình 1) có thể là lời giải bài toán, nghĩa là cách đi đó có thể xuất phát từ lối vào và thoát khỏi mê cung bằng một lối ra xác định Tuy nhiên, tác giả cũng đưa ra ví dụ về những mê cung mà cách đi theo hành lang bên trái không thể thoát khỏi mê cung vì đi vào đường cụt, trong khi có đường ra khỏi mê cung không bằng cách đi đó (xem Hình 2)

Hình 1 Đi theo hành lang bên trái Hình 2 Đi theo hành lang bên trái và bế tắc

Bước 3: Xác định thao tác cơ bản thứ hai : “Đi theo hành lang ngẫu nhiên”

Bước 3 nhằm giải quyết hạn chế của cách đi cứng nhắc và “cực đoan” theo hành lang bên trái, bằng cách cho phép đi theo các hành lang một cách ngẫu nhiên (xem Hình 3) Tuy nhiên cách đi

Trang 19

này lại quá tốn kém về mặt chi phí bộ nhớ và thời gian, do sự bùng nổ cấu hình tất cả các cách đi Hơn nữa, cách đi theo hành lang ngẫu nhiên gặp phải bế tắc mới: Nó không kiểm tra được hành lang đã đi qua, do đó có thể đi quanh quẩn trong một dãy các hành lang khép kín Để khắc phục điều này, thao tác cơ bản thứ hai được điều chỉnh thành thao tác cơ bản ở bước ba dưới đây

Hình 3 Đi theo hành lang ngẫu nhiên

Bước 4: Xác định thao tác cơ bản thứ ba: “Vừa đi vừa đánh dấu”

Dựa trên ưu điểm và hạn chế của cách đi theo hành lang ngẫu nhiên, tác giả đề xuất thuật toán

“cuộn len của Ariadne” nhằm đánh dấu những hành lang đã đi qua để tránh bị đi quẩn trong các chu trình trong mê cung (xem Hình 4) Việc đánh dấu này giống như việc rải sợi len dọc hành lang trong quá trình đi Hơn nữa, trong trường hợp đi đến “ngõ cụt” (trong khi có cách khác để thoát khỏi mê cung), thuật toán đã cho phép bỏ đánh dấu những hành lang đã đi qua (cuộn sợi len lại) để quay lại một điểm giao cắt nào đó, nhằm mục đích chọn một hành lang mới xuất phát từ điểm giao cắt này để đi tiếp

Hình 4 Đi theo cuộn len của Ariadne

Bản chất của thuật toán “cuộn len của Ariadne” chính là bản chất của thuật toán Backtracking quen thuộc để giải quyết lớp bài toán “quay lui vét cạn” Đó là những bài toán có đặc trưng nghiệm gồm nhiều thành phần, mỗi thành phần có một tập các khả năng để chọn lựa Tại mỗi bước của thuật toán, một khả năng chưa được xét sẽ được chọn là thành phần tiếp theo của nghiệm Quá trình này sẽ dẫn đến hai khả năng: (1) Chọn được thành phần nghiệm cuối cùng và kết thúc thuật toán; (2) Bế tắc, tức là không thể chọn được thành phần thứ k tiếp theo của nghiệm Khi đó thuật toán

“quay lui” về thành phần nghiệm trước đó, nghĩa là hủy bỏ thành phần thứ k-1 vừa chọn, chọn lại thành phần thứ k - 1 khác trong tập các khả năng dành cho nó, trước khi “đi tiếp” đến thành phần thứ k Nếu tập khả năng của thành phần thứ k-1 đã được xem xét hết thì thuật toán lại cho phép

Trang 20

“quay lui” về thành phần nghiệm thứ k – 2 để chọn lại Như vậy khả năng “quay lui” giúp thuật toán xem xét tất cả các khả năng cho các thành phần nghiệm ở các bước trước để tìm thành phần nghiệm ở bước hiện tại Do đó, thuật toán có thể chứng minh được tính vô nghiệm (ví dụ mê cung không có đường ra) vì nó có thể xem xét mọi khả năng cho tất cả các thành phần của nghiệm

Ví dụ của Gerald đã gợi ý một cách dạy thuật toán Backtracking Thuật toán này có lẽ nó chưa thật sự phù hợp với trình độ học sinh ở mặt bằng chung Tuy nhiên phương pháp của Gerald có thể gợi ý một cách dạy thuật toán cho các bài toán khó khác bằng cách xuất phát từ các lời giải tự nhiên (giống như cách đi theo tường bên trái, rồi đi ngẫu nhiên, ) và phát hiện ra các hạn chế của lời giải này để tìm kiếm một lời giải khác hữu hiệu hơn Với ý tưởng chung đó, việc vận dụng phương pháp này sẽ tùy thuộc vào từng bài toán cụ thể

1.5.3 Một quan điểm mới về tư duy thuật toán

Tài liệu này đưa ra một khái niệm mới về tư duy thuật toán Các cách tiếp cận dạy học thuật toán, rèn luyện tư duy thuật toán, bồi dưỡng cho học sinh kĩ năng giải quyết vấn đề được trình bày ở những mục tiếp theo sẽ dựa trên khái niệm này về tư duy thuật toán

Khái niệm về tư duy thuật toán được dựa trên những nhận định sau đây:

Thứ nhất: Tư duy thuật toán thể hiện năng lực trí tuệ giải quyết vấn đề theo một qui trình xác

định Bởi việc xây dựng thuật toán thực chất là tạo ra một bản thiết kế qui trình giải bài toán, được

mô tả bằng một dãy các thao tác mà theo đó đối tượng thực hiện thuật toán sẽ tiến hành để thu được

Output từ Input Qui trình này thường gồm ba phần: Nhận thông tin vào (Input); Xử lí thông tin đã nhận để giải quyết yêu cầu bài toán; và đưa ra thông tin cần tìm (Output)

Thứ hai: Khi mô tả các chỉ dẫn trong các định nghĩa thuật toán, hoặc mô tả các thao tác cơ bản

trong định nghĩa tư duy thuật toán trên đây của Gerald ở các thuật toán cụ thể, ta sẽ thấy có những đối tượng hiểu được ngay các chỉ dẫn trong thuật toán, và ngược lại, có những đối tượng không hình dung được chúng Nói cách khác, một thao tác được xem là thao tác cơ bản đối với đối tượng này, nhưng nó có thể là một thao tác phức tạp đối với đối tượng khác Như vậy việc mô tả thuật toán luôn phải gắn liền với đối tượng có khả năng hiểu được thuật toán và thực hiện được nó, ta gọi

đối tượng này là tác nhân

Khái niệm tác nhân: Tác nhân có thể là con người, máy tính, hay bất kì một “máy” nào có khả

năng hiểu và thực hiện được thuật toán

Khái niệm tư duy thuật toán: Tư duy thuật toán là sự kết hợp các năng lực của tư duy để tìm

ra cách giải quyết vấn đề theo một qui trình xác định và hướng đến một tác nhân tương ứng

“Cách giải quyết vấn đề” ở đây có thể dựa trên năm hoạt động rèn luyện tư duy thuật giải của Nguyễn Bá Kim (2009), hoặc dựa trên việc rèn luyện sáu năng lực xây dựng thuật toán theo các thao tác cơ bản của Gerald Futschek (2006), hoặc dựa trên quy trình phát hiện các loại thao tác trong quá trình mô tả thuật toán của Nguyễn Chí Trung và Hồ Cẩm Hà (2010, 2012); Nguyễn Chí Trung (2012), hoặc dựa trên qui trình tinh chế dần thành các phiên bản mô tả thuật toán được đề xuất trong nghiên cứu này cũng như được công bố trong Nguyễn Chí Trung và Nguyễn Thị Thu Thủy (2012)

Ngày đăng: 18/09/2016, 09:11

HÌNH ẢNH LIÊN QUAN

Hình 1. Đi theo hành lang bên trái Hình 2. Đi theo hành lang bên trái và bế tắc - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Hình 1. Đi theo hành lang bên trái Hình 2. Đi theo hành lang bên trái và bế tắc (Trang 18)
Hình 3. Đi theo hành lang ngẫu nhiên - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Hình 3. Đi theo hành lang ngẫu nhiên (Trang 19)
Hình 4. Đi theo cuộn len của Ariadne - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Hình 4. Đi theo cuộn len của Ariadne (Trang 19)
Bảng 1. Mô tả thuật toán giải bài toán 2 - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Bảng 1. Mô tả thuật toán giải bài toán 2 (Trang 24)
Hình 5. Đóng gói một thao tác cơ bản - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Hình 5. Đóng gói một thao tác cơ bản (Trang 25)
Bảng 2. Các loại thao tác cho các thuật toán trong SGK, Tinhọc 10, THPT - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Bảng 2. Các loại thao tác cho các thuật toán trong SGK, Tinhọc 10, THPT (Trang 30)
Bảng 1. Các lần áp dụng qui tắc chung thể hiện ý tưởng sắp xếp kiểu chọn trực tiếp - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Bảng 1. Các lần áp dụng qui tắc chung thể hiện ý tưởng sắp xếp kiểu chọn trực tiếp (Trang 36)
Bảng 2. Mô phỏng thuật toán áp dụng qui tắc chung đối với dãy mà đầu dãy là i: - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Bảng 2. Mô phỏng thuật toán áp dụng qui tắc chung đối với dãy mà đầu dãy là i: (Trang 37)
Hình 8. Các phiên bản của phương pháp tinh chế khi dạy một phương pháp sắp xếp - PHƯƠNG PHÁP DẠY HỌC THUẬT TOÁN VÀ LẬP TRÌNH Ở TRƯỜNG PHỔ THÔNG
Hình 8. Các phiên bản của phương pháp tinh chế khi dạy một phương pháp sắp xếp (Trang 38)

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w