Một số phương pháp giải quyết vấn đề bài toán

Một phần của tài liệu bước chuyển từ lời giải toán học sang lời giải tin học của một bài toán (Trang 26)

4. Tổ chức luận văn

1.5. Một số phương pháp giải quyết vấn đề bài toán

Chúng tôi đặt ra một câu hỏi là “Từ bộ Input và Output” của một vấn đề - bài toán, dựa trên những yếu tố nào để xây dựng một thuật toán phù hợp để giải quyết vấn đề - bài toán đó?

Về cơ bản, việc giải quyết vấn đề - bài toán bằng máy tính được thực hiện bằng hai phương pháp: phương pháp trực tiếp và phương pháp gián tiếp.

Phương pháp trực tiếp được sử dụng khi xác định được lời giải qua các công thức, hệ thức, định luật hay qua các bước căn bản để có được lời giải. Lúc này việc giải quyết vấn đề trên máy tính chỉ là sự chuyển đổi lời giải từ ngôn ngữ thông thường sang ngôn ngữ lập trình.

Về cơ bản, phương pháp trực tiếp gồm 3 loại. Loại thứ nhất dùng để biễu diễn cho các bài toán đã có lời giải chính xác bằng một công thức toán học nào đó. Loại thứ hai là biểu diễn cho các bài toán có công thức giải gần đúng (như các công thức tính gần đúng sin, cos, giải phương trình siêu việt, …). Loại cuối cùng là biểu diễn các lời giải không tường minh bằng kỹ thuật đệ quy.

Chẳng hạn như bài toán tính tổng n số tự nhiên đầu tiên. Bài toán này nhà toán học Gauss đã đưa ra công thức giải tổng quát, việc giải bài toán này trên máy tính chỉ còn là biễu diễn lại công thức giải theo các quy tắc của máy tính mà thôi. Hay như việc giải phương trình bậc hai, khi viết thuật toán ta chỉ việc biễu diễn lại cách tính giá trị Delta và công thức nghiệm trong các trường hợp nghiệm kép, hai nghiệm phân biệt.

Tuy nhiên quá trình chuyển đổi từ các lời giải có sẵn sang chương trình không phải lúc nào cũng dễ dàng. Và nếu không nắm vững các quy tắc chuyển đổi hay quy ước của ngôn ngữ lập trình thì khi máy tính chạy chương trình sẽ cho kết quả sai lệch với kết quả

25

mong muốn, đôi khi quá trình tính toán cũng khác xa so với lời giải được mô tả trước đó. Việc biểu diễn lời giải vấn đề - bài toán thành chương trình trên máy tính diễn ra theo các quá trình: chuyển đổi dữ liệu bài toán thành dữ liệu chương trình, chuyển đổi quá trình tính toán của bài toán thành các cấu trúc của chương trình, phân chia vấn đề bài toán ban đầu thành những vấn đề - bài toán nhỏ hơn, biễu diễn các tính toán không tường minh bằng đệ quy. Các quá trình đó được thực hiện dựa trên các nguyên lý sau:

Nguyên lý 1: Dữ liệu của bài toán sẽ được biểu diễn lại dưới dạng các biến của chương trình thông qua các quy tắc xác định của ngôn ngữ lập trình cụ thể.

Nguyên lý 2 (Định lý Bohn-Jacopini): Mọi quá trình tính toán đều có thể mô tả và thực hiện dựa trên ba cấu trúc cơ bản: cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc lặp.

Nguyên lý 3: Chương trình tính toán theo các biểu thức chính xác không đồng nhất với quá trình tính toán chính xác về mặt hình thức.

Nguyên lý 4: Mọi quá trình tính toán gần đúng đều dựa trên cấu trúc lặp với tham số xác định.

Nguyên lý 5: Mọi vấn đề bài toán lớn đều có thể giải quyết bằng cách phân chia thành những vấn đề bài toán nhỏ hơn.

Nguyên lý 6: quá trình đệ quy trong máy tính không đơn giản như các biểu thức quy nạp toán học.

Phương pháp gián tiếp được sử dụng khi chưa tìm ra lời giải chính xác của vấn đề. Đây cũng là cách tiếp cận chủ yếu của loài người. Phương pháp này đưa ra các giải pháp mang tính chất đặc trưng của máy tính và dựa trên sức mạnh tính toán của máy tính để giải quyết các bài toán.

 Phương pháp đầu tiên được sử dụng để đi tìm lời giải gián tiếp cho một bài toán là phương pháp thử sai. Phương pháp này nghe có vẻ rất tầm thường, tuy nhiên nó lại đóng vai trò hết sức rất quan trọng việc giải quyết các vấn đề - bài toán. Khi xây dựng lời giải bài toán theo phương pháp thử - sai, người ta thường dựa vào 3 nguyên lý cơ bản sau:

• Nguyên lý duyệt toàn bộ hoặc vét cạn toàn bộ. Nguyên lý đã được nhà bác học Edison sử dụng để tìm ra vật liệu thích hợp làm dây tóc bóng đèn điện đầu tiên của nhân loại và cũng được sử dụng trong nhiều các phát minh của mình. Nguyên lý này thực tế rất đơn giản, để giải quyết một vấn đề - bài toán nào đó ta chỉ cần liệt kê tất cả các trường hợp có thể xảy ra của bài toán sau đó lần lượt đi kiểm tra tất cả các trường hợp đó để tìm ra lời giải chính xác cho bài toán. Chẳng hạn như để liệt kê các số nguyên tố trong khoảng từ m

26

đến n, ta liệt kê tất cả các số nguyên k trong khoảng từ m đến n rồi đi kiểm tra các số nguyên k đó có phải là số nguyên tố không bằng cách chia số đó cho các số tự nhiên từ 2 cho đến k-1.

Nguyên lý này có một nhược điểm cơ bản là sẽ tiêu tốn rất nhiều thời gian khi gặp phải các vấn đề - bài toán có tập các khả năng lớn. Vì vậy một nguyên lý khác được ưu tiên sử dụng lúc này là nguyên lý ngẫu nhiên.

• Nguyên lý ngẫu nhiên. Nguyên lý này dựa trên việc thử một số khả năng được chọn một cách ngẫu nhiên trong tập các khả năng. Khả năng tìm ra lời giải đúng hoặc gần đúng của phương pháp này tùy thuộc vào chiến lược chọn ngẫu nhiên và một số điều kiện cụ thể của bài toán.

Trong một số vấn đề xác định, việc áp dụng nguyên lý ngẫu nhiên đã giúp đưa ra được lời giải rất tốt, đôi khi là lời giải tối ưu. Sau này người ta phát triển nguyên lý này thành một phương pháp mới gọi là phương pháp Monté – Carlos. Và trên thực tế phương pháp này cũng giúp cho con người tìm được lời giải cho nhiều bài toán quan trọng mà trước đó vẫn chưa tìm được.

Cùng với sự ra đời và phát triển của máy tính, việc giải toán theo nguyên lý ngẫu nhiên ngày càng được chú trọng nghiên cứu và phát triển mạnh mẽ, trong số đó có một phương pháp nổi bật là phương pháp Genetic. Phương pháp này giải quyết bài toán bằng phương pháp mô phỏng quá trình chọn lọc và thích nghi của tự nhiên.

Nguyên lý mê cung

Nguyên lý này được áp dụng khi chúng ta không biết được chính xác “hình dạng” của lời giải mà phải xây dựng dần lời giải qua từng bước giống như tìm đường ra khỏi một mê cung. Giống như khi đang ở trong mê cung, khi phải lựa chọn đường đi tiếp theo từ một ngã rẽ ta buộc phải chọn một con đường bất kỳ để đi tiếp. Nếu đi vào ngõ cụt thì ta đánh dấu con đường đó và quay lại ngã rẽ và chọn hướng đi khác.

Một điều dễ nhận thấy ở phương pháp thử sai này đó là sự may rủi. Nghĩa là việc tìm được lời giải hay không, thời gian tìm kiếm lời giải tùy thuộc rất nhiều vào từng vấn đề. Cùng với đó, đối với một số bài toán, phương pháp này đòi hỏi một khối lượng thời gian khổng lồ cho việc thực hiện các phép thử để cho ra kết quả. Vì vậy, một phương pháp khác được sử dụng là các phương pháp Heuristic.

27

Các thuật toán Heuristic được xây dựng dựa trên một số nguyên lý đơn giản như vét cạn thông minh, nguyên lý tối ưu cục bộ (Greedy), nguyên lý hướng đích, nguyên lý sắp thứ tự, …

 Các phương pháp trí tuệ nhân tạo

Phương pháp thử - sai và Heuristic nói chung đều có một điểm chung cơ bản là dựa trên trí thông minh của con người để giải bài toán, máy tính chỉ đóng vai trò thực thi mà thôi. Phương pháp trí tuệ nhân tạo lại khác, nó dựa vào trí thông minh của máy tính. Trong phương pháp này người ta sẽ đưa vào máy tính trí thông minh nhân tạo giúp máy tính bắt chước một phần khả năng suy luận như con người để từ đó khi gặp một vấn đề, máy tính sẽ dựa trên những điều nó đã được “học” để tự đưa ra phương án giải quyết vấn đề.

Một ví dụ kinh điển được Hoàng Kiếm đưa ra cho phương pháp trí tuệ nhân tạo này là bài toán đong nước. Cụ thể như sau:

Có hai bình đựng nước là B5 có dung tích 5 lít và B8 có dung tích 8 lít. Hãy chỉ ra cách đong để có được 2 lít nước. Các thao tác có thể thực hiện được là:

1. Hứng đầy nước vào bình B5 hoặc B8. 2. Đổ hết nước trong một bình.

3. Đổ nước từ bình này sang bình kia cho đến lúc bình kia đầy. [7, tr 28]

Lời giải theo phương pháp trí tuệ nhân tạo được đưa ra như sau: Thay vì tìm lời giải bằng cách tìm trình tự đổ nước, người ta đưa ra các luật sau và để cho máy tính tự tìm lời giải thông qua các luật này.

Luật 1: B8 rỗng thì đổ đầy B8.

Luật 2: B5 đầy thì đổ hết nước trong B5.

Luật 3: Nếu B5 chưa đầy nước thì đổ nước trong bình B8 sang bình B5 cho đến lúc B5 đầy.

Dựa trên các luật được đưa ra ở trên, quá trình suy luận để đưa đến kết quả được mô tả như sau:

28 [8, tr 29]

Tuy rằng có thể giải quyết vấn đề - bài toán bằng phương pháp gián tiếp và trực tiếp, tuy nhiên chúng tôi vẫn không tìm thấy được trong các tài liệu kĩ thuật xây dựng thuật toán cho một bài toán.

Việc giải quyết các vấn đề - bài toán trên MT không thể không nhắc đến công cụ tính toán.

Một phần của tài liệu bước chuyển từ lời giải toán học sang lời giải tin học của một bài toán (Trang 26)