编程竞赛方法

时间:2011-12-29 19:14:03

标签: algorithm data-structures

这是一个广泛的问题,但想知道专家的意见。 我遇到了一个文档Suffix arrays – a contest approach,还发现了一些参与者应该准备好这些数据结构的评论。现在,很多在线编程难题都有时间限制。所以我想知道应该准备好的其他数据结构/算法是什么。

3 个答案:

答案 0 :(得分:11)

我已经竞争了大约10年,并且自己创建了一个不那么糟糕的图书馆。大多数真正优秀的竞争对手都有他们的博客,例如传奇Petr Mitrichev,他们在那里解释他们在一些竞争问题上得到的想法。阅读这些可以帮助你 - 如果你看到一个好主意实现它并存储它。 当我看到涉及它们的问题时,我将算法添加到我的库中。这样我可以验证我的实现是否正确 - 如果我已经通过了至少一个实现问题,我只添加一个算法。

这是一个列表,其中包含我的一些算法:

  • 我有一个巨大的几何图书库,其中的类代表点,线,多边形,线段,圆圈以及它们的一些操作(例如交点,点集凸壳等)
  • Tarjan的algorithm用于强连接组件
  • Dinitz流量算法
  • Bipartite匹配实施
  • 最低成本最大流量实施
  • Aho-Corasic字符串搜索算法
  • Knuth-morris-pratt字符串搜索算法
  • Rabin-Karp字符串搜索算法
  • 使用ukonnen的algorithm
  • 的线性时间后缀树
  • 快速指数
  • Polynom实施
  • 大整数实施
  • 分数实现
  • Matrix类实现
  • Prime factorization
  • Eratosthenes Sieve
  • Segment Tree
  • Hungarian algorithm
  • 2-Sat算法。为此,我使用了上面提到的Tarjan算法。

您会注意到上面没有提到一些最基本的算法(如BFS,DFS,Dijkstra),这是因为我没有实现它们。这些算法不能轻易地通过复制和粘贴它们的方式进行推广,一切都可行。另外我花了不到5分钟来编写它们 - 我通常只在我的库中放入难以实现的算法,或者在实现它们时很容易出错。

答案 1 :(得分:1)

查看这些featured articles @ TopCoder。他们真的很酷。

当你参与其中时,我建议参加TopCoder的编程竞赛。因为最好的改进方法是练习和练习。继续参加这样的比赛。

同样Project Euler也真的让人上瘾。

答案 2 :(得分:0)

另外,看一下Programming Challenges书,它是关于这个主题的一个很好的参考 - 它提供了在online法官的支持下成功举办编程竞赛所需的主题。