Tuyên bố từ chối 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 đều mang tính kỹ thuật. Đó là bởi vì tôi đang cố 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 toán học. Điều đó đang được nói, có một số môn toán liên quan, và điều đó là không thể tránh khỏi. Chuyên viên toán học, cảm thấy tự do để giải thích hoặc giải thích tốt hơn trong các ý kiến, nhưng xin vui lòng, giữ cho nó đơn giản cho các toán học disinclined giữa chúng tôi.
Hình ảnh của 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 điều này đề cập đến chính nhà toán học người Ả Rập, al-Khwarizmi (chỉ là một miếng ngon thú vị). Một thuật toán, đối với những người không phải là lập trình viên trong chúng ta, là một tập hợp các lệnh đưa đầ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 đó. Thuật toán có nhiều ứng dụng khác nhau. Trong toán học, chúng có thể giúp tính toán các hàm từ các điểm trong một tập dữ liệu, trong số nhiều thứ nâng cao hơn. Ngoài việc sử dụng chúng trong lập trình, chúng còn đóng vai trò quan trọng trong những thứ 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 cửa hàng tạp hóa và bạn đang hướng dẫn anh ấy hướng tới bạn. Bạn nói những thứ như “đi qua cánh cửa bên phải,” “vượt qua phần cá ở bên trái,” và “nếu bạn thấy sữa, bạn truyền cho tôi.” Thuật toán hoạt động như thế. Chúng tôi có thể sử dụng sơ đồ để minh họa 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.
Từ START, bạn sẽ đi xuống con đường, và tùy thuộc vào những gì xảy ra bạn theo "dòng chảy" đến một kết quả cuối cùng. Lưu đồ là các công cụ trực quan có thể dễ hiểu hơn đại diện cho một tập hợp các lệnh được sử dụng bởi máy tính. Tương tự như vậy, các thuật toán giúp làm tương tự với nhiều 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ể cung cấp chỉ đường.
Phương pháp 1
Chúng ta có thể biểu diễn điều này như là một loạt các điểm, và thông tin sẽ theo dạng biểu đồ tiêu chuẩn = {(x1, y1), (x2, y2),…, (xn, yn)}.
graph = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1)}
Nó khá dễ dàng để vẽ từng điểm, cái kia, và kết nối chúng với điểm trước đó. Tuy nhiên, hãy tưởng tượng một đồ thị với một nghìn điểm hoặc nhiều phân đoạn tất cả sẽ đi 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 cái, từng cái một, có thể là một cơn đau.
Phương pháp 2
Một điều khác chúng ta có thể làm là đưa ra một điểm bắt đầu, độ dốc của đường thẳng giữa nó 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 biểu đồ tiêu chuẩn của đồ thị = {(điểm bắt đầu}, [m1, x1, h1 ],…, [Mn, xn, hn]} Ở đây, biến 'm' đại diện cho độ dốc của đường thẳng, 'x' biểu diễn hướng để đếm trong (cho dù x hoặc y), và 'h' cho bạn biết cách bạn có thể nhớ để vẽ một điểm sau mỗi chuyển động.
graph = {(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 giống nhau, vì vậy chúng tôi có thể cắt giảm bằng cách chỉ nói “lặp lại ba lần” theo một 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:
graph = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [R=2]}
Điều gì sẽ xảy ra nếu các điểm riêng lẻ không thực sự quan trọng và chỉ có chính đồ thị đó là gì? Chúng ta có thể củng cố ba phần cuối cùng như sau:
graph = {(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 ta có nó trong các thuật ngữ đại số thuần túy. Một lần nữa, nếu bản thân các điểm không quan trọng và chỉ có biểu đồ, chúng tôi 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 nào bạn chọn tùy thuộc vào khả năng của bạn. Có thể bạn tuyệt vời với toán học và vẽ đồ thị, vì vậy bạn chọn tùy chọn cuối cùng. Có thể bạn đang điều hướng tốt, 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 tác vụ mà chúng hoàn thành.
Một điểm quan trọng cần lưu ý là mỗi phương pháp dựa vào một khóa. Mỗi bộ hướng dẫn là vô dụng 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 được cho là âm mưu mỗi điểm và kết nối các dấu chấm, tập hợp các điểm đầu tiên có nghĩa là không có gì. Trừ khi bạn biết mỗi biến có nghĩa là gì trong phương pháp 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ã. Chìa khóa đó cũng là một phần không thể thiếu của việc sử dụng các thuật toán, và 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 tệp.zip, bạn trích xuất nội dung để bạn có thể sử dụng bất kỳ nội dung nào 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 tính Windows 95 của tôi hơn một thập kỷ trước, tôi đã phải trích xuất tất cả mọi thứ bằng tay trước khi tôi có thể thấy bất cứ điều gì nhiều hơn tên tập tin bên trong. Đó là 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ế dài 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ỏ các đệ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ó trở lại.
Các thuật toán nén được điều chỉnh và tối ưu hóa đặc biệt 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 để lưu trữ dữ liệu, khi được giải mã bằng codec âm thanh, sẽ cung cấp tệp âm thanh tương tự với dạng sóng ban đầu. Để biết thêm thông tin về sự 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ì? Định dạng âm thanh lossless và các tệp.zip có một điểm chung: cả hai đều tạo ra dữ liệu ban đầu ở dạng chính xác của nó sau quá trình giải nén. Các codec âm thanh mất 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ác tần số cắt tỉa không thể nghe được bằng tai người 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 tôi có thể không thực sự có thể nghe thấy sự khác biệt giữa một MP3 và một ca khúc CD, có chắc chắn là một thâm hụt thông tin trong các cựu.
Mã hóa dữ liệu
Thuật toán là các công cụ toán học cung cấp nhiều ứng dụng trong khoa học máy tính. Họ làm việc để cung cấp một con đường giữa một điểm bắt đầu và một điểm kết thúc một cách nhất quán, và cung cấp các hướng dẫn để làm theo nó. Biết nhiều hơn những gì chúng tôi đánh dấu? Chia sẻ các giải thích của bạn trong các ý kiến!