一、数据结构的基本概念
数据:描述客观事实的符号,是计算机中可以操作的对象,能被计算机识别,并输给计算机处理的符号集合。
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录。、
数据对象:是性质相同数据元素的集合,是数据的一个子集
数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。
数据结构:相互之间存在一种或者多种特定关系的数据元素的集合。可分为逻辑结构和物理结构。

二、算法
算法:解决特定问题的步骤的描述
特性:
—输入:有零个输入或者多个输
—输出:只有一个或者多个输出
—有穷型性:算法在执行有限个步骤时,会自动结束而不会陷入无限循环里面
—确定性:算法的每一步都有确定的含义而不会出现二义性
—可行性:算法的每一步都可以通过有限次数完成。

要求:
正确性、可读性、健壮性、时间效率高而且空间使用率低、简单性。
算法的复杂度分为时间复杂度和空间复杂度。
时间复杂度:时间复杂度实际上是一个函数,代表基本操作重复执行的次数,进而分析函数虽变量的变化来确定数量级,数量级用O表示,所以算法的时间复杂度为:
T(n)=O(f(n));
在一个算法存在最好、平均、最坏三种情况,我们一般关注的是最坏情况,原因是,最坏情况是任何输入实例在运行时间的上界,对于某些算法来说,最坏情况出现的比较频繁,从大体上来看,平均情况和最坏情况一样差。
一般O(n)的计算方法:
—用1代替所有运行时间中出现的加法常数;
—在修改后的运行函数中保留最高阶的项;
—如果最高阶的项系数不是1,则去除这个项系数。
递归算法的时间复杂度为:递归总次数*每次递归中基本操作执行的次数。
常见的时间复杂度有以下七种:O(1)常数型;O(log2N)对数型,O(N)线性型,O(Nlog2N)二维型,O(N^2)平方型,O(N^3)立方型,O(2^N)指数型。

空间复杂度:
是对一个算法在运行过程中临时占用存储空间的度量,一个算法在计算机存储器上所占用的存储空间包括存储算法本身所占用的空间,算数和输入输出所占用的存储空间以及临时占用存储空间三个部分,算法的输入输出数据所占用的存储空间是由待解决的问题来决定的,通过参数表由调用函数而来,它随本算法的不同而改变,存储算法本身所占用的存储空间有算法的书写长短成正比。算法在运行过程中占用的临时空间由不同的算法决定。

int x = 90;int y = 100;while (y > 0){if (x > 100){x = x - 10;y--;}else{x++;}}

时间复杂度:O(1),空间复杂度:O(1);

2、当有若干个循环时,时间复杂度是和嵌套层数最多的循环语句中最内层的频度决定的

for (i = 0; i < n; i++){for (j = 0; j < i; j++){for (k = 0; k < j; k++){x++;}}}

时间复杂度:O(n^3),空间复杂度:O(1)
3、求二分法的时间复杂度

int select(int a[], int k, int len)
{int left = 0;int right = len - 1;while (left <= right){int mid = left + ((right - left) >> 2);if (a[mid] == k){return 1;}else if (a[mid] > k){right = mid - 1;}else{left = mid + 1;}}return NULL;
}

分析:

在最坏的情况下循环x次后找到,n/(2^x)=1;x=log2n;
所以二分查找的时间复杂度为:O(log2n);空间复杂度O(1);
4、用递归算法求n的阶乘

int fac(int n)
{if (n <= 2){return n;}else{return fac(n - 1)*n;}
}

n的阶乘的时间复杂度很简单:就是n次递归算法,所以为O(n),空间复杂度O(n),递归的深度是n。
5、斐波那契数列

int fib(int n)
{if (n < 2){return 1;}else{return fib(n-1) + fib(n - 2);}
}

分析:

将其用流程图画出来发现是一个完全二叉树,节点数为2^n-1,深度为n,根据最坏情况,时间复杂度为O(2^n),空间复杂度为O(n);

时间复杂度和空间复杂度相关推荐

  1. 数据结构(02)— 时间复杂度与空间复杂度转换

    1. 时间复杂度转化为空间复杂度 常用的降低时间复杂度的方法有递归.二分法.排序算法.动态规划等,降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构. ​ ...

  2. a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度

    关注.星标公众号,学点计算机知识. 整理:persistenceBin 今天来跟大家继续分享一下数据结构的基础知识--算法效率的度量:时间复杂度和空间复杂度.首先来跟大家分享一下在电影<复仇者联 ...

  3. 时间复杂度与空间复杂度分析

    作为开发人员,我们都希望在完成功能的基础上让代码运行的更快.更省空间,那如何衡量编写的代码是否更有效率,这就需要我们学会如何分析代码时间复杂度和空间复杂度. 什么是复杂度分析 执行时间和占用空间是代码 ...

  4. 时间复杂度和空间复杂度3 - 数据结构和算法05

    时间复杂度和空间复杂度3 让编程改变世界 Change the world by program 函数调用的时间复杂度分析 如果我们把问题再实际化一点,大家是否能自己正确的分析出来呢? 我们来看下边这 ...

  5. python【数据结构与算法】一种时间复杂度和空间复杂度的计算方法

    文章目录 1 算法的时间复杂度定义 2 推导大O阶方法 2.1 常数阶 2.2 线性阶 2.3 对数阶 2.4 平方阶 2.5 立方阶 3 常见的时间复杂度排序 4 算法空间复杂度 5 常用算法的时间 ...

  6. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  7. 关于算法的时间复杂度和空间复杂度的总结

    一.算法的概念   算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...

  8. 【算法的时间复杂度和空间复杂度】-算法02

    算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...

  9. 递归二分查找时间复杂度、空间复杂度和稳定性

    递归 递归条件 自己调用自己 有结束条件 二分查找 二分查找对1~100乱序数字查找 l = list(range(1,101)) def bin_search(data_set,val):low = ...

  10. java 空间复杂度_时间复杂度和空间复杂度

    原文首发于微信公众号:躬行之(jzman-blog) 时间复杂度和空间复杂度可以帮助我们根据具体的平台选择合适的算法,要学会以空间换时间或以时间换空间的设计思想,如在单片机等一般是内存空间比较紧张,在 ...

最新文章

  1. Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
  2. MySQL存储过程的创建及调用
  3. _variant_t和_bstr_t有什么区别
  4. mysql查询以文件形式导出_mysql以文件形式导入导出整个数据库
  5. linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈
  6. 王者经典猎马技术之昨日重现
  7. 店庆遇上双11,买书的最大优惠来了!
  8. ON DUPLICATE KEY UPDATE重复插入时更新
  9. 淘宝店铺新手:实战提升流量销量经验
  10. 博士申请 | 香港理工大学李青教授团队招收机器学习全奖博士/研究助理
  11. python中snip_Snip滚动截屏_腾讯Snip For Mac官方下载-华军软件园
  12. Python创建文件夹和子文件夹
  13. JSD-2204-Dubbo实现微服务调用-Seata-Day04
  14. mapbox 绘制路线并展示路线长度
  15. hardware计算机专业英语翻译,hardware是什么意思中文翻译
  16. win10系统装服务器2008蓝屏,升级安装Win10正式版后出现蓝屏怎么办?Win10蓝屏原因分析及解决方法...
  17. 一个完整计算机的主要配置,一个完整的计算机的配置包括CPU
  18. 所有外包项目威客网站列表
  19. day32_安卓基础之activity生命周期_receiver广播接收者
  20. android 解锁mac,论一台笔记本三个不同系统的玩法,解锁正确姿势

热门文章

  1. 创建variation model (差异模型)
  2. macbook air上安装ubuntu双系统
  3. 学生成绩管理系统(合并文件,查找,总分排序,保存补考学生信息)
  4. 【一起入门NLP】中科院自然语言处理作业二:中英文语料训练CBOW模型获得词向量(pytorch实现)【代码+报告】
  5. NOI2016 滚粗记
  6. 四象限法推导lm曲线_提出研究问题的“四象限法”
  7. 【CSS】writing-mode实现古诗词排版
  8. lighttpd 之九 配置信息加载
  9. echarts 柱状图让柱子倒叙
  10. hive表级权限控制_hive权限控制(一)