Hướng dẫn cơ bản để lập trình cạnh tranh

Mar 22 2022
Độc giả Hola! Tôi là Chitra Singla, sinh viên năm cuối ngành Kỹ thuật phần mềm tại Đại học Công nghệ Delhi. Gần đây, tôi đã nhận được lời mời làm việc toàn thời gian từ Google và Amazon.

Độc giả Hola! Tôi là Chitra Singla, sinh viên năm cuối ngành Kỹ thuật phần mềm tại Đại học Công nghệ Delhi. Gần đây, tôi đã nhận được lời mời làm việc toàn thời gian từ GoogleAmazon . Trước đây, tôi đã thực hiện 2 tháng thực tập mùa hè tại Amazon và hiện đang thực tập 6 tháng mùa đông tại Walmart .

Mã hóa cạnh tranh giữ một vị trí đặc biệt trong trái tim tôi. Tôi hiện được đánh giá là một chuyên gia về Codeforces và một lập trình viên 4 sao trên Codechef . Với việc luyện tập thường xuyên và nhất quán, tôi đã có thể đảm bảo thứ hạng 369 toàn cầu trong Google Code Jam I / O Women 2020 và thứ hạng toàn cầu 1114 trong Google Kickstart Round C 2020. Ngoài ra, tôi đã đạt được Thứ hạng toàn cầu 97 , 462 trong CodeForces round 713 và 642 (Div 3) và 140 , 220 trong CodeChef tháng 7 và tháng 2 vòng cook-off năm 2020 (Div 2) tương ứng .

Tuyên bố từ chối trách nhiệm: Cần lưu ý rằng mọi thứ được đề cập ở đây là quan điểm cá nhân của tôi, do đó có nhiều khả năng có sự khác biệt ý kiến ​​ở một số nơi.

Thông qua blog này, tôi sẽ giải quyết một số câu hỏi liên quan đến CP liên quan đến vấn đề mà mọi người thường tiến thoái lưỡng nan. Để làm cho nó thú vị, nó ở dạng bảng câu hỏi. Chúc các bạn đọc vui vẻ!

Mục lục:

[1] CP là gì?

[2] Ai nên làm CP?

[3] CP có cần thiết cho các vị trí bẻ khóa không?

[4] Nên bắt đầu từ nền tảng nào?

[5] Khi nào là thời điểm lý tưởng để bạn tham gia CP?

[6] Điều kiện tiên quyết là gì?

[7] Cách tiếp cận lý tưởng để giải quyết câu hỏi là gì?

[8] Tầm quan trọng của các cuộc thi.

[9] Làm thế nào để đối phó với tình huống khi bạn không thể giải quyết thắc mắc?

[10] Lời khuyên cuối cùng dành cho các lập trình viên mới chớm nở

[1] CP là gì?

Lập trình cạnh tranh giống như một môn thể thao lập trình bao gồm nhiều người tham gia cạnh tranh với nhau để đạt được kết quả tốt hơn. Một lập trình viên cạnh tranh triển khai thuật toán của họ và gửi nó đến hệ thống cuộc thi. Sau đó, thuật toán được thử nghiệm bằng cách sử dụng một tập hợp các trường hợp thử nghiệm và nếu nó vượt qua tất cả chúng, nó được chấp nhận.

Tín dụng hình ảnh: behuman.ai

Lập trình cạnh tranh đã được chứng minh là một cách tuyệt vời để học các thuật toán, vì nó khuyến khích thiết kế các thuật toán thực sự hoạt động, thay vì phác thảo các ý tưởng có thể hoạt động hoặc không. Nó liên quan đến việc thiết kế và triển khai các thuật toán một cách hiệu quả.

Nhiều nền tảng trực tuyến và các công ty tổ chức các cuộc thi lập trình. ví dụ: Hashcode, Kickstart, CodeJam của Google và HackerCup của Facebook. Một trong những cuộc thi lập trình cạnh tranh nổi tiếng nhất là ICPC (International Collegiate Programming Contest). Các lập trình viên có thể tham gia vào các cuộc thi này, kiểm tra sự hiểu biết của họ, thể hiện kỹ năng của họ và có thể có cơ hội giành được những món quà và giải thưởng thú vị thông qua các cuộc thi này.

[2] Ai nên làm CP?

Mọi người ít nhất nên thử làm CP một lần. Nó giúp nâng cao trí óc của một người và phát triển các kỹ năng phân tích và tư duy. Nó cải thiện kỹ năng lập trình và giải quyết vấn đề và giúp chuẩn bị cho các cuộc phỏng vấn kỹ thuật. Giải quyết các vấn đề lập trình cạnh tranh cũng cải thiện kỹ năng lập trình và gỡ lỗi của một người.

Khi bạn tự đào tạo và tham gia các cuộc thi lập trình, bạn trở nên kỷ luật hơn, nhanh hơn và hiệu quả hơn. Trong môi trường này, bạn giải quyết các vấn đề và viết mã với thời hạn chặt chẽ. Điều này dạy bạn cách tập trung vào một nhiệm vụ và thực hiện nó một cách hiệu quả.

[3] CP có cần thiết cho các vị trí bẻ khóa không?

Không, lập trình cạnh tranh hoàn toàn không cần thiết để bẻ khóa các vị trí nhưng có, nó rất được khuyến khích vì nó cải thiện kỹ năng giải quyết vấn đề. Nó giúp cải thiện khả năng tinh thần và logic vì các vấn đề trong cuộc thi đòi hỏi tư duy, do đó giúp giải quyết các câu hỏi phức tạp một cách dễ dàng. Nó cũng làm cho người đó nhanh hơn và tập trung hơn.

Mặt khác; trong Phát triển web, chúng tôi học các công nghệ thường xuyên thay đổi, vì vậy tôi thích dành nhiều thời gian hơn để cải thiện kỹ năng giải quyết vấn đề hơn là phát triển web. Kỹ năng giải quyết vấn đề là cốt lõi của mọi lĩnh vực công nghệ.

Tín dụng hình ảnh: geeksforgeeks.org

-> Làm thế nào để bắt đầu CP?

Bây giờ câu hỏi đặt ra, làm thế nào để bắt đầu với lập trình cạnh tranh. Bắt đầu với việc học những kiến ​​thức cơ bản của một ngôn ngữ lập trình (có thể là bất kỳ ngôn ngữ nào trong C ++ hoặc Java, 2 ngôn ngữ này là những ngôn ngữ được khuyến nghị). Sau khi học những điều cơ bản, hãy bắt đầu thực hành các vấn đề. Đối với điều này, bạn có thể bắt đầu với HackerRank vì đây là nền tảng thân thiện với người mới bắt đầu nhất và giúp phát triển các kỹ năng giải quyết vấn đề cơ bản một cách dễ dàng.

Sau khi làm quen với các vấn đề cơ bản , bạn có thể bắt đầu thực hành các câu hỏi trên Codeforces . Nó là một trong những nền tảng tốt nhất để lập trình cạnh tranh. Dần dần bắt đầu tham gia các cuộc thi và cứ 3/4 giờ giải quyết vấn đề, hãy dành ít nhất 1 giờ để học và ôn tập các khái niệm.

Tìm hiểu cấu trúc dữ liệu và thuật toán , bắt đầu với phân tích độ phức tạp không gian và thời gian, tiếp theo là học cấu trúc dữ liệu như Mảng, Danh sách được liên kết, Ngăn xếp, Hàng đợi, Cây, Đống, Đồ thị, Thử nghiệm cùng với các thuật toán như Tìm kiếm, Sắp xếp, Tham lam, Phân chia và Chinh phục và Lập trình động.

Thực hành, thực hành và thực hành như thực hành là cách duy nhất để cải thiện trong lập trình cạnh tranh.

[4] Nên bắt đầu từ nền tảng nào?

Theo tôi, Codeforces là nền tảng tốt nhất để lập trình cạnh tranh. Nó tổ chức các cuộc thi ngắn rất thường xuyên, và mức độ và chất lượng của các câu hỏi cũng rất tốt.

Họ cũng có một tính năng là tham gia vào một cuộc thi ảo, có nghĩa là nếu bạn bỏ lỡ cuộc thi trực tiếp, bạn vẫn có thể tham gia cuộc thi ảo, sự khác biệt duy nhất là trong trường hợp tham gia ảo sẽ không có thay đổi về xếp hạng.

Codeforces gần đây đã giới thiệu 2 phần mới, Catalog và EDU. Trong phần danh mục, có các blog về chủ đề liên quan đến CP được viết bởi các lập trình viên hàng đầu. Và trong phần EDU, có một khóa học bao gồm lý thuyết và các vấn đề thực hành liên quan đến một số chủ đề quan trọng để lập trình cạnh tranh.

Ngoài Codeforces, có nhiều nền tảng khác như CodeChef, Topcoder, AtCoder, và nhiều nền tảng khác.

[5] Khi nào là thời điểm lý tưởng để bạn tham gia CP?

Ai cũng có thể bắt đầu bất cứ lúc nào, không có cái gọi là thời điểm lý tưởng vì nó phụ thuộc vào động cơ thực hiện. Một số người dành 3–4 năm và vẫn không thể cải thiện trong khi một số người đạt đến mức tuyệt vời chỉ trong 3–4 tháng, vì vậy tất cả đều khác nhau ở mỗi người. Khuyến nghị của tôi là bắt đầu càng sớm càng tốt.

[6] Điều kiện tiên quyết là gì?

Không có điều kiện tiên quyết như vậy. Bạn có thể học kiến ​​thức cơ bản của bất kỳ ngôn ngữ lập trình nào như cú pháp, một số DSA cơ bản như Mảng, Chuỗi và các thuật toán như Sắp xếp và Toán học. Sau đó, bạn có thể bắt đầu giải quyết các câu hỏi và tìm hiểu các khái niệm mới trong khi giải quyết các câu hỏi.

[7] Cách tiếp cận lý tưởng để giải quyết câu hỏi là gì?

Đọc kỹ câu hỏi , cố gắng ghi lại tất cả các điểm được đưa ra trong câu hỏi, không có thông tin nào xuất hiện ở đó một cách không cần thiết. Sau đó, cố gắng xác định độ phức tạp thời gian dự kiến ​​của thuật toán bằng cách phân tích các ràng buộc được đưa ra trên đầu vào. Sau đó, cố gắng hình thành cách tiếp cận và tối ưu hóa nó nhiều nhất có thể bằng cách sử dụng các cấu trúc dữ liệu và thuật toán phù hợp.

Nếu bạn không thể tìm ra thuật toán, hãy thử lấy gợi ý từ bạn bè hoặc đọc 1–2 dòng bắt đầu của bài xã luận và tự mình nghĩ ra toàn bộ cách tiếp cận. Nếu bạn vẫn chưa thể hình thành cách tiếp cận thì hãy đọc bài xã luận và tự thực hiện nó. Một lần nữa nếu bạn gặp bất kỳ vấn đề nào, hãy xem giải pháp và phân tích lý do tại sao bạn không thể giải quyết nó, đồng thời ghi chú những điều mới học được.

Nếu bạn gặp một phương pháp mới để giải quyết câu hỏi hoặc tìm thấy một cái gì đó mới như một mẹo nhỏ. Một số ví dụ về các thủ thuật đôi khi có thể hữu ích:

  • Sử dụng lệnh gọi bằng tham chiếu trong trường hợp vectơ và chuỗi thay vì gọi theo giá trị
  • Sử dụng bản đồ thay vì bản đồ không có thứ tự vì độ phức tạp thời gian trong trường hợp xấu nhất của bản đồ không có thứ tự là tuyến tính

[8] Tầm quan trọng của các cuộc thi.

Các cuộc thi đóng một vai trò quan trọng trong việc nâng cao kỹ năng giải quyết vấn đề. Cuộc thi chuẩn bị cho bạn giải quyết các câu hỏi trong một môi trường có thời gian , chúng giúp bạn cảm thấy áp lực khi giải các câu hỏi mới trong một thời hạn nhất định. Nhiều công ty có các vòng kiểm tra mã hóa trực tuyến , vì vậy việc tham gia các cuộc thi sẽ giúp bạn thực hiện tốt hơn ở đó.

Cố gắng đưa ra từng cuộc thi trực tiếp và nếu vì lý do nào đó mà bạn không thể đưa ra cuộc thi trực tiếp, hãy tham gia vào một cuộc thi ảo . Nhiều nền tảng trực tuyến cho phép bạn tham gia vào một cuộc thi ảo. Đừng cảm thấy mất động lực nếu xếp hạng của bạn giảm sau cuộc thi. Thăng tiến sau cuộc thi là rất quan trọng. Cố gắng giải quyết thêm ít nhất một câu hỏi nữa.

Giả sử bạn giải được 2 câu hỏi trong suốt cuộc thi thì hãy thử giải câu thứ 3 cũng sau cuộc thi và phân tích nguyên nhân tại sao bạn không giải được câu hỏi trong suốt cuộc thi.

[9] Làm thế nào để đối phó với tình huống khi bạn không thể giải quyết thắc mắc?

Sẽ có nhiều khi bạn không thể giải quyết câu hỏi. Có thể có 2 lý do cho điều này: Một có thể là câu hỏi sẽ được giải quyết bằng một thuật toán hoặc cấu trúc dữ liệu mà bạn không biết hoặc nó là một dạng câu hỏi hoàn toàn mới. Vì vậy, trong trường hợp này, hãy xác định điều đó và tìm hiểu nó và sau đó cố gắng giải quyết câu hỏi. Trường hợp thứ hai có thể là bạn đã quen với chủ đề của câu hỏi nhưng vẫn chưa thể nghĩ ra cách tiếp cận. Trong trường hợp này, hãy cố gắng chia câu hỏi thành các nhiệm vụ nhỏ hơn nếu có thể và sau đó cố gắng giải quyết, đưa ra gợi ý và thảo luận với đồng nghiệp. Nếu không có cách nào trong số này hiệu quả, hãy xem bài xã luận và cố gắng phân tích lý do tại sao bạn không thể nghĩ ra nó.

[10] Lời khuyên cuối cùng dành cho các lập trình viên mới chớm nở

Tham gia nhiều cuộc thi nhất có thể. Tôi thường thấy các sinh viên dành nhiều tháng cho lý thuyết SXSH và không bao giờ tham gia một cuộc thi (trực tuyến hoặc tại chỗ) vì sợ rằng họ không đủ kiến ​​thức để bắt đầu cạnh tranh hoặc sợ áp lực của một cuộc thi hẹn giờ. Viết mã chính xác và nhanh chóng là một phần quan trọng của CP và điều này chỉ có thể được cải thiện bằng cách tham gia một cuộc thi trực tiếp. Ngoài ra, hãy tìm kiếm xung quanh bạn những người thích CP. Được bao quanh bởi những người như vậy sẽ giúp bạn luôn có động lực.

Vì bạn đã làm đến cùng rồi 🤗, đây là danh sách các tài nguyên mà tôi đã sử dụng trong hành trình CP của mình

-> Các trang web để thực hành

  • Codeforces:https://codeforces.com/
  • Codechef:https://www.codechef.com/
  • Topcoder:https://www.topcoder.com/
  • AtCoder:https://atcoder.jp/
  • CLRS: Bấm vào đây
  • Lập trình cạnh tranh: Steven Halim: Nhấp vào đây
  • Cẩm nang lập trình viên cạnh tranh: Bấm vào đây
  • Hướng dẫn của Người quá giang về các cuộc thi lập trình: Bấm vào đây
  • Các thuật toán CP:https://cp-algorithms.com/
  • đơn giản:https://www.youtube.com/c/takeUforward
  • Cuộc thi AtCoder DP:https://atcoder.jp/contests/dp
  • Danh sách phát Aditya Verma DP: (https://www.youtube.com/playlist?list=PL_z_8CaSLPWekqhdCPmFohncHwz8TY2Go)

Codess.Cafe: LinkedIn | YouTube | Trang web | Trung bình | Twitter

© Copyright 2021 - 2023 | vngogo.com | All Rights Reserved