Thuật toán là gì?

Khám phá cách các thuật toán chạy trên thế giới

Thuật toán là tập hợp các hướng dẫn. Định nghĩa thực sự đơn giản. Một thuật toán có thể dễ dàng như đưa ra các hướng dẫn như thế này:

  1. Đi xuống phố
  2. Rẻ hướng bên phải đầu tiên
  3. Tìm ngôi nhà thứ hai ở bên trái
  4. Gõ cửa và
  5. Cung cấp gói.

Nhưng trong khi định nghĩa của thuật toán rất đơn giản, ý nghĩa thực tế và nó ảnh hưởng đến cuộc sống của chúng ta có thể khá phức tạp.

Ví dụ về thuật toán

Một ví dụ phổ biến của một thuật toán mà chúng ta sử dụng trong cuộc sống hàng ngày của chúng ta là một công thức. Bộ hướng dẫn này cung cấp cho chúng tôi tất cả các thành phần chúng tôi sẽ cần và hướng dẫn về những việc cần làm với những thành phần đó. Nghe có vẻ dễ dàng, phải không?

Nhưng nếu bạn không biết cốc được giữ ở đâu? Bạn cần một thuật toán để tìm nó. Bạn thậm chí có thể cần một thuật toán về cách sử dụng một cốc đo lường.

Vì vậy, trong khi một thuật toán là một tập hợp các hướng dẫn, nó cũng cần phải tính đến ai hoặc những gì sẽ giải thích những hướng dẫn đó. Ví dụ: Nếu bạn chỉ đường cho một người bạn nêu chi tiết cách đi từ nhà bạn đến cửa hàng tạp hóa gần nhất, bạn của bạn sẽ chỉ biết cách đến cửa hàng đó nếu họ biết nhà bạn ở đâu. Họ không có khả năng tìm thấy cửa hàng tạp hóa đặc biệt đó, nhà của một người bạn khác.

Đây là cách một thuật toán có thể đơn giản và phức tạp. Và khi chúng ta nói về thuật toán máy tính, sự hiểu biết những gì một máy tính có khả năng làm là một phần cơ bản của việc xây dựng các thuật toán.

Cách phân loại thuật toán đã tiến hóa

Một trong những thuật toán sớm nhất được tạo ra là thói quen sắp xếp bong bóng. Sắp xếp bong bóng là một phương pháp để sắp xếp số, chữ cái hoặc từ bằng cách lặp qua tập dữ liệu, so sánh từng tập hợp giá trị song song và hoán đổi chúng khi cần.

Vòng lặp này được lặp lại cho đến khi thuật toán có thể di chuyển qua toàn bộ danh sách mà không cần trao đổi bất kỳ thứ gì, có nghĩa là các giá trị được sắp xếp chính xác. Loại thuật toán này thường được gọi là thuật toán đệ quy vì nó tự lặp lại cho đến khi nó hoàn thành nhiệm vụ.

Thuật toán có thể trông đơn giản như:

  1. Chuyển đến giá trị đầu tiên.
  2. Kiểm tra giá trị đó với giá trị tiếp theo và vị trí hoán đổi nếu cần
  3. Chuyển đến giá trị tiếp theo và lặp lại so sánh.
  4. Nếu chúng ta đang ở cuối danh sách, hãy quay lại đầu trang nếu bất kỳ giá trị nào được hoán đổi trong vòng lặp.

Nhưng loại bong bóng không phải là cách phân loại hiệu quả nhất. Khi thời gian trôi qua và máy tính trở nên có khả năng thực hiện các tác vụ phức tạp một cách nhanh chóng, các thuật toán sắp xếp mới xuất hiện.

Một thuật toán như vậy quét qua danh sách đầu tiên và tạo ra một danh sách thứ hai của các giá trị được sắp xếp. Phương thức này chỉ thực hiện một lần truyền qua danh sách gốc và với mỗi giá trị, nó sẽ lặp qua danh sách thứ hai cho đến khi nó tìm đúng vị trí để đặt giá trị. Thông thường, nó hiệu quả hơn sử dụng phương pháp sắp xếp bong bóng.

Đây là nơi mà các thuật toán có thể trở nên thực sự điên rồ. Hoặc thực sự thú vị, tùy thuộc vào cách bạn nhìn vào nó.

Mặc dù phương pháp sắp xếp bong bóng được coi là một trong những phương pháp phân loại giá trị không hiệu quả nhất theo nhiều cách, nếu danh sách gốc được sắp xếp đúng cách, loại bong bóng có thể là một trong những cách hiệu quả nhất . Đó là bởi vì, trong trường hợp đó, thuật toán sắp xếp bong bóng sẽ đi qua danh sách một lần duy nhất và xác định nó được sắp xếp một cách chính xác.

Thật không may, chúng tôi không phải lúc nào cũng biết danh sách của chúng tôi có được phân loại hay không, vì vậy chúng tôi phải chọn thuật toán hiệu quả nhất để sử dụng trung bình trên một số lượng lớn danh sách.

Những gì chúng ta học từ Bubble Sort

Thuật toán Facebook và nhiều hơn nữa trong cuộc sống hàng ngày

Các thuật toán đang hoạt động giúp con người mỗi ngày. Khi bạn tìm kiếm trên web, thuật toán đang hoạt động để tìm kết quả tìm kiếm tốt nhất. Hãy hỏi điện thoại thông minh của bạn để biết chỉ đường và thuật toán sẽ quyết định tuyến đường tốt nhất để bạn thực hiện. Và khi bạn duyệt qua Facebook, một thuật toán sẽ quyết định bài đăng trên Facebook của bạn bè nào là quan trọng nhất đối với chúng tôi. (Hãy hy vọng bạn bè của chúng tôi không tìm ra một Facebook mà chúng tôi thích nhất!)

Nhưng suy nghĩ về mặt thuật toán có thể giúp chúng ta vượt xa cuộc sống máy tính của mình. Nó thậm chí có thể giúp chúng tôi xây dựng một chiếc bánh sandwich tốt hơn.

Giả sử tôi bắt đầu với hai lát bánh mì, rải mù tạt trên một lát và mayonnaise trên một lát khác. Tôi đặt một miếng pho mát lên bánh mì với sốt mayonnaise, một ít thịt giăm bông lên trên đó, một ít rau diếp, hai lát cà chua và sau đó phủ nó với miếng đó với mù tạt trên đó. Bánh sandwich ngon, phải không?

Chắc chắn nếu tôi ăn nó ngay lập tức. Nhưng nếu tôi để nó trên bàn một lúc, miếng bánh mì trên cùng đó có thể trở nên sũng nước khi hấp thụ một ít cà chua đó. Đó là một vấn đề mà tôi đã không dự đoán trước, và tôi có thể làm bánh mì sandwich trong nhiều năm trước khi nhận ra, nhưng một khi tôi làm, tôi có thể bắt đầu nghĩ cách thay đổi thuật toán của mình để xây dựng một chiếc bánh sandwich tốt hơn.

Ví dụ, tôi có thể loại bỏ cà chua. Nhưng tôi không muốn mất vị cà chua đó. Vì vậy, thay vào đó, tôi có thể cho cà chua vào bánh sandwich sau bánh mì và rau diếp. Điều này cho phép rau diếp tạo thành một hàng rào bảo vệ giữa cà chua và bánh mì.

Đây là cách thuật toán phát triển. Và một thuật toán không cần phải được chạy bởi một máy tính để trở thành một thuật toán. Một thuật toán là một quá trình, và các quá trình là tất cả xung quanh chúng ta.