入门算法竞赛——提升你的算法技能
首先发布在我的邮件列表中
我大约在 2014 年进入大学后就开始学习算法竞赛。
我一直认真地进行CP治疗,直到2015年。
我的职业生涯只有一年,但因为这是我的首要任务,所以我在那段时间里学到了很多东西。
在我们继续之前,你可能想知道我为什么离开CP。
那是因为我当时对开源软件产生了兴趣,创建酷炫的 GitHub 项目成了我的新爱好。
那是个明智的决定吗?
只有时间才能给出答案。但就我未来的计划而言,这似乎是个不错的决定。
那么,让我们开始这篇关于算法竞赛的指南吧。
步骤 1
学习 C、C++ 或 Java。如果你能学会 C,就能学会 C++,我强烈建议你这样做。
为什么?因为 C++ 有 STL,其中包含 Set、Map、Vector 等对象。这些对象在解决某些类型的问题时非常有用。
我从未使用过 Java,但看到一些专业程序员(例如 uwi)喜欢使用它,我认为它也是一个不错的选择。
再次强调,不要用 Python、Ruby 等语言来做编程竞赛。这些都是非常高级的语言,无法让你对代码拥有足够的控制权。
而且它们运行速度极其缓慢。
步骤 2
我推荐 HackerRank,因为它拥有最好的用户界面,而且对于初学者来说也相对容易上手。
简单来说,任何没有编程/算法经验的人都能解决前几个问题。
做完前四五个问题后你可能会遇到困难,这很正常。在这种情况下,你可以查看题解或者上网搜索答案。
找到之后,一定要先理解它,然后再自己编写代码。
首先,解答所有部分的“简单”题,然后再解答“中等”题。
事实上,能解答一些“中等难度”的问题就足以称自己为 CP 专业人士了。
步骤 3
去Codechef和Codeforces上学习。
Codechef 的长时间比赛是业内最好的,而 Codeforces 则以其 2 小时的比赛而闻名。
尝试两种方式都做,看看你更擅长哪一种。
要提高你的算法竞赛技能,你需要既有速度又有深入思考问题的能力。
CodeChef 的长挑战赛 = 深度思考,而 Codeforces 的轮次挑战赛 = 快速编码
如果你想变得优秀,就应该努力在这两个方面都做到优秀。
但如果你擅长长时间的挑战(深度思考)或者擅长短时间的竞赛(快速思考)都没关系,两者都能帮助你成为一名更优秀的程序员。
第四步
你可以试试 Topcoder,或者就顺其自然吧。
如果你的目标是通过内容营销(CP)获得谷歌总部的推荐和点赞,那么你需要定期投入。也就是说,举办竞赛、努力提升排名并提高你的评分。
否则,你可以把它当作业余爱好,专注于培养其他实用技能。
这些实用技能,再加上你丰富的竞赛编程经验,将对你获得梦寐以求的工作和实习机会大有帮助。
替代路线
你可能已经有一些算法竞赛经验,并且想要学习一些算法。如果是这样,可以看看Codechef 提供的这份算法列表。即使只练习其中排名前 20 的算法,也能让你成为一名高于平均水平的算法竞赛选手。
你也可以在GeeksForGeeks 网站上找到一份不错的算法列表。它们按主题分类,你可以学习排名靠前的算法,或者学习你听说过的算法。
文章来源:https://dev.to/aviaryan/getting-started-with-competitive-programming---build-your-algorithm-skills-2fjd
