📜  什么是竞争性编程以及如何准备?

📅  最后修改于: 2021-09-08 12:49:44             🧑  作者: Mango

编程……竞技编程……

它教你如何思考? .如果您是一名程序员,您可能已经理解了史蒂夫乔布斯引用的这些话的深层含义,并且您可能还经历过,即使在关闭计算机之后,您仍然继续思考编程内容或您在项目中编写的代码。一旦你进入编程,你就不会学习如何编码,但你也会学习“思维艺术” ,通过将你的代码分解成更小的块,然后使用你基于逻辑的创造力从不同角度解决问题。
编程很有趣,编程是对大脑的锻炼,编程是一项智力运动,当这项运动通过互联网进行时,运动程序员作为参赛者,则称为竞争性编程。查看维基百科关于竞争性编程的内容。

如何为竞争性编程做准备

为什么你应该为这个游戏做好准备并参与其中?

编程是一个具有挑战性的角色,一旦你进入这个领域,你就会遇到新的挑战,你可能需要解决一些以前没有人解决过的问题,或者他们的解决方案在任何地方都不存在。那时,您应该使用解决问题的能力和逻辑能力在尽可能短的时间内提出解决方案。因此,这些竞争性编程背后的一个明确目标是让程序员做好准备,使其逻辑能力提高,并且能够为具有挑战性的情况编写代码。
另一个原因是很多大公司,比如谷歌、Facebook。微软、亚马逊通过竞争性编程招聘,所以如果你想进入这些公司,那么你真的需要在竞争性编程中动手。无论您是新手程序员还是之前编写过一些代码,我们都会告诉您一些步骤、方法和技巧,以帮助您为竞争性编程做好准备。让我们详细讨论一下。

请记住,您需要精通以下各项:

  • 任何编程语言语法(选择任何但强烈推荐的C / C++ / Java )。
  • 时间和空间复杂度算法分析。
  • 能够思考蛮力解决方案。
  • 所有数据结构的良好实践,如数组、列表、堆栈、队列、树、图、特里等。

如何为竞争性编程做好准备?

1. 选择一种编程语言:首先,你需要选择一种你最熟悉的编程语言并学习它的语法。它可以是任何 C、C++、 Java、 Python或任何编程语言。编程语言是一种工具,您可以通过它与计算机进行通信并指示要执行的操作。与任何其他语言相比,C++、C 或Java是一种更快的编程语言,也可以用于任何编码挑战或面试。因此,如果您从这三种语言中选择一种,那么如果您对另一种语言感到满意,则没有任何限制。如果您是初学者,您可以使用Python,因为它易于学习且语法对用户友好。如果您至少掌握了任何编程语言的中级知识,那么使用它的语法编写代码就不会遇到困难。

2. 理解时间和空间复杂度的概念:在大多数情况下,一个问题存在不止一种解决方案,所以你需要想出最好的解决方案,即最优的解决方案,这取决于有多少时间和空间算法需要解决一个问题。因此,了解这两个概念以编写问题的最佳解决方案非常重要。

3. 学习数据结构和算法的基础知识: DSA 是编程的核心,您在解决竞争性编程中的编码问题时不能忽视它。数组、链表、堆栈、队列、树、特里树、图、排序、递归、动态编程所有这些 DSA 的基本构建块将帮助您成为一名优秀的程序员。最重要的是您需要知道应用它们的内容、时间和地点。表示哪种数据结构适合哪种类型的问题才能得到最优解。您应该知道如何在编码问题中应用两者的完美组合。

4.接受挑战并解决编码问题:您已经学习了一门编程语言,您已经学习了时间和空间复杂度,并且您还涵盖了 DSA 的基础知识,现在是时候拿起手中的刀杀了狮子丛林。是的……您需要参加不同编码平台上的编码挑战。在参加比赛之前,如果您自己练习一些挑战,然后参加比赛,那就太好了。如果您正在寻找这些编码平台的资源,那么有很多站点,例如 Geeksforgeeks、Codeforces、Codechef、Topcoder、SPOJ。

从这些网站的基础开始,一旦你建立了信心,就走出你的舒适区,逐渐尝试解决复杂的问题。一旦您开始解决这些网站上的问题,以下是您需要牢记的一些要点……

  • 您需要了解这些平台上的输入、输出和测试用例。检查链接如何开始竞争性编程?。
  • 这些平台在大量输入上运行您的代码,然后取出输出并将其存储在一个地方。他们也有作者代码,作者代码是问题的正确代码。他们在作者代码上运行相同的输入集并创建输出,然后匹配这两个输出。如果这两个输出匹配,则您的解决方案被视为已接受,您的代码应通过所有测试用例才能被接受。
  • 一开始看到这些编码平台上的问题,你可能一开始就愣住了,认为自己不是天生的,或者你的思维能力没有高多少来解决这些问题。原因是作为初学者,您只知道语言的语法和一些基本的循环或函数,因此当您遇到这些挑战时,您会冻结并开始怀疑您不应该这样做的能力。您需要了解学习竞争性编程是有一个过程的,您必须从 0 级逐渐过渡到顶级。

5. 经常练习和做:你的耐心、奉献精神和一致性对于成为一名优秀的有竞争力的程序员非常重要。每天在这些平台上练习编码问题,或者您也可以借助白板来解决编码问题,但重要的是要定期进行。一旦你开始,不要犯错休息一下。坚持下去,无论问题有多么困难,或者解决单个编码问题需要多长时间。参加不同的编码比赛,向其他程序员学习。您的日常实践使您成为一名完美的编码员、优秀的问题解决者,您将能够为特定问题找到合适的数据结构,这在软件开发中非常重要。

尖端:

  • 作为竞争性编程的初学者,就像给第 5 或第 6 名标准学生一份 IIT 论文,然后让他解决问题。一旦您了解了语法、循环、函数和所有内容,您就会有同样的感觉,但您无法解决这些编码问题,这完全没问题。了解每个初学者都会经历这个阶段。
  • 提交越高,问题在这些编码平台上就越容易,因此您可以按解决问题的人数对这些问题进行排序。
  • 创建社区并尝试寻找具有不同技能的志同道合的人,以便您可以相互学习,如果您在大学,那么也可以组建一个团队并参加 ACM ICPC。
  • 您可以下载Code Buff应用程序之一,该应用程序将帮助您获得在许多不同平台上发生的竞争性编程编码竞赛的通知。它还允许用户设置提醒。
  • 要跳入竞争性编程,您可以遵循基于项目的学习方法,在这种方法中,一旦您了解语言的语法和基本基础知识,您就可以创建多个具有挑战性的项目,在完成大量项目后,您将意识到逻辑是如何工作的开发,这将帮助您提高编程能力。之后,你可以转向竞争性编程,你会意识到处理竞争性编程的这些问题现在更容易了,现在你可以做得很好。

编程真的需要很大的耐心,所以不要气馁,如果你得到错误的答案,不要放弃。这是大多数人对编程失去兴趣的地方。如果你头脑中的一个声音说你的方法是正确的,请继续尝试一天、一周、几个月。如果您在 google 上找不到解决方案,如果您没有找到主题,请寻求帮助,阅读编码人员为解决问题而采取的各种方法,但不要放弃。此外,只有当您完全确定您已经付出了很多努力而现在您无能为力时,您才能阅读解决方案。但一定要再次编码同样的问题。只有当你保持你的一致性并且不要停止时,你才会开始一天一天的进步。

您还可以查看 Geeksforgeeks 在线课程以学习数据结构和算法,这些课程设计精良,由行业专家教授。