Hướng dẫn examples of algorithms in python - ví dụ về các thuật toán trong python

Lập trình | Phỏng vấn | Giờ hành chính

Trong bài viết này, tôi trình bày và chia sẻ giải pháp cho một số thuật toán cơ bản xuất hiện thường xuyên trong các cuộc phỏng vấn MAANG

Ảnh của Headway trên unplash

Đề xuất các khóa học theo yêu cầu

Nhiều người trong số các bạn đã liên hệ với tôi yêu cầu các nguồn lực có giá trị để làm móng các cuộc phỏng vấn mã hóa Python. Dưới đây tôi chia sẻ 4 khóa học/nền tảng mà tôi khuyên bạn nên tiếp tục tập thể dục sau khi thực hành các thuật toán trong bài đăng này: to nail Python coding interviews. Below I share 4 courses/platforms that I strongly recommend to keep exercising after practicing the algorithms in this post:

  • LeetCode trong Python: 50 Thuật toán Câu hỏi phỏng vấn mã hóa → Tốt nhất cho các vòng mã hóa liên quan đến thuật toán!→ Best For Coding Rounds Involving Algorithms!
  • Các vấn đề mã hóa nâng cao Python (Stratascratch) → nền tảng tốt nhất Tôi tìm thấy để chuẩn bị các cuộc phỏng vấn mã hóa Python & SQL cho đến nay! Tốt hơn và rẻ hơn LeetCode.Best platform I found to prepare Python & SQL coding interviews so far! Better and cheaper than LeetCode.
  • Thực hành các câu hỏi phỏng vấn mã hóa trong Python (60+vấn đề) → Danh sách, mảng, bộ, dicts, map (), filter (), giảm (), các đối tượng có thể lặp lại.Lists, arrays, sets, dicts, map(), filter(), reduce(), iterable objects.
  • Python Data Engineering Nanodegree → Khóa học chất lượng cao nếu bạn cam kết theo đuổi nghề nghiệp trong kỹ thuật dữ liệu.High quality course if you are committed to pursue a career in data engineering.

Hy vọng bạn cũng sẽ tìm thấy chúng hữu ích! Bây giờ hãy tận hưởng bài báo: D

Tại sao thực hành thuật toán là chìa khóa?

Nếu bạn còn khá mới đối với Python và dự định bắt đầu phỏng vấn cho các công ty hàng đầu (trong đó MAANG) lắng nghe điều này: bạn cần bắt đầu thực hành các thuật toán ngay bây giờ.

Don Tiết ngây thơ như tôi khi tôi mới bắt đầu giải quyết chúng. Mặc dù tôi nghĩ rằng việc bẻ khóa một vài thuật toán mọi lúc và sau đó rất vui, tôi không bao giờ dành quá nhiều thời gian để thực hành và thậm chí ít thời gian hơn để thực hiện một giải pháp nhanh hơn hoặc hiệu quả hơn. Giữa bản thân tôi, tôi đã nghĩ rằng vào cuối ngày, các thuật toán giải quyết cả ngày dài là một chút quá, nó thực sự không sử dụng thực tế trong môi trường làm việc hàng ngày thực sự và nó sẽ không mang lại nhiều cho túi của tôi vào dài hạn dài hơn.

Biết cách giải quyết các thuật toán sẽ mang lại cho bạn lợi thế cạnh tranh trong quá trình tìm kiếm việc làm

Vâng, tôi đã sai (ít nhất là một phần): Tôi vẫn nghĩ rằng việc dành quá nhiều thời gian cho các thuật toán mà không tập trung vào các kỹ năng khác là không đủ để khiến bạn đạt được công việc mơ ước, nhưng tôi hiểu rằng vì các vấn đề phức tạp xuất hiện trong mỗi ngày làm việc Là một lập trình viên, các công ty lớn đã phải tìm một quy trình tiêu chuẩn hóa để thu thập những hiểu biết về giải quyết vấn đề của ứng viên và chú ý đến các kỹ năng chi tiết. Điều này có nghĩa là biết cách giải quyết các thuật toán sẽ mang lại cho bạn lợi thế cạnh tranh trong quá trình tìm kiếm việc làm vì thậm chí các công ty ít nổi tiếng hơn có xu hướng áp dụng các phương pháp đánh giá tương tự.

Có cả một thế giới ngoài kia

Ngay sau khi tôi bắt đầu giải quyết các thuật toán nhất quán hơn, tôi phát hiện ra rằng có rất nhiều tài nguyên để thực hành, tìm hiểu các chiến lược hiệu quả nhất để giải quyết chúng và sẵn sàng tinh thần cho các cuộc phỏng vấn (Hackerrank, LeetCode, CodingBat và Geekfee .HackerRank,LeetCode, CodingBat and GeeksForGeeksare just few examples).

Cùng với việc thực hành các câu hỏi phỏng vấn hàng đầu, các trang web này thường nhóm các thuật toán theo công ty, nhúng các blog tích cực nơi mọi người chia sẻ các bản tóm tắt chi tiết về trải nghiệm phỏng vấn của họ và đôi khi thậm chí đưa ra các câu hỏi phỏng vấn giả như một phần của các kế hoạch cao cấp.

Ví dụ: LeetCode cho phép bạn lọc các câu hỏi phỏng vấn hàng đầu của các công ty cụ thể và theo tần suất. Bạn cũng có thể chọn mức độ khó (dễ dàng, trung bình và khó) mà bạn cảm thấy thoải mái với:LeetCode let you filter top interview questions by specific companies and by frequency. You can also choose the level of difficulty (Easy, Medium and Hard) you feel comfortable with:

Nguồn: https://leetcode.com/problemset/all/

Có hàng trăm vấn đề thuật toán khác nhau ngoài kia, có nghĩa là việc có thể nhận ra các mẫu phổ biến và mã là một giải pháp hiệu quả trong ít hơn 10 phút sẽ đòi hỏi nhiều thời gian và sự cống hiến.

Lúc đầu, Don Don thất vọng nếu bạn thực sự đấu tranh để giải quyết chúng lúc đầu, điều này hoàn toàn bình thường

Don Tiết thất vọng nếu bạn thực sự đấu tranh để giải quyết chúng lúc đầu, điều này là hoàn toàn bình thường. Thậm chí các lập trình viên Python có kinh nghiệm hơn sẽ tìm thấy nhiều thuật toán thách thức để giải quyết trong một thời gian ngắn mà không cần đào tạo đầy đủ.

Ngoài ra, hãy thất vọng nếu cuộc phỏng vấn của bạn không diễn ra như bạn mong đợi và bạn mới bắt đầu giải quyết các thuật toán. Có những người chuẩn bị trong nhiều tháng để giải quyết một vài vấn đề mỗi ngày và thường xuyên luyện tập chúng trước khi họ có thể kết nối một cuộc phỏng vấn.

Để giúp bạn trong quá trình đào tạo của bạn, bên dưới tôi đã chọn 10 thuật toán (chủ yếu xung quanh thao tác và mảng chuỗi) mà tôi đã thấy xuất hiện nhiều lần trong các cuộc phỏng vấn mã hóa điện thoại. Mức độ của những vấn đề này chủ yếu là dễ dàng vì vậy hãy coi chúng là điểm khởi đầu tốt.String Manipulation and Arrays) that I have seen appearing again and again in phone coding interviews. The level of these problems is mainly easy so consider them as good starting point.

Xin lưu ý rằng giải pháp tôi đã chia sẻ cho mỗi vấn đề chỉ là một trong nhiều giải pháp tiềm năng có thể được thực hiện và thường là một BF (Brute Brute Force). Do đó, hãy thoải mái mã hóa phiên bản thuật toán của riêng bạn, cố gắng tìm sự cân bằng phù hợp giữa thời gian chạy và bộ nhớ được sử dụng.

Chuỗi thao túng

1. Số nguyên ngược

Output:
-132
543

Một thuật toán khởi động, điều đó sẽ giúp bạn thực hành các kỹ năng cắt lát của bạn. Trong thực tế, một chút khó khăn duy nhất là đảm bảo bạn đang tính đến trường hợp khi số nguyên là âm. Tôi đã thấy vấn đề này được trình bày theo nhiều cách khác nhau nhưng nó thường là điểm khởi đầu cho các yêu cầu phức tạp hơn.

2. Chiều dài từ trung bình

Output:
4.2
4.08

Các thuật toán yêu cầu bạn áp dụng một số tính toán đơn giản bằng cách sử dụng các chuỗi là rất phổ biến, do đó, điều quan trọng là phải làm quen với các phương pháp như ____1010and

Output:
4.2
4.08
1 trong trường hợp này đã giúp tôi xóa các ký tự không mong muốn và tạo một danh sách các từ, độ dài có thể dễ dàng đo được và tổng hợp.and
Output:
4.2
4.08
1that in this case helped me removing the unwanted characters and create a list of words, the length of which can be easily measured and summed.

3. Thêm chuỗi

Output:
2200
2200

Tôi thấy cả hai cách tiếp cận đều sắc nét như nhau: phương pháp đầu tiên cho sự ngắn gọn của nó và trực giác sử dụng

Output:
4.2
4.08
2Method để đánh giá động các đầu vào dựa trên chuỗi và lần thứ hai cho việc sử dụng thông minh của
Output:
4.2
4.08
3Function để xây dựng lại hai chuỗi khi các số thực tế phát ra Mã mã Unicode của các ký tự của họ. Nếu tôi thực sự phải chọn ở giữa hai người, có lẽ tôi sẽ đi theo cách tiếp cận thứ hai vì nó trông phức tạp hơn lúc đầu nhưng nó thường có ích trong việc giải quyết các thuật toán trung bình và các thuật toán cứng, yêu cầu thao tác và tính toán chuỗi nâng cao hơn.

4. Nhân vật độc đáo đầu tiên

Output:
1
2
1
###
1
2
1

Cũng trong trường hợp này, hai giải pháp tiềm năng được cung cấp và tôi đoán rằng, nếu bạn khá mới đối với các thuật toán, cách tiếp cận đầu tiên có vẻ quen thuộc hơn một chút khi nó xây dựng như một bộ đếm đơn giản bắt đầu từ một từ điển trống.

Tuy nhiên, việc hiểu cách tiếp cận thứ hai sẽ giúp bạn nhiều hơn trong dài hạn và điều này là bởi vì trong thuật toán này, tôi chỉ đơn giản là sử dụng

Output:
4.2
4.08
4Instead của việc tự mình xây dựng một bộ đếm chars và thay thế
Output:
4.2
4.08
5 bằng
Output:
4.2
4.08
6, một chức năng có thể giúp bạn xác định chỉ số thanh lịch hơn.

5. Palindrom hợp lệ

Output:
True

Vấn đề palindrom hợp lệ của người Viking là một tác phẩm kinh điển thực sự và có lẽ bạn sẽ tìm thấy nó nhiều lần dưới nhiều hương vị khác nhau. Trong trường hợp này, nhiệm vụ là kiểm tra thời tiết bằng cách loại bỏ tối đa một ký tự, chuỗi khớp với đối tác đảo ngược của nó. Khi s = ‘radkar, chức năng trả về

Output:
4.2
4.08
7As bằng cách loại trừ‘ k, chúng ta có được từ ‘radar, đó là một palindrom.s = ‘radkar’ the function returns
Output:
4.2
4.08
7as by excluding the ‘k’ we obtain the word ‘radar’ that is a palindrome.

Mảng

6. Mảng đơn điệu

Output:
True
False
True

Đây là một vấn đề rất thường gặp và giải pháp được cung cấp ở trên là khá thanh lịch vì nó có thể được viết như một lớp lót. Một mảng là đơn điệu khi và chỉ khi nó tăng đơn điệu, hoặc đơn điệu giảm và để đánh giá nó, thuật toán ở trên sẽ tận dụng chức năng

Output:
4.2
4.08
8 trả về
Output:
4.2
4.08
9 nếu tất cả các mục trong một điều đó là đúng, nếu không nó sẽ trả về ____. Nếu đối tượng có thể trống, hàm
Output:
4.2
4.08
8 cũng trả về
Output:
4.2
4.08
9.

7. Di chuyển số 0

Output:
[1, 3, 12, 0, 0]
[1, 7, 8, 10, 12, 4, 0, 0, 0, 0]

Khi bạn làm việc với các mảng, các phương pháp

Output:
2200
2200
3 và
Output:
2200
2200
4 là các đồng minh quý giá. Trong vấn đề này, tôi đã sử dụng chúng để loại bỏ từng số 0 thuộc về mảng ban đầu và sau đó nối nó ở cuối vào cùng một mảng.

8. Đổ đầy chỗ trống

Output:
[1, 1, 2, 3, 3, 3, 5, 5]

Tôi đã được yêu cầu giải quyết vấn đề này một vài lần trong các cuộc phỏng vấn thực sự, cả hai lần giải pháp phải bao gồm các trường hợp cạnh (mà tôi đã bỏ qua ở đây để đơn giản). Trên giấy tờ, đây là một thuật toán dễ dàng để xây dựng nhưng bạn cần phải nhớ rõ những gì bạn muốn đạt được với vòng lặp và nếu câu lệnh và thoải mái làm việc với các giá trị

Output:
2200
2200
5.

9. Các từ phù hợp và không khớp

Output:
(['The','We','a','are','by','heavy','hit','in','meet','our',
'pleased','storm','to','was','you'],
['city', 'really'])

Vấn đề khá trực quan nhưng thuật toán tận dụng một số hoạt động tập hợp rất phổ biến như

Output:
2200
2200
6,
Output:
2200
2200
7and
Output:
2200
2200
8 đó là cực kỳ hữu ích để làm cho giải pháp của bạn thanh lịch hơn. Nếu đó là lần đầu tiên bạn gặp chúng, hãy đảm bảo kiểm tra bài viết này:

10. Mảng số nguyên tố

Output:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

Tôi muốn đóng phần này với một vấn đề cổ điển khác. Một giải pháp có thể được tìm thấy khá dễ dàng lặp lại máng

Output:
2200
2200
9 nếu bạn quen thuộc với cả định nghĩa số nguyên tố và hoạt động mô đun.modulus operation.

Sự kết luận

Trong bài viết này, tôi đã chia sẻ giải pháp của 10 thuật toán Python là vấn đề thường được hỏi trong các vòng phỏng vấn mã hóa. Nếu bạn đang chuẩn bị một cuộc phỏng vấn với một công ty công nghệ nổi tiếng, bài viết này là điểm khởi đầu tốt để làm quen với các mẫu thuật toán phổ biến và sau đó chuyển sang các câu hỏi phức tạp hơn. Cũng lưu ý rằng các bài tập được trình bày trong bài đăng này (cùng với các giải pháp của chúng) là giải thích lại một chút các vấn đề có sẵn trên LeetCode và Geekforgeek. Tôi không phải là một chuyên gia trong lĩnh vực này do đó các giải pháp tôi trình bày chỉ là những giải pháp chỉ ra.

Bạn cũng có thể thích:

Một ghi chú cho độc giả của tôi

Bài đăng này bao gồm các liên kết liên kết mà tôi có thể thực hiện một khoản hoa hồng nhỏ mà không phải trả thêm chi phí cho bạn, nếu bạn mua hàng.

Thuật toán nào được sử dụng trong Python?

Nhà vô địch thuật toán ML trị vì được cho là gói Scikit-Learn của Python, cung cấp cú pháp đơn giản và dễ dàng kết hợp với một kho báu của nhiều thuật toán. Trong khi một số thuật toán phù hợp hơn cho các nhiệm vụ cụ thể, những thuật toán khác được áp dụng rộng rãi cho bất kỳ dự án nào.scikit-learn package, which offers simple and easy syntax paired with a treasure trove of multiple algorithms. While some algorithms are more appropriate for specific tasks, others are widely applicable to any project.

Ví dụ thuật toán là gì?

Thuật toán là tất cả xung quanh chúng ta.Các ví dụ phổ biến bao gồm: Công thức nướng bánh, phương pháp chúng tôi sử dụng để giải quyết vấn đề phân chia dài, quá trình giặt đồ và chức năng của công cụ tìm kiếm đều là những ví dụ về thuật toán.the recipe for baking a cake, the method we use to solve a long division problem, the process of doing laundry, and the functionality of a search engine are all examples of an algorithm.

Có thuật toán trong Python không?

Các thuật toán Python là một tập hợp các hướng dẫn được thực thi để có được giải pháp cho một vấn đề nhất định.Vì các thuật toán không dành riêng cho ngôn ngữ, chúng có thể được thực hiện trong một số ngôn ngữ lập trình.Không có quy tắc tiêu chuẩn hướng dẫn việc viết thuật toán.. Since algorithms are not language-specific, they can be implemented in several programming languages. No standard rules guide the writing of algorithms.

Một python * thuật toán * là gì?

Thuật toán tìm kiếm* là một thuật toán tìm kiếm đơn giản và hiệu quả có thể được sử dụng để tìm đường dẫn tối ưu giữa hai nút trong biểu đồ.Nó sẽ được sử dụng cho việc tìm đường ngắn nhất.Đây là một phần mở rộng của thuật toán đường dẫn ngắn nhất của Dijkstra (thuật toán của Dijkstra).a simple and efficient search algorithm that can be used to find the optimal path between two nodes in a graph. It will be used for the shortest path finding. It is an extension of Dijkstra's shortest path algorithm (Dijkstra's Algorithm).