数据结构和算法笔记——基础知识

函数渐进增长

  • 函数的渐进增长:给定两个函数g(n)和g(n),如果存在整数N使得对于所有n>N,总有f(n)比g(n)大,那么我们说f(n)的增长渐进快于g(n)
  • 在渐进增长中,加法常数不影响最终的算法变化曲线
  • 与最高次项相乘的常数也并不重要
  • 最高次项指数大的,随着n的增长,结果也会增长的特别快
  • 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略不计,重点关注最高阶项的阶数

时间复杂度

  • T(n) = O(f(n))
  • 语句总的执行次数T(n)关于输入规模n的函数
  • 分析T(n)随n的变化情况并确定n的数量级
  • 它表示随问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进复杂度
  • 大O记法:O()
  • 一般情况下,随着n增大,T(n)增长最慢的算法为最优算法
推导大O阶的方法
  • 用常数1取代运行时间中所有的加法常数
  • 在修改后的运行次数中只保留最高阶项
  • 如果最高项存在且不是1,则去除与最高项相乘的常数
  • 得到的最后结果是大O阶
常数阶举例
  • 多条打印语句,O(1)
线性阶
  • 单层循环结构,O(n)
平方阶
  • 嵌套循环结构,m层嵌套时间复杂度为O(n^m)
int i, j, n = 100;
for(i=0; i<n; i++){
    for(j=i; j<n; j++){
        printf("print something")
    }
}

以上算法的执行次数为n+(n-1)+(n-2)+…+1=n(n+1)/2
化简为n2/2+n/2得O(n2)

对数阶
int i = 1, n = 100;
while(i < n){
    i = i * 2;
}

2^x = n, x=log(2)n(log以2为底的n),这个循环的时间复杂度为O(logn)

函数调用的时间复杂度分析
  • 与之前平方阶类似,主要关注被调用函数的时间复杂度

常用的时间复杂度

  • 常数阶
    • O(1)
  • 线性阶
    • O(n)
  • 平方阶
    • O(n^2)
  • 对数阶
    • O(logn)
  • nlogn阶
    • O(nlogn)
  • 立方阶
    • O(n^3)
  • 指数阶
    • O(2^n)

常用的时间复杂度耗费的时间从小到大排序

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

最坏情况与平均情况

  • 平均情况就是期望的运行时间
  • 现实意义最大的是算法在最坏情况下的运行时间

空间复杂度

  • S(n) = O(f(n))
    • n:问题输入规模
    • f(n):关于n占用的存储空间的函数

抽象数据类型(Abstract Data Type, ADT)

  • 数据类型:一组性质相同的值的集合和定义在此集合上的一些操作
    • 原子类型:不可再分的基本类型
    • 结构类型:由若干类型组合而成,可以再分解的类型
  • 抽象:是指取出事物具有普遍性的本质而忽略非本质的细节,是对具体事物的一个概括
  • 抽象数据类型:
    • 指一个数学模型及定义在该模型上的一组操作
    • 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机中如何表示和实现无关
    描述抽象数据类型的标准格式:
      ADT 抽象数据类型名
      Data
          数据元素之间逻辑关系的定义
      Operation
          操作
      endADT
    
本项目属于机器学习的简单部分,基于为了快速理解机器学习而搭建的人工智能速成项目,大家可以根据其中的项目时间进行相关的学习.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值