算法开篇

原文地址,转载请注明出处:http://blog.csdn.net/anzelin_ruc/article/details/8180831 ©安泽林



1.废话在前

最近又刚刚结束了一年一度的校园招聘,从师兄们那里打听到的情况多是笔试面试经常出一些算法题来考,这些算法题根据公司的不同而不同,但大多大公司更倾向于出ACM类型的要求有很强算法能力的题。不免觉得自己算法又太差,因此就下定决心好好学习和研究算法,所谓研究算法不敢说是创新算法,而更多的是学习和改进已有经典算法。废话不多说进入今年的正题,今天只是算法开篇,首先大抵和教科书般一样空洞的解释下算法相关的内容。将我所有的废话在这篇没有技术含量但不得不写的开篇中吐完。

2.什么是算法


所谓算法,比较权威的定义是:算法是模型分析的一组可行的确定的和有穷的规则。对于定义的准确性我们不做过多的纠缠,就该定义本身我们大可认为它是正确的,但是对于后续要写的算法相关的核心内容我是绝对会说的明明白白清清楚楚的,不论做人做事要该不求甚解时就不要太锱铢必较,该严谨时就要严谨。另外,教科书告诉我们算法有下面的五个特征:有穷性、确切性、输入、输出、可行性。这大抵是正确的,目前来说我没有发现算法还有其他的特征用这五个特征概括不了的,也没有发现有哪个算法是不符合这五个特征的。

3.算法的分类


从应用的角度来说算法分为:
基本算法、数据结构相关算法、几何算法、图论算法、规划算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法、数论算法。
从算法的思路来说又可以分为:递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法、迭代算法等。
从确定性上来分,又分为确定性算法和不确定性算法。我在这里讨论的和接下来将要讨论的都是确定性算法。


4.算法的性能评价


我们知道计算机系统中衡量一个算法的优劣一般的从两个方面考虑,其一是时间,其二就是空间。一个好的算法体现在它占用的存储资源少,执行的效率高,所谓占用少的存储资源就是具有较小的空间复杂度,而执行效率高就是占用较少的CPU时间来执行。所以我们总会听到下面两个评价算法的指标:1.时间复杂度,2.空间复杂度。


我们总是希望我们的算法占用最少的系统资源,在最短的时间内执行完毕,虽然一般的想要获得快速的执行效率就要牺牲存储容量,而要节省空间往往导致执行效率的下降,但是我们依然可以通过合适的算法设计达到相对好的效果。

下一篇博文将写几个适用于不同算法思路的问题并举例说明相关算法。剩下的所有篇幅都会以应用角度来描述对应算法。由于本人并非数学出身,而是一个不折不扣的虽计算机出身但不怕丢人的说,是完全的不懂数学的文盲,故大抵只能明白一些基本的问题及数据结构、查找、排序、数值分析等方面的算法。其他类型的可能会涉及部分,但不会太多。另外,本人最近在做数据压缩方面的项目,故在数据压缩算法方面可能会深入分析。




本文博客园地址:http://www.cnblogs.com/anzelin/archive/2012/11/15/2770829.html
个人博客地址:http://sunny614.sinaapp.com/?p=53
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值