算法学习笔记(一)-算法基础

算法分析:

        为对一个算法的代价及效率等进行分析,必须具有一个要使用的实现技术的模型,包括描述所用资源及其代价的模型。简单的说,就是必须要有相应统一的准则或模型来进行分析,才能有效比较出算法好坏。

        目前通常假定一种通用的单处理器计算模型-随机访问机(RAM)作为评价环境。

        RAM以真实计算机为参照,真实计算机中的常见指令:算术指令(如加减乘除,取余,向下取整等),数据移动指令(装入,储存,复制)和控制指令(条件和无条件转移,子程序调用和返回)均包含于其中,所需时间为常量。

        真实计算机包含上述未列出的指令代表RAM模型中的灰色区域。例如指数运算,一般情况下非常数时间指令,但m*2^k,等价于将一个整数m各位向左移K位,所以在k不大于计算机位数的情况下,该指令为常数时间指令。所以尽量避免RAM模型的中灰色区域。

       还有很对包含内存层次的模型,其复杂得多,可能难以使用,暂不考虑。

输入规模:

       其依赖于研究的问题。对很多问题,如排序和离散傅里叶变换,其量度一般为输入中的项数,而其他,如两整数相乘,其最佳量度即为二进制记号所表示的输入所需的总位数。

分析量度:

      时间复杂度:输入规模为n,执行时间最长者为T(n),一般以渐进分析度量:(1)T(n)<=c*f(n),记为T(n)=O(f(n));(2)T(n)>=c*f(n),记为T(n)=Ω(f(n));(3)c1*f(n)<=T(n)<=c2*f(n),记为T(n)=Θ(f(n))。一般用第一种符号分析。

     空间复杂度分析大致如上。

点赞