数据结构之算法简介

数据结构和算法的关系密切,所以大致介绍算法的基础概念。

eg:求1+2+…+100结果的程序,平常的代码可能为:

int i,sum=0,n=100;
for(i=1;i<=n;i++){
   sum=sum+i;
}
printf("%d",sum);

但是用另一种方法更简单的求解(类似于求等差数列):

int sum=0,n=100;
sum=(1+n)*n/2;     //2*sum=100*101(100101相加)
printf("%d",sum);

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

算法的五个基本特征输入(有零个或多个输入)、输出(至少有一个或多个输出)、有穷性(在执行有限的步骤之后,自动结束而不会出现无限循环,并且每个步骤都在可接受的时间内完成)、确定性(算法的每一步骤都具有确定的含义,不会出现二义性)和可行性(算法的每一步均可行,换句话说,每一步都能通过执行有限次数完成)。

算法设计的要求:正确性(有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案;无语法错误,正确数据输入正确输出结果,非法输入得到说明结果)、可读性(便于阅读、理解、交流)、健壮性(当输入数据不合法 时,算法进行相关处理,而不是产生异常或莫名其妙的结果)、时间效率高和存储量低

算法效率的度量:事后统计方法(不科学、不准确);事前分析估计方法(依据统计方法对算法进行估算;程序的运行时间依赖于算法的好坏和问题的输入规模,重点分析循环内部的运行情况)。

时间复杂度:常数均设为1,只保留最高阶项。

O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

最坏情况运行时间,通常没有特别指出的话,提及的运行时间都是指最坏运行时间。

空间复杂度:计算该算法需要的存储空间。(一般复杂度都是指时间复杂度)。

你可能感兴趣的:(数据结构,算法)