搞定编程大赛必知哪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算法。

时间: 2024-10-16 21:11:32

搞定编程大赛必知哪10个算法?的相关文章

程序员必知的10大基础实用算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的 架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元

开发Mhealth(即:Mobile Health 移动医疗)应用必知的10个掘金点

近 日,著名移动技术咨询公司Research2Guidance发布了最新版的<移动医疗应用开发者经济>报告.在过去的两年半里,iOS和Android 两大主流移动平台上的移动医疗应用(以下简称mHealth应用)呈现出爆发式的增长,截止2014年Q1季度,mHealth应用数量已超过10万.本 文综合mHealth应用报告,总结出了移动开发者想要进驻mHealth应用市场所必须关注的那些事儿. 1. mHealth应用开发者的收入来源 调查显示,69%的mHealth应用开发者主要收入来源于服

人人必知的10个 jQuery 小技巧

原文地址:http://info.9iphp.com/10-jquery-tips-everyone-should-know/ 人人必知的10个 jQuery 小技巧 收集的10个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 返回顶部按钮 你可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件. // Back to top $('a.top').click(function () { $(document.body).animate({sc

编程面试中排名前10的算法

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(int x) // 获得

程序员必知的10大编码原则

每个程序员的职业生涯都是与一个又一个代码共度的,每天除了码代码还是码代码.总结回顾下我的职业生涯,经历的多了,总觉得不总结点有用的东西出来感觉对不起程序员码代码这份职业!编码多了,这里就给大家总结下编写和运行代码是一些需要注意的原则.仅供参考! 1.偏执 这一点与我而言几乎是天生的.原谅我可能是处女座的程序员! 我从不相信电脑,也不相信我刚刚修复的bug真的已经修复好了,总之我不相信任何东西.我甚至连自己都不相信.除非多次检验之后,我才会相信我已经如我所愿地理解了问题. 偏执是我的诤友,而且我认

网页设计师必知的10则SEO

如今,Web设计师在设计Web外观与风格的同时,往往还负责了前端代码的编写.换???话说,SEO的相当一部分责任是落在他们肩上的.然而,大 量的 Web设计师对SEO的熟悉程度仍不足以让他们写出一个符合要求的Web.这一现象决定了本文存在的意义,一篇旨在为普通Web设计师提高SEO技巧提供 一些重要窍门的日志诞生了! 1.让代码变得更美,为设计创设环境 搭建Web前端 的时候,尽可能使用有语义的code.用描述性的标签来组织页面结构,可以提高内容对搜索引擎的可读性.这也会让页面修饰的工作变得更加

shell编程基础必知

shell编程 ################################################ 静态语言 动态语言 ################################################ 编程语言:机器语言,汇编语言,高级语言 ################################################ 面向对象的编程语言:sehll c 面向对象的编程语言:JAVA Python perl c++ ################

JavaScript开发人员必知的10个关键习惯

还在一味没有目的的编写JavaScript代码吗?那么你就OUT了!让我们一起来看看小编为大家搜罗的JavaScript开发人员应该具备的十大关键习惯吧! 随着新技术的不断发展,JavaScript已经不再仅仅只是一个网络语言.现在,我们能够看到很多使用JavaScript来构建基于本地浏览器的Web应用程序的手机,同时也有非常多的灵活的Web应用程序,如Trello.基于JavaScript打造的应用程序在世界上已经非常流行了. 目前,JavaScript仍然是一门比较容易使用和处理的编程语言

UX设计师必知的10个技能

技术行业的发展步伐正在越来越快. 新技术,新产品,新服务和新的工作方式以惊人的速度出现. 今天的真实的在明天不一定是真实的,今天需要的工作技能也得改变才能满足和适应未来的需求. 凝视着我的水晶球,我列出来了10个技能,我觉得所有未来的UX设计师都需要知道这些. 1.手机&平版电脑设计 随着智能手机和平板电脑越来越多地嵌入到人们日常生活的结构中,显然所有未来的UX设计师都需要高度熟练地为越来越多的移动设备做用户体验设计. 当然,移动设备的设计不仅是为了较小的屏幕,而且还考虑了使用这些设备的环境和环