编程竞赛及其准备方法
Posted 六一编程网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程竞赛及其准备方法相关的知识,希望对你有一定的参考价值。
Programming… Competitive Programming…
It teaches you how to think?. 如果您是一名程序员,您可能已经了解了史蒂夫·乔布斯(Steve Jobs)所说的这些行的深刻含义,并且即使在关闭计算机后,您也可能会继续考虑编写在项目中编写的程序或代码。进入编程后,您不只是学习编码,而是通过将代码分解为较小的块,然后使用基于逻辑的创造力从不同角度解决问题,从而学习思维的艺术。
编程很有趣,编程是大脑的一项运动,编程是一项智力运动,当这项运动在互联网上举行时,程序员作为参赛者,那么它被称为竞争性编程(Competitive Programming)。
为什么你要为这个游戏做好准备并参与其中?
编程是一项具有挑战性的角色,一旦进入这一领域,您将面临新的挑战,您可能必须解决一些以前没有人解决过的问题,或者他们的解决方案在任何地方都不存在。届时,您将可以使用问题解决和逻辑能力在最短的时间内提出解决方案。因此,这些具有竞争力的编程背后的一个明确目标是为程序员做好准备,使其逻辑能力增强,并且他/她能够为具有挑战性的情况编写代码。
另一个原因是,许多大公司,例如Google,Facebook。微软和亚马逊通过竞争性编程来招聘,因此,如果您想加入这些公司,那么您确实需要动手参与竞争性编程。不管您是新手程序员,还是您之前都写过一些代码,我们都将告诉您一些步骤,方法和技巧,以帮助您做好竞争性编程的准备。让我们详细讨论一下。
请记住,您需要精通以下各项:
任何编程语言语法(选择高度推荐的C / C++ / Java)。
时空复杂度算法分析。
思考蛮力解决方案(Brute Force Solution)的能力。
所有数据结构的良好实践,如数组、列表、堆栈、队列、树、图、Trie等。
如何为竞争性编程做准备?
1.选择一种编程语言:首先你需要选择一种编程语言,你最熟悉它并学习其语法。它可以是C、C++、Java、Python或任何编程语言。编程语言是一种工具,通过它你可以与计算机通信,并指示操作方法。与任何其他语言相比,C++、C或Java是一种更快的编程语言,它也被允许在任何编码挑战或面试中使用。所以,如果你从这三种语言中选择一种是好的,如果你对另一种语言感到满意的话,仍然没有限制。如果你是初学者,你可以使用python,因为它很容易学习,而且语法是用户友好的。如果您至少对任何编程语言都有中级掌握,那么使用任何编程语言的语法编写代码都不会遇到困难。
2.理解时间和空间复杂性的概念:在大多数情况下,对于一个问题存在多个解决方案,所以你需要想出最佳的解决方案,即最优的解决方案,这是由算法解决问题所花费的时间和空间决定的。因此,了解这两个概念以针对该问题编写最佳解决方案非常重要。
3.学习数据结构和算法的基础知识:DSA是编程的核心,在解决竞争性编程中的编码问题时,您不能忽略它。数组,链接列表,堆栈,队列,树,Trie,图形,排序,递归,动态编程DSA的所有这些基本构建块都将帮助您成为一名优秀的程序员。您需要知道最重要的事情是什么,何时何地应用它们。这意味着哪种数据结构适合哪种类型的问题,以获得最佳解决方案。您应该知道如何在编码问题中将两者完美地结合在一起。
4.应对挑战并解决编码问题:您已经学习了编程语言,了解了时间和空间的复杂性,还了解了DSA的基础知识,现在是时候拿起你手中的小刀去杀死丛林中的狮子了。您需要参与不同编码平台上的编码挑战。参加比赛之前,如果您自己练习一些挑战然后再参加比赛,那就太好了。如果你正在寻找这些编码平台的资源,那么很多站点都有,比如Codechef、Codeforces、Topcoder、SPOJ。这是freecodecamp(https://www.freecodecamp.org/news/the-10-most-popular-coding-challenge-websites-of-2016-fb8a5672d22f/)上这些站点的完整列表。
从这些站点的基础级别开始,一旦建立了信心,就可以脱离舒适区,并逐步尝试解决复杂的问题。一旦开始在这些站点上解决问题,您需要记住以下几点…
您需要了解这些平台上的输入,输出和测试用例。检查链接“在Codechef上解决问题”(https://www.youtube.com/watch?v=YBZyBjoHXSY)以解决这些平台上的编码问题。
这些平台在大量输入上运行您的代码,然后取出输出并将其存储在一个位置。他们也有作者代码,而作者代码是问题的正确代码。他们在作者代码上运行相同的输入集并创建输出,然后,它们匹配这两个输出。如果这两个输出匹配,那么您的解决方案将被视为接受,并且您的代码应通过所有测试用例才能被接受。
一旦看到这些编码平台上的问题,并以为自己没有能力或解决这些问题的思维能力不高,便可能一开始就陷入僵局。原因是作为一个初学者,您只知道该语言的语法以及一些基本的循环或功能,因此,当您遇到这些挑战时,您会陷入僵局并开始怀疑自己的能力,而您不应该这样做。您需要了解,有一个学习竞争性编程的过程,并且您必须逐步从0级过渡到最高级别。
5.定期练习和编码:您的耐心,奉献精神和一贯性对于成为一名优秀的竞争程序员非常重要。每天在这些平台上继续练习编码问题,或者您也可以借助白板来解决编码问题,但重要的是要定期进行。开始后,无论问题有多困难或解决单个编码问题需要花费多少时间,都坚持下去。参加各种编码竞赛,并向其他程序员学习。您的日常实践将使您成为完美的编码人员,良好的问题解决者,并且您将能够找到针对特定问题的合适数据结构,这在软件开发中非常重要。
提示:
作为一个竞争编程的初学者,就像给小学生一篇博士毕业论文,然后让他来解决问题。一旦你知道了语法、循环、函数和所有的东西,你就会有同样的感觉,但是你无法解决这些编码问题。要明白每个初学者都会经历这个阶段。
提交越多,这些编码平台上的问题越容易,因此您可以按照解决问题的人员的数量对这些问题进行分类。
创建社团并尝试找到志趣相投的人,这些人具有不同的技能,以便您可以互相学习,即使您在大学时,也可以组成一个团队并加入ACM ICPC。
您可以下载应用程序Code Buff(https://play.google.com/store/apps/details?id=com.codebuff),该应用程序将帮助您获得在许多不同平台上发生的竞争性编程竞赛的通知。它还允许用户设置提醒。
为了参与竞争性编程,您可以采用基于项目的学习方法,在这种方法中,一旦您了解语言的语法和基本原理,就可以创建多个具有挑战性的项目,在做了很多项目后,你会意识到逻辑在开发中是如何工作的,这将帮助你提高编程能力。之后,您可以转向竞争性编程,并且您会发现现在解决竞争性编程的问题变得更加容易,并且现在您可以做得很好。
编程真的需要很大的耐心,所以如果你得到了错误的答案,不要灰心或放弃。这就是大多数人对编程失去兴趣的地方。如果你脑子里有声音说你的方法是正确的,那就试一天,一周,几个月。如果你找不到解决方案,在google上搜索它,如果你没有找到主题,请寻求帮助,阅读程序员为解决问题而采取的各种方法,但不要放弃。另外,只有当你完全确信自己已经做了很多努力,现在却什么也做不了时,你才能阅读解决方案。但请确保再次编码相同的问题。只有当你保持你的一致性并且不停止的时候,你才会开始一天比一天进步。
以上是关于编程竞赛及其准备方法的主要内容,如果未能解决你的问题,请参考以下文章