算法:算法的概述和算法时间复杂度分析

算法:算法的概述和算法时间复杂度分析

我是一名在校大学生,学习到了算法这门课程,想整理一些笔记和大家分享,各位大佬不喜勿喷,仅供参考,希望能对大家有所帮助。


算法,什么是算法

它是求解问题的一系列计算步骤,用来将输入的数据转换成输出结果。我总结关于算法,有一个三五计划,这里的三五计划不是指高考模拟题,而是指——算法有5个设计目标、5个重要特性以及5个基本步骤。

算法和数据结构的联系和区别
联系:数据结构是算法设计的基础。算法的操作对象是数据结构,在设计算法时通常要构建适合这种算法的数据结构。数据结构设计主要是选择数据的存储方式,算法设计就是在选定的存储结构上设计一个满足要求的好算法。
区别:数据结构关注的是数据的逻辑结构、存储结构和基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。

算法具有以下5个设计目标

  • 正确性:要求算法能够正确的执行预先规定的功能和性能要求。
  • 可使用性:要求算法能够很方便的使用。
  • 可读性:算法应该易于人的理解,可读性好。
  • 健壮性:要求算法具有很好的容错性,提供异常处理,能够对不合理的数据进行检查,不经常出现异常中断或死机现象。
  • 高效率与低存储量需求:算法的效率主要指算法的执行时间。

算法具有以下5个重要特性

  • 有限性:一个算法必须总是在执行有限步之后结束,且每一步都可在有限时间内完成。
  • 确定性:算法中的每一条指令都必须有确切的含义,不会产生二义性。
  • 可行性:算法中的每一条运算都必须是足够基本的,也就是说它们在原则上都能精确的执行。
  • 输入性:一个算法有零个或多个输入。
  • 输出型:一个算法有零个或多个输出。

算法具有以下5个基本步骤

  • 分析求解问题:确定求解问题的目标、给定的条件和生成的结果。
  • 选择数据结构和算法设计策略
  • 描述算法
  • 证明算法的正确性
  • 算法分析

算法时间复杂度的分析

评价算法效率通常有两种衡量方法:事后统计法事前分析估算法。前者存在两个缺点:1.必须执行程序需。2.存在其他因素掩盖算法本质。
一个算法是由控制结构(顺序、分支和循环)和原操作(固有数据类型的操作)构成,算法的运行时间取决于两者的综合效果。
如表格所示的算法Solve,其中形参a是一个m行n列的数组,当是一个方阵(m=n)时求主对角线的所有元素之和并返回true,否则返回false,从中可以看到,包含两个顺序结构,一个分支结构和一个循环结构。

bool Solve(double a[][MAX],int m,int n,double &s){
int i;s=0; 顺序结构
if(m!=n) return false; 分支结构
for(i=0;i<m;i++) s+=a[i][i]; 循环结构
return true;} 顺序结构

设算法的问题规模为n,以基本语句为基准统计出的算法执行时间是n的函数,用f(n)表示。对于表中所示的算法,当m=n时算法中for循环内的语句为基本语句,它恰好执行n次,所以有f(n)=n。
这种时间衡量方法得出的是一种增长趋势的度量,只考虑当问题规模n充分大时算法中基本语句的执行次数在渐进意义下对的阶,通常使用Θ、Ο、Ω这3种渐进符号表示。

猜你喜欢

转载自blog.csdn.net/qq_39004632/article/details/84848536