Video: Incredible Ways People Cheat On Exams 2025
John Paul Mueller, Luca Massaron
Các thuật toán không cần phải là nhàm chán hoặc khó sử dụng. Thực tế, các thuật toán bao quanh bạn theo nhiều cách mà bạn không nghĩ đến và bạn sử dụng chúng mỗi ngày để thực hiện các tác vụ quan trọng. Tuy nhiên, bạn cần để có thể sử dụng các thuật toán mà không cần phải trở thành một nhà toán học.
Ngôn ngữ lập trình cho phép bạn mô tả các bước được sử dụng để tạo ra một thuật toán. Một số ngôn ngữ tốt hơn các ngôn ngữ khác khi thực hiện nhiệm vụ này theo cách mà mọi người có thể hiểu mà không trở thành các nhà khoa học máy tính. Python làm cho việc sử dụng các thuật toán dễ dàng hơn bởi vì nó đi kèm với rất nhiều hỗ trợ được xây dựng và mở rộng (thông qua việc sử dụng các gói, bộ dữ liệu và các tài nguyên khác). Bảng Cheat này giúp bạn truy cập vào những mẹo cần thiết nhất để sử dụng các thuật toán nhanh chóng và dễ dàng.
Định vị thuật toán bạn cần
Bảng dưới đây mô tả các thuật toán và các loại thuật toán mà bạn có thể thấy hữu ích cho các loại phân tích dữ liệu khác nhau.
Thuật toán | Mô tả | Liên kết hữu ích |
A * Tìm kiếm | Thuật toán theo dõi chi phí của các nút khi khám phá chúng bằng cách sử dụng (n) = g (n) - n là số nhận dạng nút g (n) là chi phí để đạt đến nút Standford. edu Cân bằng Cây Một loại cây duy trì một cấu trúc cân bằng thông qua tổ chức lại để nó có thể cung cấp thời gian truy cập giảm. Số lượng các phần tử ở phía bên trái khác với số bên phải nhất là một. Webdocs Tìm kiếm hai chiều Kỹ thuật này tìm kiếm đồng thời từ nút gốc và nút mục tiêu cho đến khi hai đường tìm kiếm gặp nhau ở giữa. Một lợi thế của cách tiếp cận này là thời gian hiệu quả vì nó tìm ra giải pháp nhanh hơn nhiều giải pháp brute-force khác. Ngoài ra, nó sử dụng bộ nhớ hiệu quả hơn các phương pháp khác và luôn tìm ra giải pháp. Những bất lợi chính là phức tạp của việc thực hiện. Lập kế hoạch. cs Cây nhị phân |
Đây là một loại cây có chứa các nút kết nối với các nút không (nút lá), một hoặc hai nút (nhánh nhánh) các nút khác. Mỗi nút xác định ba yếu tố phải bao gồm để cung cấp kết nối và lưu trữ dữ liệu: lưu trữ dữ liệu, kết nối trái, và kết nối đúng. |
cs. cmu. edu | Breadth-First Search | Kỹ thuật này bắt đầu ở nút gốc, khám phá từng nút con đầu tiên, và chỉ sau đó di chuyển xuống cấp độ tiếp theo. Nó tiến triển theo mức độ cho đến khi nó tìm ra một giải pháp. Bất lợi của thuật toán này là nó phải lưu trữ tất cả các nút trong bộ nhớ, có nghĩa là nó sử dụng một lượng đáng kể bộ nhớ cho một số lượng lớn các nút. Kỹ thuật này có thể kiểm tra các nút trùng lặp, tiết kiệm thời gian, và nó luôn luôn đi kèm với một giải pháp. |
Khan Academcy | Brute Force | Đây là một kỹ thuật giải quyết vấn đề, trong đó ai đó cố gắng giải quyết mọi vấn đề, tìm giải pháp vấn đề tốt nhất. Các kỹ thuật táo bạo đảm bảo một giải pháp phù hợp nhất khi tồn tại nhưng rất tốn thời gian để thực hiện mà hầu hết mọi người tránh. |
Igm. Kỹ thuật này bắt đầu ở nút gốc và khám phá một tập hợp các nút con kết nối cho đến khi nó đạt đến một nút lá. Nó tiến hành chi nhánh theo chi nhánh cho đến khi nó tìm ra một giải pháp. Bất lợi của thuật toán này là nó không thể kiểm tra các nút trùng lặp, có nghĩa là nó có thể đi qua các đường dẫn cùng một nút nhiều hơn một lần. Trong thực tế, thuật toán này có thể không tìm thấy một giải pháp nào cả, có nghĩa là bạn phải xác định một điểm cắt để giữ cho thuật toán tìm kiếm vô hạn. Một lợi thế của cách tiếp cận này là nó hiệu quả bộ nhớ. | Hacker Earth | Chia và Conquer |
Đây là một kỹ thuật giải quyết vấn đề, trong đó vấn đề được chia thành các phần nhỏ nhất có thể và giải quyết theo cách tiếp cận đơn giản nhất có thể. Kỹ thuật này tiết kiệm đáng kể thời gian và nguồn lực khi so sánh với các cách tiếp cận khác, chẳng hạn như bạo lực. Tuy nhiên, nó không phải lúc nào cũng đảm bảo kết quả phù hợp nhất. | Khan Academy | Dijikstra |
Đây là thuật toán dùng để tìm đường đi ngắn nhất trong đồ thị có trọng số, có trọng số (có trọng tích). | Geeks cho Geeks | Biểu đồ |
Biểu đồ là một loại phần mở rộng của cây. Giống như cây, bạn có các nút kết nối với nhau để tạo ra các mối quan hệ. Tuy nhiên, không giống như cây nhị phân, đồ thị có thể có nhiều hơn một hoặc hai kết nối. Trên thực tế, các nút biểu đồ thường có rất nhiều kết nối. Bạn thấy đồ thị được sử dụng ở những nơi như bản đồ cho GPS và tất cả các loại nơi khác mà cách tiếp cận trên xuống của cây sẽ không hoạt động. | Hướng dẫn | Thuật toán tham lam |
Kỹ thuật giải quyết vấn đề trong đó giải pháp dựa vào câu trả lời tốt nhất cho từng bước của quá trình giải quyết vấn đề. Các thuật toán tham lam thường có hai giả thiết: |
|
Có thể thực hiện một sự lựa chọn tối ưu duy nhất tại một bước nhất định. |
Bằng cách lựa chọn lựa chọn tối ưu ở mỗi bước, tìm ra giải pháp tối ưu cho vấn đề tổng thể là có thể. Thuật toán luôn lựa chọn đường đi gần mục tiêu sử dụng phương trình: | f (n) | = |
h ( | n) | . Thuật toán đặc biệt này có thể tìm ra các giải pháp khá nhanh, nhưng cũng có thể bị mắc kẹt trong vòng lặp, vì vậy nhiều người không xem đó là một cách tiếp cận tối ưu để tìm ra giải pháp. |
Centurion2 | Hashing
Đây là một phương pháp dự đoán vị trí của một mục dữ liệu cụ thể trong cấu trúc dữ liệu (bất kể cấu trúc đó có thể là gì) trước khi thực sự tìm nó. Cách tiếp cận này dựa vào việc sử dụng các phím được đặt vào một chỉ mục. Một hàm băm biến khóa thành một giá trị số mà thuật toán đặt vào một bảng băm. Bảng băm cung cấp phương tiện để tạo ra một chỉ mục trỏ đến các phần tử trong một cấu trúc dữ liệu sao cho một thuật toán có thể dễ dàng dự đoán vị trí của dữ liệu.
Hướng dẫn Heap |
Đây là một cây tinh vi cho phép chèn dữ liệu vào cấu trúc cây. Việc sử dụng chèn dữ liệu giúp phân loại nhanh hơn. Bạn có thể phân loại các cây này như là tối đa heaps và min heaps, tùy thuộc vào khả năng của cây để ngay lập tức cung cấp giá trị tối đa hoặc tối thiểu có trong cây. |
Hướng dẫn | Heuristics Đây là một kỹ thuật giải quyết vấn đề dựa vào việc tự khám phá và tạo ra các kết quả đầy đủ hữu ích (không nhất thiết tối ưu, nhưng đủ tốt) để giải quyết một vấn đề đủ tốt để một giải pháp tốt hơn ' t cần thiết. Tự khám phá là quá trình cho phép thuật toán hiển thị cho bạn một đường dẫn hữu ích cho một giải pháp (nhưng bạn vẫn phải dựa vào trực giác và hiểu biết của con người để biết liệu giải pháp là đúng không). Tây Bắc. edu MapReduce MapReduce | Đây là một khuôn khổ để làm cho các thuật toán sử dụng tính toán song song (sử dụng nhiều máy tính kết nối với nhau trong mạng), cho phép các thuật toán hoàn thành các giải pháp của chúng nhanh hơn. |
Hadoop Apache | Mergesort | Mergesort là một phương pháp so sánh dựa trên việc phân loại dữ liệu. Nó phụ thuộc vào một cách tiếp cận phân chia và chinh phục để thực hiện nhiệm vụ của nó. |
Geeks for Geeks | cân bằng Nash | Đây là một lý thuyết trò chơi, trong đó các cầu thủ khác biết chiến lược cân bằng cho các cầu thủ khác, do đó, không ai có thể đạt được bằng cách thay đổi chiến thuật cá nhân của mình. Lý thuyết này được sử dụng trong bất kỳ tình huống thù địch nào trong đó người chơi phải tính đến các quyết định của tất cả các người chơi khác để giành chiến thắng trong trò chơi. |
Học viện Khan | PageRank | PageRank là một thuật toán để đo tầm quan trọng của một nút trong một đồ thị. Thuật toán này nằm ở gốc của các thuật toán cốt lõi của Google để cấp nguồn cho các tìm kiếm có liên quan cho người dùng. |
Princeton. edu | Tìm kiếm Heuristic Tinh khiết | Thuật toán này mở rộng các nút theo thứ tự của chi phí của chúng. Nó duy trì hai danh sách. Danh sách đóng có chứa các nút mà nó đã khám phá và danh sách mở chứa các nút mà nó phải được khám phá. Trong mỗi lần lặp, thuật toán mở rộng nút có chi phí thấp nhất có thể. Tất cả các nút con của nó được đặt trong danh sách đóng và chi phí nút con riêng lẻ được tính toán. Thuật toán gửi các nút con với chi phí thấp trở lại danh sách mở và xóa các nút con với chi phí cao. Do đó, thuật toán thực hiện tìm kiếm thông minh dựa trên chi phí cho giải pháp. |
Thế giới máy tính | Quicksort | Đây là một chiến lược phân loại mục đích chung dựa trên các mảng phân chia các dữ liệu thành mảng nhỏ hơn.Nó phụ thuộc vào một cách tiếp cận phân chia và chinh phục để thực hiện nhiệm vụ của nó. |
Hướng dẫn | Cân bằng cây không cân bằng | Đây là một cây đặt các mục dữ liệu mới vào bất cứ nơi nào cần thiết trong cây mà không cân bằng. Cách thêm các mục này làm cho việc xây dựng cây nhanh hơn nhưng giảm tốc độ truy cập khi tìm kiếm hoặc phân loại. |
Quora | Các thuật toán khác biệt từ các cấu trúc toán học khác | Nếu bạn giống như hầu hết mọi người, bạn thường thấy mình gãi đầu khi nói đến các cấu trúc toán học bởi vì không ai biết cách sử dụng đúng các thuật ngữ. Nó như thể mọi người cố tình cố gắng làm mọi thứ trở nên khó khăn! Sau khi tất cả, một phương trình là gì và tại sao nó là khác nhau từ một thuật toán? Vâng, đừng sợ nữa: Bảng sau đây cung cấp hướng dẫn dứt khoát cho các cấu trúc toán học mà bạn có thể gặp phải nhưng đã ngại hỏi. |
Cấu trúc | Mô tả | Phương trình |
Số và ký hiệu, khi được lấy như một toàn thể, tương đương với một giá trị cụ thể. Một phương trình luôn chứa một dấu bằng để bạn biết rằng các con số và biểu tượng đại diện cho giá trị cụ thể ở phía bên kia của dấu bằng. Các phương trình thường chứa thông tin biến được trình bày dưới dạng một biểu tượng, nhưng chúng không bắt buộc phải sử dụng các biến. | Công thức | Một sự kết hợp của các con số và biểu tượng được sử dụng để thể hiện thông tin hoặc ý tưởng. Một công thức thường trình bày các khái niệm toán học hoặc logic, chẳng hạn như xác định Phân số chung lớn nhất (GCD) của hai số nguyên (video tại Học viện Khan cho biết cách thức hoạt động). Nói chung, một công thức cho thấy mối quan hệ giữa hai hay nhiều biến. Hầu hết mọi người nhìn thấy một công thức như một phương trình đặc biệt. |
Thuật toán | Một chuỗi các bước được sử dụng để giải quyết vấn đề. Trình tự này trình bày một phương pháp duy nhất để giải quyết một vấn đề bằng cách cung cấp một giải pháp cụ thể. Một thuật toán không cần phải đại diện cho các khái niệm toán học hoặc logic, mặc dù các bài thuyết trình trong cuốn sách này thường rơi vào thể loại đó bởi vì người ta thường sử dụng thuật toán theo cách này. Một số công thức đặc biệt cũng là các thuật toán, chẳng hạn như công thức bậc hai. Đối với một quá trình đại diện cho một thuật toán, nó phải là như sau: | Hạn chế: |
Thuật toán cuối cùng phải giải quyết được vấn đề.
Vâng xác định:
Hàng loạt các bước phải chính xác và trình bày các bước dễ hiểu, đặc biệt là các máy tính, mà phải có khả năng tạo ra một thuật toán có thể sử dụng được. | Hiệu quả: |
Một thuật toán phải giải quyết tất cả các trường hợp của vấn đề mà ai đó đã định nghĩa nó. Một thuật toán luôn phải giải quyết được vấn đề mà nó phải giải quyết. Mặc dù bạn nên dự đoán một số thất bại, tỷ lệ của sự thất bại là rất hiếm và chỉ xảy ra trong những tình huống được chấp nhận cho việc sử dụng thuật toán dự định. | Các cách sử dụng thuật toán tuyệt vời |
Mọi người thực sự sử dụng thuật toán mọi lúc. Ví dụ, làm bánh mì nướng là một ví dụ của một thuật toán, như được giải thích trong bài đăng blog này. Làm bánh mì nướng không phải là một thuật toán tuyệt vời, nhưng những gì trong bảng sau, sử dụng một máy tính để thực hiện nhiệm vụ, được.Lưu trữ dữ liệu an toàn là một trận chiến đang diễn ra với các hacker liên tục tấn công các nguồn dữ liệu. | Nhiệm vụ |
Tại sao lại đáng kinh ngạc | Mật mã
Các thuật toán cho phép bạn phân tích dữ liệu, đưa nó vào một số dạng khác, và sau đó trả lại nó về dạng ban đầu sau đó. Phân tích đồ thị Khả năng quyết định đường ngắn nhất giữa hai điểm tìm thấy tất cả các loại sử dụng. Ví dụ, trong một vấn đề định tuyến, GPS của bạn không thể hoạt động mà không có thuật toán đặc biệt này bởi vì nó không bao giờ có thể hướng bạn dọc theo các đường phố thành phố bằng cách sử dụng con đường ngắn nhất từ điểm A đến điểm B. Sự tạo ra số giả ngẫu nhiên mà không bao giờ khác nhau. Bạn bắt đầu ở cùng một nơi và thực hiện các bước tương tự theo cùng cách mỗi lần bạn chơi. Nhàm chán! Không có khả năng tạo số ngẫu nhiên có vẻ như, nhiều tác vụ máy tính trở nên vô nghĩa hoặc không thể. Lập kế hoạch |
Việc sử dụng các nguồn lực công bằng cho tất cả các bên liên quan là một cách khác trong đó các thuật toán làm cho sự hiện diện của họ được biết đến một cách lớn. Ví dụ, đèn thời gian ở giao lộ không còn đơn giản là các thiết bị đếm ngược giây giữa các thay đổi ánh sáng. Các thiết bị hiện đại xem xét tất cả các loại vấn đề, chẳng hạn như thời gian trong ngày, điều kiện thời tiết và lưu lượng truy cập. Lập kế hoạch có nhiều hình thức, tuy nhiên. Xem xét làm thế nào máy tính của bạn chạy nhiều nhiệm vụ cùng một lúc. Nếu không có thuật toán lập lịch trình, hệ điều hành có thể lấy tất cả các tài nguyên sẵn có và giữ cho ứng dụng của bạn không thực hiện bất kỳ công việc hữu ích nào.
Tìm kiếm
Xác định vị trí thông tin hoặc xác minh rằng thông tin bạn nhìn thấy là thông tin bạn muốn là một nhiệm vụ thiết yếu. Nếu không có khả năng này, nhiều tác vụ bạn thực hiện trực tuyến sẽ không thể thực hiện được, chẳng hạn như tìm kiếm trang web trên Internet bán nồi cà phê hoàn hảo cho văn phòng của bạn. | Sắp xếp |
Xác định trình tự trình bày thông tin là quan trọng bởi vì hầu hết mọi người hiện nay bị quá tải thông tin, và cần giảm sự phát triển của dữ liệu. Hãy tưởng tượng đi đến Amazon, tìm kiếm hơn một nghìn ấm cà phê để bán, nhưng vẫn không thể phân loại theo giá hoặc đánh giá tích cực nhất. Hơn nữa, nhiều thuật toán phức tạp đòi hỏi dữ liệu theo thứ tự thích hợp để làm việc đáng tin cậy, do đó, phân loại là một điều kiện quan trọng để giải quyết nhiều vấn đề. | Chuyển đổi |
Việc chuyển đổi một loại dữ liệu sang một loại dữ liệu khác là rất quan trọng để hiểu và sử dụng dữ liệu hiệu quả. Ví dụ: bạn có thể hiểu trọng lượng của đế quốc chỉ cần sử dụng tốt, nhưng tất cả các nguồn của bạn sử dụng hệ thống số liệu. Chuyển đổi giữa hai hệ thống giúp bạn hiểu được dữ liệu. Tương tự, phép biến đổi Fourier nhanh (FFT) chuyển đổi các tín hiệu giữa miền thời gian và miền tần số, cho phép những thứ như bộ định tuyến WiFi hoạt động. | Xử lý với độ phức tạp thuật toán |
Bạn đã biết rằng các thuật toán phức tạp. Tuy nhiên, bạn cần phải biết một thuật toán phức tạp phức tạp như thế nào bởi vì một thuật toán phức tạp hơn là, nó cần nhiều thời gian hơn để chạy. Bảng dưới đây giúp bạn hiểu mức độ phức tạp khác nhau được trình bày theo thứ tự thời gian chạy (từ nhanh nhất đến chậm nhất). | Độ phức tạp |
Mô tả | Độ phức tạp liên tục O (1) |
Cung cấp thời gian thực hiện không thay đổi, cho dù bạn nhập vào bao nhiêu. Mỗi đầu vào yêu cầu một đơn vị thời gian thực hiện. | Độ phức tạp logarithmic O (log n) |
Số lượng các hoạt động phát triển ở tốc độ chậm hơn so với đầu vào, làm cho thuật toán kém hiệu quả hơn với các đầu vào nhỏ và hiệu quả hơn với các thuật toán lớn hơn. Một thuật toán điển hình của lớp này là tìm kiếm nhị phân. | Sự phức tạp tuyến tính O (n) |
Các hoạt động phát triển với đầu vào theo tỉ lệ 1: 1. Một thuật toán điển hình là lặp lại, khi bạn quét đầu vào một lần và áp dụng một thao tác cho mỗi phần tử của nó. | Độ phức tạp tuyến tính O (n log n) |
Tính phức tạp là sự kết hợp giữa sự phức tạp logarithmic và tuyến tính. Nó là điển hình của một số thuật toán thông minh được sử dụng để đặt hàng dữ liệu, chẳng hạn như Mergesortsort, Heapsort và Quicksort.
Sự phức tạp gấp đôi O (n
2 | ) |
Các hoạt động phát triển như một hình vuông của số lượng đầu vào. Khi bạn có một lần lặp trong một lần lặp lại (được gọi là lặp lồng nhau trong khoa học máy tính), bạn có sự phức tạp bậc hai. Ví dụ, bạn có một danh sách các tên và, để tìm những cái giống nhau nhất, bạn so sánh mỗi tên với tất cả các tên khác. Một số thuật toán đặt hàng ít hiệu quả hơn trình bày sự phức tạp như vậy: sắp xếp bong bóng, sắp xếp lựa chọn và sắp xếp chèn. Mức độ phức tạp này có nghĩa là các thuật toán của bạn có thể chạy hàng giờ hoặc thậm chí vài ngày trước khi tìm ra giải pháp. | Sự phức tạp của khối O (n |
3 | ) |
Các hoạt động phát triển thậm chí còn nhanh hơn sự phức tạp bậc hai bởi vì bây giờ bạn có nhiều lần lặp lồng nhau. Khi một thuật toán có thứ tự phức tạp này và bạn cần phải xử lý số lượng khiêm tốn của dữ liệu (100, 000 phần tử), thuật toán của bạn có thể chạy trong nhiều năm. Khi bạn có một số hoạt động mà là một sức mạnh của đầu vào, nó là phổ biến để tham khảo các thuật toán như chạy trong thời gian đa thức. | Sự phức tạp hàm mũ O (2 |
n | ) |
Thuật toán mất hai lần số lần thực hiện trước cho mỗi phần tử mới được thêm vào. Khi một thuật toán có sự phức tạp này, ngay cả những vấn đề nhỏ có thể mất mãi mãi. Nhiều thuật toán tìm kiếm toàn diện có sự phức tạp hàm mũ. Tuy nhiên, ví dụ điển hình cho mức độ phức tạp này là việc tính toán các số Fibonacci. Sự phức tạp nhân tố O (n!) Thuật toán này cho thấy một cơn ác mộng thực sự phức tạp vì có nhiều sự kết hợp có thể giữa các phần tử. Chỉ cần tưởng tượng: Nếu đầu vào của bạn là 100 đối tượng, và một thao tác trên máy tính của bạn mất 10 | -6 999 giây (một tốc độ hợp lý cho mỗi máy tính hiện nay), bạn sẽ cần khoảng 10 |
140 năm để hoàn thành nhiệm vụ thành công (một khoảng thời gian không thể thực hiện vì tuổi của vũ trụ được ước tính là 10 14 | năm). Một vấn đề phức tạp nổi bật giai đoạn là vấn đề người bán hàng đi du lịch, trong đó một nhân viên bán hàng phải tìm ra con đường ngắn nhất để thăm nhiều thành phố và trở lại thành phố khởi đầu. |