设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

搞定编程竞赛必知哪10个算法?

2014-10-21 11:42| 发布者: joejoe0332| 查看: 821| 评论: 0|原作者: 轩小粉儿|来自: jobbole.com

摘要: 这个问题来自 Quora ,下面是 Brian Bi 的回复,2200+ 赞,由严伟翻译。动态规划(DP)似乎占据了大部分的竞赛题目(有估计说占了三分之一)。当然,DP也不是一个学一次就Ok的单一算法,所以,也许这并没有回答你的 ...
  这个问题来自 Quora ,下面是 Brian Bi 的回复,2200+ 赞,由严伟翻译。


  动态规划(DP)似乎占据了大部分的竞赛题目(有估计说占了三分之一)。当然,DP也不是一个学一次就Ok的单一算法,所以,也许这并没有回答你的问题。


  我想这还取决于你是否把数据结构与算法放在同一个等级中考虑。如果你想要在编程竞赛中一展风采的话,当然,有些数据结构是你应该熟悉的。其中最重要 的有范围树(Range Tree,也被称为线段树或区间树)和树状数组(BITs),也被称作Fenwick树。除此之外,许多DP算法使用了一个前缀和数组(prefix sum array)。


  我能想到的最精华的单一算法如下所列,排名不分先后。然而,你可能会因为这其中的一些算法在真正的竞赛中很少出现而感到失望。绝大多数非动态规划问题似乎都是各种ad hoc网络与数据结构,所以你只需要练习练习以熟练掌握它们。


  (再一次声明,我仅列出了满足如下性质的算法:有单一输入集;计算输入集的某个函数;不携带输入值之间的状态。这些性质将下面的算法与数据结构区分开来。由定义,数据结构要保留状态以及算法的等级,还有像是DP这样的算法技术,它们并没有前者所计算的某个具体函数。)


1.Eratosthenes筛法,或另一种素数筛法

2.深度优先搜索

3.广度优先搜索

4.Dijkstra算法

5.Floyd–Warshall 算法

6.Either Kruskal算法 或称 Prim算法

7.一些拓扑排序的实现,比如使用DFS

8.凸包(我推荐单调链算法)

9.坐标压缩

10.Edmonds–Karp,或者Ford–Fulkerson方法的另一种实现;亦或预流推进算法;又或者,如果你在准备ACM codebook,那么就Dinic算法。(注意:最大流不允许出现在国际资讯赛中,尽管如此,它也可能会出现在国家队选拔赛中。)


其他回复,可见 Quora 原帖


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部