您的位置:首页 > 其它

算法系列(一)基本概念

2016-05-29 10:17 281 查看

一、什么是算法

算法是完成一个任务所需的一系列步骤,计算机解决计算机问题,我们希望从一个计算机算法中获得两个结果,给定一个输入,它应该总能够产生该问题的正确输出结果,并且在运行该算法时,能够有效的利用资源。(出自《算法基础》)

算法是为求解一个问题所需要遵循的、被清楚指定的简单指令集合。(出自《数据结构与算法分析》)

二、数学基础

1、如果存在常数c和n0,使得当N>=n0时,T(N)<=cf(N),则标记T(N)=O(f(N))
2、如果存在常数c和n0,使得当N>=n0时,T(N)>=cg(N),则标记T(N)=Ω(g(N))

3、T(N)=Θ(h(N)),当且仅当T(N)=O(h(N)),和T(N)=Ω(h(N))
用渐进符号来表示增长趋势,
常用大O标记法描述算法时间复杂度

三、简单算法证明方法

通常用归纳法、循环不变式,反证法等方式证明。
作为普通的算法学习者,通常不会去证明每个算法,而只是学习算法的实现,了解原理。额,个人算法、数学功底不够,基本很少去做严格推导验证正确性。有些算法的正确性是显而易见的,给人一种肯定是正确的感觉,比如大部分排序算法,如果足够严谨,数学功底不错,能推导一下更好。

学习算法是比较枯燥的,能够了解大部分算法,灵活使用基本算法就很不错了。实际编程中我们往往使用现有的算法,甚至很少自己实现。比如排序。但是根据自己的项目需要,很多时候还是要做一些算法变化的。而且要成为一个出色的程序员,算法还是很有用的,要不然那么多牛公司也不会基本都会面一下算法。

四、算法的基本评估

时间复杂度,空间复杂度。这两个维度是矛盾的,有时候需要时间换空间,有时候需要空间换时间,大部分情况是空间换时间。毕竟现在计算机内存比较大,磁盘就更不用说了。

五、简单算法实现,代码参考

个人提交了一个简单算法实现的github库,会慢慢完善
java语言实现,比较基础。有不对的地方请多指教。 https://github.com/robertjc/simplealgorithm

六、参考书籍

《数据结构与算法Java语言描述》个人是做android开发,使用java语言,肯定有必要好好看一下
《算法基础打开算法之门》没有一句代码,书比较薄,前6章比较容易能看懂,个人是从第七章往后就懵了
《算法导论》算法圣经,感觉不适合初学者,没有基础,很多人说是本入门的书,忽悠人的,感觉看不懂也千万不要气馁,看过一遍,对基本算法有个了解。看别的算法书也有个侧重点。
《计算机程序设计艺术》看过,没啥印象了,看的时候不知深浅,后来看到一句评价“如果你认为《算法导论》太浅,你可以尝试读一下《THE ART OF COMPUTER PROGRAMMING》”呵呵呵呵~~~~~~~~
《算法竞赛入门经典》大学参加算法竞赛看的书,比较适合学生看

欢迎扫描二维码,关注公众号

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: