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

再没有比算法更让人头疼的东西了吧!

前两天参加了一个编程大赛http://www.ijiami.cn/newsInfo?id=519&v=2,有感于算法,所以整理了这篇关于编程竞赛的10个算法。

动态规划(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算法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值