Thuật toán máy tính là gì và chúng hoạt động như thế nào?
Trừ khi bạn học toán hoặc lập trình, từ thuật toán thuật thuật có thể là tiếng Hy Lạp đối với bạn, nhưng đó là một trong những khối xây dựng của mọi thứ bạn đang sử dụng để đọc bài viết này. Đây là một lời giải thích nhanh về những gì họ đang có, và cách họ làm việc.
Tuyên bố miễn trừ trách nhiệm: Tôi không phải là giáo viên toán hoặc khoa học máy tính, vì vậy không phải tất cả các thuật ngữ tôi sử dụng là kỹ thuật. Đó là bởi vì tôi đang cố gắng giải thích mọi thứ bằng tiếng Anh đơn giản cho mọi người không hoàn toàn thoải mái với môn toán. Điều đó đang được nói, có một số toán học liên quan, và đó là điều không thể tránh khỏi. Những người đam mê toán học, vui lòng sửa hoặc giải thích rõ hơn trong các bình luận, nhưng xin vui lòng, giữ cho nó đơn giản cho sự không phù hợp về mặt toán học giữa chúng ta.
Hình ảnh bởi Ian Ruotsala
Thuật toán là gì?
Từ 'thuật toán' có từ nguyên tương tự như 'đại số', ngoại trừ việc nó đề cập đến chính nhà toán học Ả Rập, al-Khwarizmi (chỉ là một mẩu tin thú vị). Một thuật toán, dành cho những người không lập trình trong số chúng ta, là một tập hợp các hướng dẫn lấy đầu vào, A và cung cấp đầu ra, B, thay đổi dữ liệu liên quan theo một cách nào đó. Các thuật toán có rất nhiều ứng dụng. Trong toán học, họ có thể giúp tính toán các hàm từ các điểm trong tập dữ liệu, trong số những thứ nâng cao hơn nhiều. Ngoài việc sử dụng trong lập trình, họ đóng vai trò chính trong những việc như nén tệp và mã hóa dữ liệu.
Một bộ hướng dẫn cơ bản
Giả sử bạn của bạn đang gặp bạn trong một cửa hàng tạp hóa và bạn đang hướng dẫn anh ấy về phía bạn. Bạn nói những thứ như Hồi đi vào qua cánh cửa bên phải, Tháp Viết vượt qua phần cá ở bên trái, và nếu bạn thấy sữa, bạn đã vượt qua tôi. Thuật toán thuật toán hoạt động như thế. Chúng tôi có thể sử dụng sơ đồ để minh họa các hướng dẫn dựa trên các tiêu chí mà chúng tôi biết trước hoặc tìm hiểu trong quá trình.
(hình ảnh có tiêu đề ED Icebreaking Routine ED EDIT: lịch sự của Trigger và Freewheel)
Từ BẮT ĐẦU, bạn sẽ đi xuống con đường, và tùy thuộc vào những gì xảy ra, bạn sẽ theo dòng chảy của Google đến kết quả cuối cùng. Sơ đồ khối là các công cụ trực quan có thể hiểu một cách dễ hiểu hơn một bộ hướng dẫn được sử dụng bởi máy tính. Tương tự, các thuật toán giúp làm tương tự với các mô hình dựa trên toán học hơn.
Đồ thị
Hãy sử dụng biểu đồ để minh họa các cách khác nhau mà chúng tôi có thể đưa ra hướng dẫn.
Chúng ta có thể biểu thị biểu đồ này như một kết nối giữa tất cả các điểm của nó. Để tái tạo hình ảnh này, chúng tôi có thể cung cấp một bộ hướng dẫn cho người khác.
Phương pháp 1
Chúng ta có thể biểu diễn điều này dưới dạng một loạt các điểm và thông tin sẽ tuân theo dạng chuẩn của đồ thị = (x1, y1), (x2, y2), Lỗi, (xn, yn).
đồ thị = (0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1)
Thật dễ dàng để vẽ từng điểm, từng điểm một và kết nối chúng với điểm trước đó. Tuy nhiên, hãy tưởng tượng một biểu đồ có hàng ngàn điểm hoặc nhiều phân đoạn sẽ diễn ra theo mọi cách. Danh sách đó sẽ có rất nhiều dữ liệu, phải không? Và sau đó phải kết nối từng người một, có thể là một nỗi đau.
Phương pháp 2
Một điều khác chúng ta có thể làm là đưa ra điểm bắt đầu, độ dốc của đường giữa điểm đó và điểm tiếp theo và chỉ ra nơi mong đợi điểm tiếp theo bằng cách sử dụng dạng đồ thị tiêu chuẩn = (điểm bắt đầu, [m1, x1, h1 ], Re, [mn, xn, hn]. Ở đây, biến 'm' đại diện cho độ dốc của đường, 'x' đại diện cho hướng để đếm (cho dù là x hay y) và 'h' cho bạn biết làm thế nào Bạn cũng có thể nhớ vẽ theo một điểm sau mỗi chuyển động.
đồ thị = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 1], [-3, x, 1], [-3, x, 1]
Bạn sẽ kết thúc với cùng một biểu đồ. Bạn có thể thấy rằng ba thuật ngữ cuối cùng trong biểu thức này là giống nhau, vì vậy chúng tôi có thể cắt giảm điều đó bằng cách chỉ nói lặp lại ba lần điều đó theo cách nào đó. Giả sử bất cứ khi nào bạn thấy biến 'R' xuất hiện, điều đó có nghĩa là lặp lại điều cuối cùng. Chung ta co thể lam được việc nay:
đồ thị = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 1], [R = 2]
Điều gì xảy ra nếu các điểm riêng lẻ không thực sự quan trọng và chỉ có biểu đồ mới thực hiện? Chúng tôi có thể hợp nhất ba phần cuối như vậy:
đồ thị = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 3]
Nó rút ngắn mọi thứ lên một chút so với trước đây.
Phương pháp 3
Hãy thử làm theo cách khác.
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2,5x-7,5, 5≤x≤7
y = -3x + 29, 7≤x≤8
y = -3x + 29, 8≤x≤9
y = -3x + 29, 9≤x≤10
Ở đây chúng tôi có nó trong các thuật ngữ đại số thuần túy. Một lần nữa, nếu các điểm không quan trọng và chỉ có biểu đồ, chúng ta có thể hợp nhất ba mục cuối cùng.
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2,5x-7,5, 5≤x≤7
y = -3x + 29, 7≤x≤10
Bây giờ, phương pháp bạn chọn phụ thuộc vào khả năng của bạn. Có thể bạn rất giỏi với toán học và đồ thị, vì vậy bạn chọn tùy chọn cuối cùng. Có thể bạn giỏi điều hướng, vì vậy bạn chọn tùy chọn thứ hai. Tuy nhiên, trong lĩnh vực máy tính, bạn đang thực hiện nhiều loại nhiệm vụ khác nhau và khả năng của máy tính không thực sự thay đổi. Do đó, các thuật toán được tối ưu hóa cho các nhiệm vụ mà chúng hoàn thành.
Một điểm quan trọng khác cần lưu ý là mỗi phương pháp đều dựa vào một khóa. Mỗi bộ hướng dẫn là vô ích trừ khi bạn biết phải làm gì với chúng. Nếu bạn không biết rằng bạn phải vẽ từng điểm và kết nối các dấu chấm, tập hợp điểm đầu tiên không có nghĩa gì. Trừ khi bạn biết ý nghĩa của từng biến trong phương thức thứ hai, bạn sẽ không biết cách áp dụng chúng, giống như khóa cho mật mã. Khóa đó cũng là một phần không thể thiếu trong việc sử dụng các thuật toán và thông thường, khóa đó được tìm thấy trong cộng đồng hoặc thông qua một tiêu chuẩn.
Nén tệp
Khi bạn tải xuống một tệp .zip, bạn trích xuất nội dung để bạn có thể sử dụng bất cứ thứ gì bên trong nó. Ngày nay, hầu hết các hệ điều hành có thể đi sâu vào các tệp .zip giống như chúng là các thư mục bình thường, làm mọi thứ trong nền. Trên máy Windows 95 của tôi hơn một thập kỷ trước, tôi đã phải trích xuất mọi thứ bằng tay trước khi tôi có thể nhìn thấy bất cứ thứ gì ngoài tên tệp bên trong. Đó là bởi vì những gì được lưu trữ trên đĩa dưới dạng tệp .zip không ở dạng có thể sử dụng được. Hãy nghĩ về một chiếc ghế kéo ra. Khi bạn muốn sử dụng nó như một chiếc giường, bạn phải loại bỏ đệm và mở ra, nó chiếm nhiều không gian hơn. Khi bạn không cần nó, hoặc bạn muốn vận chuyển nó, bạn có thể gấp nó lại.
Các thuật toán nén được điều chỉnh và tối ưu hóa cụ thể cho các loại tệp mà chúng được nhắm mục tiêu. Ví dụ, các định dạng âm thanh sử dụng một cách khác nhau để lưu trữ dữ liệu, khi được giải mã bởi codec âm thanh, sẽ cho ra một tệp âm thanh tương tự như dạng sóng ban đầu. Để biết thêm thông tin về những khác biệt đó, hãy xem bài viết trước của chúng tôi, Sự khác biệt giữa tất cả các định dạng âm thanh là gì? Các định dạng âm thanh lossless và các tệp .zip có một điểm chung: cả hai đều mang lại dữ liệu gốc ở dạng chính xác sau quá trình giải nén. Các codec âm thanh bị mất sử dụng các phương tiện khác để tiết kiệm dung lượng ổ đĩa, chẳng hạn như cắt tần số mà tai người không thể nghe được và làm mịn dạng sóng trong các phần để loại bỏ một số chi tiết. Cuối cùng, trong khi chúng ta có thể không thực sự nghe thấy sự khác biệt giữa bản nhạc MP3 và bản nhạc CD, thì chắc chắn có sự thiếu hụt thông tin trước đây.
Mã hóa dữ liệu
Các thuật toán cũng được sử dụng khi bảo mật dữ liệu hoặc đường truyền. Thay vì lưu trữ dữ liệu để nó sử dụng ít dung lượng đĩa hơn, nó được lưu trữ theo cách mà các chương trình khác không thể phát hiện được. Nếu ai đó đánh cắp ổ cứng của bạn và bắt đầu quét nó, họ có thể lấy dữ liệu ngay cả khi bạn xóa các tệp vì dữ liệu vẫn còn đó, mặc dù vị trí chuyển tiếp đến nó đã biến mất. Khi dữ liệu được mã hóa, bất cứ thứ gì được lưu trữ sẽ không giống như nó. Nó thường trông ngẫu nhiên, như thể sự phân mảnh đã tích tụ theo thời gian. Bạn cũng có thể lưu trữ dữ liệu và làm cho nó xuất hiện dưới dạng một loại tệp khác. Các tập tin hình ảnh và tập tin âm nhạc là tốt cho điều này, vì chúng có thể khá lớn mà không gây ra sự nghi ngờ, ví dụ. Tất cả điều này được thực hiện bằng cách sử dụng các thuật toán toán học, lấy một số loại đầu vào và chuyển đổi nó thành một loại đầu ra rất cụ thể khác. Để biết thêm thông tin về cách mã hóa hoạt động, hãy xem HTG Giải thích: Mã hóa là gì và nó hoạt động như thế nào?
Thuật toán là các công cụ toán học cung cấp nhiều cách sử dụng trong khoa học máy tính. Họ làm việc để cung cấp một đường dẫn giữa điểm bắt đầu và điểm kết thúc một cách nhất quán và cung cấp các hướng dẫn để đi theo nó. Biết nhiều hơn những gì chúng tôi nhấn mạnh? Chia sẻ giải thích của bạn trong các ý kiến!