大话数据结构-算法(2)

启示:

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作


算法定义:

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

算法的5个特性:输入,输出,又穷性,确定性和可行性

    输入和输出:算法具有零个或多个输入,至少有一个或多个输出。

    有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可以接受的时间内完成(可理解为:有边界线)

     确定性:算法的每一步骤都具有确定的含义,不会出现二义性。

      可行性:算法的每一步都必须是可行的,也就是说,每一步都能通过执行有限次数完成。


算法设计的要求:

正确性:算法的正确性是指算法至少应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案

其中“正确”分为四个层次:

算发程序没有语法错误

算法程序对于合法的输入数据能够产生满足要求的输出结果

算法程序对于非法的输入数据能够得出满意规格说明的结果

算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。

可读性

可读性:算法设计的另一个目的是为了便于阅读,理解和交流

健壮性:当输入数据不合法时候,算法也能做出相关处理,而不是产生异常或者莫名其妙的结果。

时间效率高和存储率低



算法效率的度量方法

事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法按编制的程序的运行时间进行比较,从而确定算法效率的高低

事前分析估算方法:在计算机程序变之前,一句统计方法对算法进行估算。


算法时间复杂度:

算法时间复杂度定义: 在进行算法分析时,语句总的执行次数T(n)是关于问题规模N的函数,进行分析T(n)的变化情况并确定T(n)的数量级,算法的时间复杂度,也就是算法的时间量度,记住:T(n)=o(fn),它表示岁问题规模N的增大,算法执行时间的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度,其中f(n)是问题规模n的某个函数。



这样用大写O【】来体现算法时间复杂度的记发,我们称之为大O的记发,一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法


推导出大O阶的方法


1、用常数1取代运行时间中的所有加法常数

2、在修改后的运行次数函数中,只保留最高阶项 

3、如果最高阶项存在且不是1,则去除与这个项相乘的常数得到的结果就是大O阶。


举例:高斯算法:

int sum=,n=100; 执行一次

sum=(1+n)*n/2; 执行一次

printf("%d",sum); 执行一次

常数阶:

这个算法的运行次数函数f(n)=3,根据大O阶的第一条,将常熟3改为1,在保留最高项时候,没有,所有 时间复杂度为o【1】,其中n不管为多少,执行时间恒定 ,所以为o【1】的时间复杂度,有叫常数阶


线性阶:

int i=0;

for(i=0;i<n,i++)

对数阶:

int count=1;

while(count<n){

count=count*2} 由于每次count乘于2之后,就距离n更近一步。

平方阶: 例如99乘法表,


常见的时间复杂度:



算法空间复杂度

算法的空间复杂度用过计算算法阿所需的存储空间实现,算法空间复杂度的计算公式称作为:s(n)=o(f(n)) 其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。




猜你喜欢

转载自blog.csdn.net/skycanf/article/details/80548736
今日推荐