1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giải pháp để giải một số bài toán trong tin học bằng cách vận dụng những kiến thức đã có thông qua 8 bước ở trường THPT

16 96 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 165,5 KB

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

Nội dung

Do đó mục đích của sáng kiến kinh nghiệm này là cung cấp những hiểu biết nền tảng trong việc thiết kế một chương trình máy tính để thấy rõ được sự cần thiết của việc phân tích, lựa chọn

Trang 1

1 MỞ ĐẦU

Hạt nhân của chương trình máy tính là sự lưu trữ và xử lý thông tin Việc tổ chức dữ liệu như thế nào có ảnh hưởng rất lớn đến cách thức xử lý dữ liệu đó, cũng như tốc độ thực thi và sự chiếm dụng bộ nhớ của chương trình Do đó mục đích của sáng kiến kinh nghiệm này là cung cấp những hiểu biết nền tảng trong việc thiết kế một chương trình máy tính để thấy rõ được sự cần thiết của việc phân tích, lựa chọn cấu trúc dữ liệu phù hợp cho từng bài toán cụ thể

Thứ đầu tiên cần nghĩ tới, đó là tư duy giải quyết vấn đề - thứ mà bất kỳ ai học lập trình nên có (không có cũng không sao, nhưng rất cần nếu muốn gắn bó

và yêu thích môn Tin học) Đừng coi thường, cũng đừng đánh giá cao việc bản thân có tốt thuật toán hay không không cần thuật toán để có thể học trong trường THPT, nhưng có rất nhiều môn và lĩnh vực đòi hỏi, thậm chí là đòi hỏi rất cao việc bạn có thể sử dụng tốt thuật toán như: toán, lý, hoá, đặc biệt là môn Tin học Việc giỏi thuật toán cũng giúp chúng ta có tư duy giải quyết vấn đề tốt, tìm hướng giải quyết nhanh hơn, tìm được giải pháp tối ưu hơn cũng như hiệu suất học tập và làm việc các môn học khác,

Tiếp theo thì, để có thể học tốt môn Tin học trong trường THPT nói chung và các kỳ thi học sinh giỏi cấp trường, cấp huyện, cấp tỉnh, cấp quốc gia đều phải sử dụng một ngôn ngữ lập trình để giải các bài toán với các test về thuật toán Các

kỳ thi đó họ test chúng ta khả năng giải quyết vấn đề, khả năng trình bày ý tưởng

và kiến thức về các giải thuật cơ bản để đánh giá khả năng Và ngay cả khi họ không đánh giá chúng ta qua thuật toán, biết nó cũng là một điểm cộng

Tuy nhiên, trong quá trình giảng dạy và truyền đạt môn Tin học 10, giáo viên

đã gặp không ít khó khăn trong khi giảng dạy bài 4: “Bài toán và thuật toán”, cũng như học sinh, các em đa số không hiểu, khó tiếp thu, hoặc các em chỉ có thể tìm được Input, Output của bài toán mà không thể nào tự tạo thuật toán cho bài toán Với thời lượng 5 tiết như phân phối chương trình thì thật khó để HS nắm bắt được kiến thức hoặc nếu có, các em chỉ cảm thấy mơ hồ, khó hiểu Khi giảng dạy bài số 6: “các bước giải bài toán trên máy tính” sách giáo khoa Tin học 10, có trình bày các bước để giải bài toán trên máy tính nhưng học sinh khá

mơ mồ Chính vì vậy, để giúp giáo viên, học sinh dễ dàng hơn trong quá trình dạy và học, qua khảo sát, tìm hiểu và đúc kết tôi đã nghĩ đến cần phải có một giải pháp để học sinh dễ dàng tiếp cận bài toán và giải quyết bài toán Ở đây, trong phạm vi đề tài này tôi chỉ mạo muội xin trình bày một vấn đề rất nhỏ đó là

“Giải pháp để giải một số bài toán trong Tin học bằng cách vận dụng những kiến thức đã có thông qua 8 bước ở trường THPT” mà tôi đã triển khai và áp

dụng tại trường THPT hà Trung thành công

Trang 2

1.1 Lý do chọn đề tài

Như chúng ta đã biết, bài toán trong tin học thường có dữ liệu vào, dữ liệu ra và yêu cầu về thời gian và hạn chế về dữ liệu nên việc xác định bài toán khó và rất dài Hơn nữa khi tính thời gian có liên quan đến bài toán thì ngay những học sinh học có tư duy tốt vẫn không có thể đưa ra giải pháp đúng đắn đến kết quả cuối cùng Mà yêu cầu của các bài toán tin học là nhanh về thời gian

và chính xác về kết quả thì lại là yêu cầu đặt lên hàng đầu Vì vậy trong các bài toán có sự ràng buộc về mặt thời gian hay gặp hạn chế dữ liệu quả là thách thức không nhỏ đối với học sinh

1.2 Mục đích nghiên cứu:

Từ những lý do trên dẫn đến việc học sinh rất lung túng giải bài toán trong tin học Đối với học sinh giỏi các em khi giải các bài toán này cũng phải mất rất nhiều thời gian để chỉnh sửa và không chạy hết được hết các test, Thậm chí có những học sinh mày mò giải ra nghiệm của bài toán mà không biết còn những trường hợp nào chấp nhận nghiệm nào, loại nghiệm nào - và cuối cùng vẫn phải chọn phương án là làm bừa -giành thời gian dành để giải bài toán coi là

bỏ phí

Từ thực trạng trên, trong quá trình giảng dạy để giúp học sinh có cái nhìn trực quan, biến một bài toán nhìn phức tạp trở nên đơn giản, tôi đã mạnh dạn đưa ra “Giải pháp để giải một số bài toán trong tin học bằng cách vận dụng

những kiến thức đã có” được tôi ứng dụng thành công tại trường THPT Hà

Trung như trong sáng kiến kinh nghiệm tôi sẽ trình bày sau đây

1.3 Đối tượng và phạm vi nghiên cứu:

Trong quá trình nghiên cứu học hỏi và giảng dạy chương trình Tin học lớp

10, cụ thể là bài 4 “bài toán và thuật toán” sách giáo khoa Tin học 10 Tôi thấy

các phần này có rất nhiều ứng dụng trong đời sống thực tế và có liên quan tới

nhiều môn học khác, đặc biệt là toán học Còn ở nội dung bài 6 “Giải bài toán trên máy tính” sách giáo khoa tin học 10 có trình bày tuần tự các bước giải bài

toán, nhưng học sinh khá mơ hồ khi áp dụng vào giải toán

Trong suốt quá trình giảng dạy tôi thấy một sợi dây xuyên suốt trong quá trình tiếp cận và giải các bài toán đó cần phải tiến hành theo các bước giải bài toán trong tin học Nhưng trong thực tế lại rất khó tưởng tượng đối với học sinh, cách giải và lập luận của các em trở nên rời rạc thiếu logic Đặc biệt khi gặp một bài toán có tính thời gian và giới hạn dữ liệu thì học sinh trở nên lung túng không có một phương hướng cụ thể, dẫn đến nếu gặp bài toán dễ thì có thể giải còn bài toán khó thì đành chịu, mất phương hướng tư duy

Trang 3

Trong đa số các trường hợp đó, với những học sinh giỏi thì việc các em nghĩ đến đầu tiên là sử dụng các câu lệnh hoặc các đoạn chương trình có sẵn học thuộc lòng, nhưng khi sử dụng thì có những bài các em vẫn không giải được hoặc không vét hết được các test mặc dù xây dựng chương trình đúng- vì sao vậy? Đó là bởi các e chỉ lập trình theo thói quen Còn đối với các em học sinh khá thì chỉ có thể giải các bài toán đơn giản của dạng này

1.4 Cách tiếp cận và phương pháp nghiên cứu

Khi nghiên cứu và trực tiếp giảng dạy phần này cho các đối tượng học sinh khác nhau, tôi đã có một suy nghĩ là tại sao không tìm hiểu cách giải đơn giản hơn để các đối tượng học sinh yêu tin học đặc biệt là lập trình và có kiến toán học đều có thể có một phương pháp pháp giải hợp lý, xúc tích cho bài toán

Qua thực tế giảng dạy, tôi thấy bắt đầu khi mới đề cập tới giải pháp thì học sinh sẽ thấy khó hiểu nhưng khi đã hiểu giải pháp rồi thì các em sẽ không có

ý nghĩ đó nữa Chỉ cần là học sinh khá có kiến thức toán tốt thì hoàn toàn có thể

áp dụng thành thạo phương pháp này, còn đối với học sinh trung bình thì hiểu và

áp dụng được đa số các bài toán thường gặp, riêng đối với học sinh giỏi có thể giải các bài toán thuộc dạng khó bằng phương pháp tôi đưa ra

Sau đây, tôi xin giới thiệu “Giải pháp để giải một số bài toán trong tin học bằng cách vận dụng các kiến thức đã có thông qua 8 bước ở trường THPT”

mà tôi đã ứng dụng vào giảng dạy một số bài toán cụ thể của phương pháp này thông qua các bài toán thực tế tại các lớp 10A, 10B, 10C, 10D ở trường THPT

Hà Trung nơi tôi đang cống hiến và công tác từ năm 2008 đến nay, còn khả năng ứng dụng rộng rãi của phương pháp này xin để cho các đồng nghiệp áp dụng rồi kết luận

Trang 4

2 NỘI DUNG 2.1 Cơ sở lý luận

Lập trình là một môn khó và lạ với học sinh, các em phải vừa biết suy luận giỏi như toán, lại còn phải biết cách trình bày từng bước một cách logic Các em quen với cách áp dụng một quy luật, một công thức mà chưa quen với việc phải thực hiện từng bước logic, khoa học sao cho máy tính hiểu, chính vì vậy các em cảm thấy thật mơ hồ trong quá trình tiếp thu

2.2 Thực trạng của vấn đề trước khi áp dụng giải pháp

Học sinh xem nhẹ môn học nên chưa thật sự cố gắng, nếu thấy khó quá thì bỏ qua, không hợp tác với giáo viên để giải quyết những vấn đề khó

Do học sinh mới làm quen với môn Tin học và việc xây dựng thuật toán từ bài toán, dùng máy tính để giải bài toán còn xa lạ, bỡ ngỡ nên chưa hình thành kỹ năng khi đứng trước một bài toán Nhiều học sinh chưa chủ động, chưa có thái

độ tích cực xây dựng bài vì nội dung quá khó và lạ

Đa số giáo viên trẻ, kinh nghiệm chưa nhiều, chủ yếu tự tìm tòi, đúc kết kinh nghiệm, không được học hỏi nhiều từ giáo viên giỏi có nhiều kinh nghiệm Chưa có giải pháp tích cực để tạo hứng thú thu hút học sinh tham gia vào hoạt động xây dựng bài

Giúp học sinh hiểu rõ hơn về khái niệm “bài toán” và “thuật toán”

Giúp học sinh có cái nhìn trực quan, sinh động hơn về môn Tin học

Rèn học sinh có khả năng tư duy, sáng tạo, đam mê môn học

2.3 Giải pháp đưa ra nhằm giải quyết vấn đề

Bước 1: Xác định bài toán:

Input  ->  Process –> Output (Dữ liệu vào –> Xử lý –> Kết quả ra).

Việc xác định bài toán tức là xác định xem ta phải giải quyết vấn đề gì?, với giả thiết nào đã cho và lời giải cần đạt những yêu cầu gì Khác với các bài toán thuần túy trong toán học là chỉ cần xác định rõ giả thiết và kết luận chứ không cần xác định yêu cầu về lời giải, đôi khi những bài toán tin học trong thực

tế chỉ cần tìm lời giải tốt tới mức nào đó, thậm chí là chỉ ở mức chấp nhận được (nếu lời giải tốt nhất đòi hỏi quá nhiều thời gian và chi phí)

Trang 5

Ví dụ 1: cho 2 số tự nhiên a, b không đồng thời bằng không Hãy tìm ước

chung lớn nhất của 2 số a và b

Khi gặp loại bài toán này thì ta có thể xác định ngay được bài toán như sau:

Input: 2 số tự nhiên a, b không đồng thời bằng 0.

Output: ước số chung lớn nhất của a, b.

Thực tế không phải bài toán nào người ta cũng nói rõ như trên mà người

ta sẽ lấy một vấn đề nào đó trong cuộc sống, khi đó bắt buộc chúng ta phải xác định lại bài toán quy bài toán đó thành một bài toán trong tin học

Ví dụ 2: Một dự án có n người tham gia thảo luận, họ muốn chia thành

các nhóm và mỗi nhóm thảo luận riêng về một phần của dự án Nhóm có bao nhiêu người thì được trình lên bấy nhiêu ý kiến Nếu lấy ở mỗi nhóm một ý kiến đem ghép lại thì được một bộ ý kiến triển  khai dự án Hãy tìm cách chia để số

bộ ý kiến cuối cùng thu được là lớn nhất

Rõ ràng đây là một bài toán thực tế trong cuộc sống, nhưng chúng ta sẽ xác định bài toán thực tế trên thành một bài toán trong tin học như sau: Cho một

số nguyên dương n, tìm cách phân tích n thành tổng các số nguyên dương sao cho tích các số đó là lớn nhất

Input: một số nguyên dương N

Output: Tổng các số nguyên dương có tích lớn nhất

  Bước 2: Đưa ra các ví dụ có thể xảy ra.

Các ví dụ thường là cách tiếp cận cách giải quyết bài toán nhanh nhất, theo

đó đưa ra những thuật toán khả thi cho bài toán Có 2 điều cần lưu ý khi tạo ra các ví dụ tốt cho các bài toán đó là:

+ Dữ liệu phải lớn

+ Không trường hợp đặc biệt

Đừng tạo ra những ví dụ quá nhỏ vì sẽ không thể hiện được vấn đề trọng tâm của bài toán Tuy không phải là không được nhưng mà không nên Vì các ví

dụ của chúng ta nên là tổng quan nhất để có thể nắm được cốt lõi vấn đề, chúng

ta nên hạn chế lấy các ví dụ:

+ Có chứa các trường hợp đặc biệt

Trang 6

+ Chứa một trường hợp thỏa mãn

+ Chứa trường hợp ngoại lệ,

Ví dụ: Cho 2 mảng đã được sắp xếp và các phần tử là duy nhất Tìm các phần tử chung của cả 2 mảng?

Nếu ta lấy mảng A = [3,5,7,14] B = [3,6,10,30] thì dữ liệu quá nhỏ và đây

là trường hợp đặc biệt với 2 mảng có số phần tử như nhau và chỉ có 1 phần tử chung chính vì vậy ta nên lấy ví dụ như sau: A = [3,5,7,10,15,25,30] B = [3,6,8,10,13]

Bước 3: Tìm cấu trúc dữ liệu biểu diễn thuật toán.

Khi giải một bài toán, ta cần phải định nghĩa tập hợp dữ liệu để biểu diễn tình trạng cụ thể Việc lựa chọn này tùy thuộc vào vấn đề cần giải quyết và những thao tác sẽ tiến hành trên dữ liệu vào Có những thuật toán chỉ thích ứng với một cách tổ chức dữ liệu nhất định, đối với những cách tổ chức dữ liệu khác thì sẽ kém hiệu quả hoặc không thể thực hiện được Chính vì vậy nên bước xây dựng cấu trúc dữ liệu không thể tách rời bước tìm kiếm thuật toán giải quyết vấn

đề Khi tìm cấu trúc dữ liệu biểu diễn thuật toán ta dựa trên các tiêu chuẩn sau:

+ Cấu trúc dữ liệu trước hết phải biểu diễn được đầy đủ các thông tin nhập

và xuất của bài toán

+ Cấu trúc dữ liệu phải phù hợp với các thao tác của thuật toán mà ta lựa chọn để giải quyết bài toán

+ Cấu trúc dữ liệu phải cài đặt được trên máy tính với ngôn ngữ lập trình đang sử dụng

Khi tìm cấu trúc dữ liệu cho bài toán phải thật sự chú ý đến vấn đề được đưa ra Mỗi bài toán luôn đưa ra cho chúng ta những thông tin cần thiết để có thể giải quyết nó, một trong số chúng (có thể) mang đến cho chúng ta định hướng để

có thể có 1 thuật toán tối ưu nhất có thể Vì thế, hãy đảm bảo rằng bản thân đã không bỏ qua bất cứ một chi tiết quan trọng nào được đưa ra, nếu cần, hãy đánh dấu chúng lại Đặc biệt chú ý những ràng buộc về input và output, vì chúng cũng rất quan trọng Có thể với một bài toán như nhau, nhưng với ràng buộc đầu vào khác nhau sẽ mang lại những cách giải quyết khác nhau cho bài toán ấy Kiểu dữ liệu hay phạm vi của biến cũng thường khiến cho chương trình của chúng ta trục trặc hoặc không đạt được những gì chúng ta mong muốn

Ví dụ 1: Tìm tổng, hiệu, tích, thương của 2 số

Trang 7

Bài toán có thể giải quyết đơn giản là return lại phép cộng, trừ, nhân, chia của 2 số mà thôi Nhưng nếu như input là 2 số có ít nhất vài chục chữ số, thứ mà chúng ta không thể dùng biến để lưu trữ nó dưới dạng số (trong ngôn ngữ lập trình bạn dùng) thì sao? Hoặc giả, kết quả của nó vượt qua giới hạn cho phép?

Mỗi bài toán đưa ra sẽ không có thông tin nào dư thừa cả, chúng không phải là những câu đánh đố, những câu bẫy trong các bài thi Nếu như giải quyết bài toán mà không cần dùng đến dữ liệu nào đấy, có thể, nó là chìa khóa để bạn

có thể tối ưu thuật toán của mình

Ví dụ 2: Cho 2 mảng đã được sắp xếp và các phần tử là duy nhất Tìm các

phần tử chung của cả 2 mảng?

Chắc chắn ta có thể giải quyết nó mà không cần phải quan tâm chúng có được sắp xếp hay chưa (phần tử duy nhất thì có) bằng cách dùng 2 vòng lặp và so sánh lần lượt các phần tử của 2 mảng với nhau Nhưng dữ kiện "mảng đã được sắp xếp" lại khá quan trọng để chúng ta có thể tối ưu thuật toán của mình

Thực tế, ta nên xét một vài trường hợp cụ thể, thông qua đó hiểu được bài toán

rõ hơn và thấy được các thao tác cần phải tiến hành Đối với những bài toán đơn giản, đôi khi chỉ cần qua ví dụ là ta có thể đưa về một bài toán quen thuộc để giải

Bước 4: Tìm Thuật Toán.

Thuật toán là một hệ thống chặt chẽ và rõ ràng các quy tắc nhằm xác định một dãy thao tác trên cấu trúc dữ liệu sao cho: với một bộ dữ liệu vào, sau

số hữu hạn bước thực hiện các thao tác đã chỉ ra, ta đạt được mục tiêu đã định.

Thuật toán thông thường có 5 đặc trưng sau:

- Tính đơn nghĩa : Ở mỗi bước của thuật toán, các thao tác phải hết sức rõ

ràng, không gây nên sự nhập nhằng, lộn xộn, tùy tiện, đa nghĩa

- Tính dừng: Thuật toán không được rơi vào quá trình vô hạn, phải dừng

lại và cho kết quả sau một số hữu hạn bước

- Tính đúng: Sau khi thực hiện tất cả các bước của thuật toán theo đúng

quá trình đã định, ta phải được kết quả mong muốn với mọi bộ dữ liệu đầu vào Kết quả đó được kiểm chứng bằng yêu cầu bài toán

- Tính khả dụng: Thuật toán phải dễ sửa lỗi để thích ứng được với bất kỳ

bài toán nào trong một lớp các bài toán và có thể làm việc trên các dữ liệu khác nhau

Trang 8

- Tính khả thi: Kích thước phải đủ nhỏ: Ví dụ: một thuật toán sẽ có tính

hiệu quả bằng 0 nếu lượng bộ nhớ mà nó yêu cầu vượt quá khả năng lưu trữ của

hệ thông máy tính

Thuật toán phải chuyển được thành chương trình: Ví dụ thuật toán yêu cầu phải biểu diễn được số vô tỷ với độ chính xác tuyệt đối là không thể thực hiện được với các hệ thống máy tính hiện nay

Thuật toán phải được máy tính thực hiện trong thời gian cho phép, điều này khác với lời giải toán(chỉ cần chứng minh và kết thúc sau một số hữu hạn bước) Ví dụ: chương trình sắp xếp thời khóa biểu cho một học kỳ thì không thể cho máy tính chạy tới học kỳ sau mới có kết quả được

Ví dụ: cho 2 số tự nhiên a, b không đồng thời bằng không Hãy tìm Ước

chung lớn nhất của 2 số a và b

Thuật toán sẽ tiến hành mô tả như sau (thuật toán Euclide):

- Bước 1: (Input):  Nhập 2 số tự nhiên a,

b

- Bước 2:  Nếu b > 0 thì chuyển sang

bước 3, nếu không thì bỏ qua bước 3,

chuyển sang bước 4

- Bước 3:  Đặt  r=amodb, đặt a=b, b=r, 

quay trở lại bước 2

- Bước 4:  (Output): kết luận ước số chung lớn nhất phải tìm là giá trị của a Kết thúc thuật toán

Bước 5: Vét cạn

Nếu như ở bước số 4 không có một hướng giải quyết nào khả thi cho bài toán, hoặc ý tưởng đưa ra nó khá là tệ, chạy chậm, tốn tài nguyên,…hãy dùng thuật toán vét cạn Thuật toán vét cạn là thuật toán sẽ liệt kê hết tất cả các trường hợp có thể xảy ra (dù phù hợp hay không)

Thường thì nó cũng vẫn sẽ khiến cho chương trình chạy rất chậm, nhưng

“méo mó có hơn không”, ít ra nó sẽ giúp bạn giải quyết những input nhỏ chính xác Và từ đấy, bạn sẽ lần mò theo phương hướng đã được vạch ra để có thể tiếp cận đến một hướng giải quyết sáng suốt và tôí ưu hơn

Khi mới dạy và học ngay cả giáo viên cũng như học sinh mà không tìm ra được thuật toán tối ưu và đúng đắn như ở bước 4 thì mới áp dụng đến bước này,

Nhập a, b

b>0

r:=a mod b a=b b=r

Yes

No

UCLN=

a

Trang 9

nhưng khi đã làm quen dần với các bước mà tôi đã áp dụng thì bước này chỉ đừng lại ở mức độ nháp trên giấy hoặc suy nghĩ trong đầu để có thể tối ưu cũng như nghĩ ra phương hướng giải quyết cho bài toán, chứ đừng code ngay

Bước 6: Tối ưu thuật toán

Khi một thuật toán đã hình thành thì ta không xét đến việc chứng minh thuật toán đó mà chỉ chú trọng đến việc áp dụng các bước theo sự hướng dẫn sẽ

có kết quả đúng Việc chứng minh tính đầy đủ và tính đúng của các thuật toán phải được tiến hành xong trước khi có thuật toán Nói rõ hơn, thuật toán có thể chỉ là việc áp dụng các công thức hay quy tắc, quy trình đã được công nhận là đúng hay đã được chứng minh về mặt toán học

"Thuật toán" hiện nay thường được dùng để chỉ thuật toán giải quyết các vấn đề tin học Hầu hết các thuật toán tin học đều có thể viết thành các chương trình máy tính mặc dù chúng thường có một vài hạn chế (vì khả năng của máy tính và khả năng của người lập trình) Trong nhiều trường hợp, một chương trình khi thiết kế bị thất bại là do lỗi ở các thuật toán mà người lập trình đưa vào

là không chính xác, không đầy đủ, hay không ước định được trọn vẹn lời giải của vấn đề Tuy nhiên cũng có một số bài toán mà hiện nay người ta chưa tìm được lời giải triệt để, những bài toán ấy gọi là những bài toán NP-không đầy đủ Như trên,thuật toán ngoài ra còn chỉ những phương pháp đem lại được kết quả một cách tối ưu,giảm lượng tài nguyên bỏ ra để đạt được.Những phương pháp này có thể được rút ra từ thực nghiệm và có thể giải được bằng toán học hoặc không,tuy nhiên mọi thuật toán đáp ứng tính logic tối hậu của tự nhiên mà là

nguyên do của nhiều loại logic mờ Ví dụ: logic mờ tồn tại trong trạng thái chỉnh

lưu của transistor mà trở nên chuẩn xác trong việc tính toán nhờ sự tái chuẩn hoá mà làm các đặc tính trung gian vi mô của transistor không còn quan yếu ở thang lớn hơn

Đây thường là bước mà chúng ta sẽ dành thời gian nhiều nhất trong quá trình "giải toán" của bạn Hãy ghi nhớ luôn luôn quay lại bước này khi đã code xong nếu thực sự nghiêm túc trong chuyện rèn luyện Nó giúp hình thành một thói quen tối ưu hóa các dòng code của mình, đồng thời nó còn giúp tối ưu hóa ý tưởng để khi gặp lại dạng bài này một lần nữa, chúng ta có thể "xử đẹp" nó một cách gọn gàng và nhanh chóng nhất Thời gian bỏ ra để tối ưu code và thuật toán

sẽ bù đắp lại rất rất nhiều thời gian cho sau này Tất nhiên, cũng đừng nên quá sa

đà mà bỏ quên những yếu tố quan trọng khác nữa, hãy từ bỏ đúng lúc và tìm sự trợ giúp cần thiết nếu mất quá nhiều thời gian cho nó

Hãy biết chính xác điều muốn thực hiện với những dòng code Đừng có bỏ qua bước này rồi lao vào code luôn để rồi tạo ra một đống code hổ lốn, rác, bốc mùi và khiến mắc kẹt trong đó Nhớ rằng, cần tạo nên thói quen nhỏ từng bước

để có thể xây dựng nên những thói quen lớn trong tương lai Lúc đầu sẽ mất thời

Trang 10

gian, nhưng sau này nó sẽ trở thành bản năng như việc hít thở vậy, không cố làm

nó, mà là nó tự làm Khi tối ưu thuật toán hãy xác định thật rõ ràng:

- Sử dụng những biến gì (chú ý cách đặt tên- rất quan trọng), cấu trúc dữ liệu nào?

- Cách và thời điểm chúng thay đổi (rất hữu dụng cho người mới để có thể nắm được luồng đi của chương trình)?

- Cấu trúc code mà bạn muốn trình bày nó như thế nào? Ví dụ như: mình sẽ tạo những hàm, method nào? Các vòng lặp như nào? Sử dụng vòng lặp gì?

- Hãy nhớ tìm hiểu thêm về những yếu tố như độ phức tạp thuật toán, phạm

vi biến, bộ nhớ, Những điều này có thể ảnh hưởng không nhỏ đến chương trình của bạn Và nếu muốn có thể tối ưu tốt các thuật toán cũng như những dòng code của mình, kiến thức này là rất cần thiết

Việc tối ưu thuật toán được thực hiện trước khi viết chương trình, không nên viết tới đâu tối ưu mã đến đó (bởi chương trình có mã tối ưu thường phức tạp và khó kiểm soát)

Việc tối ưu thuật nên dựa theo các tiêu chuẩn chính sau:

- Tính chính xác: để đảm bảo kết quả tính toán hay các thao tác mà máy

tính thực hiện được là chính xác

- Tính rõ ràng: Thuật toán phải được thể hiện bằng các câu lệnh minh

bạch; các câu lệnh được sắp xếp theo thứ tự nhất định

- Tính khách quan: Một thuật toán dù được viết bởi nhiều người trên nhiều

máy tính vẫn phải cho kết quả như nhau

- Tính phổ dụng: Thuật toán không chỉ áp dụng cho một bài toán nhất định

mà có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau

- Tính kết thúc: Thuật toán phải gồm một số hữu hạn các bước tính toán.

Bước 7: Lập Trình (Programming)

Sau khi đã có thuật toán và thuật toán đã được ta tối ưu việc tiếp theo phải lập trình để thực hiện thuật toán đó Muốn lập trình đạt hiệu quả cao, cần phải có

kỹ thuật lập trình tốt Kỹ thuật lập trình tốt thể hiện ở kỹ năng viết chương trình, khả năng gỡ rối và thao tác nhanh

Ngày đăng: 14/07/2020, 12:20

TỪ KHÓA LIÊN QUAN

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