第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍

文章目录

  • 第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
  • 一、算法的时间复杂度
    • 1.时间频度
    • 2.时间复杂度
    • 3.常见的时间复杂度
  • 二、算法的空间复杂度
  • 三、排序算法的介绍
    • 1.排序的分类:
    • 2.常用排序算法的对比

一、算法的时间复杂度

1.时间频度

一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)

2.时间复杂度

一般情况下,算法中的基本操作语句的重复执行次数是问题规模 n 的某个函数,用 T(n)表示,若有某个辅助函数 f(n),使得当 n 趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是 T(n)的同数量级函数。记作 T(n)= O( fn)),称 O( f(n))为算法的渐进时间复杂度,简称时间复杂度

算法的 T(n)不同,但时间复杂度可能相同。如如:T(n)=n²+7n+6 与 T(n)=3n²+2n+2 它们的 T(n) 不同,但时间复杂度相同,都为 O(n²)

计算时间复杂度的方法:

  1. 用常数 1 代替运行时间中的所有加法常数 T(n)=n²+7n+6 => T(n)=n²+7n+1
  2. 只保留最高阶项 T(n)=n²+7n+1 => T(n) = n
  3. 去除最高阶项的系数 T(n) = 7n² => T(n) = n² => O(n²)

3.常见的时间复杂度

常数阶 O(1)

int i = 1;int j = 2;++i;j++;int m = i + j;

对数阶 O(log2N)

int i = 1;while(i < n){i = i * 2;}

线性阶 O(n)

for(i = 1; i <= n; ++i){j = 1;j++;}

线性对数阶 O(nlogxN)

for(m = 1; m < n; m++){i = 1;while(i < n){i = i * 2;}}

平方阶 O(n²)

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

除此之外还有立方阶 O(n^3)、k 次方阶 O(n^k) 以及指数阶 指数阶 O(2^n)

二、算法的空间复杂度

与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:S(n)=O(f(n))

算法执行期间所需要的存储空间包括 3 个部分:

  • 算法程序所占的空间
  • 输入的初始数据所占的存储空间
  • 算法执行过程中所需要的额外空间

在做算法分析时,主要讨论的是是按复杂度。从用户使用体验上看,更看重的是程序执行的速度。一些缓存产品(redis,memcache)和算法(基数排序)本质就是用空间换时间

三、排序算法的介绍

1.排序的分类:

  • 内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序
  • 外部排序:无法全部加载到内存中,需要借助外部存储(文件等)进行排序

2.常用排序算法的对比

【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍相关推荐

  1. Java基础学习——第十六章 Java8新特性

    Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...

  2. 斗地主AI算法——第六章の牌型判断

    本章实现了上一章提到的检查当前是否只是一手牌函数ins_SurCardsType /* 检查剩余的牌是否只是一手牌是: 返回手牌类型数据 不是:返回错误类型(cgERROR) */ CardGroup ...

  3. 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结

    --1--  算法:解决问题的一种方法或者一个求解过程 是若干指令的序列 输入 输出 有限性 确定性 程序:用某种设计语言对算法的具体实现 可以不满足 有限性 程序 = 算法+数据结构 果子合并问题( ...

  4. 【数据结构总结】第六章 图(非线性结构)

    第六章 图(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览,加 ...

  5. Java 核心技术卷1 --第六章 接口、lambda表达式和内部类

    吧Github代码链接: https://github.com/deyou123/corejava.git 第六章 接口.lambda表达式和内部类 6.1 接口 6.1.1 接口概念 接口不是类,而 ...

  6. 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介

    第十六章 进程.线程.同步锁和线程安全问题 文章目录 第十六章 进程.线程.同步锁和线程安全问题 一.进程 1.基本介绍 2.进程模型 二.线程 1.基本介绍 2.线程的生命周期 3.线程的优先级 4 ...

  7. 第十六周上机实践—项目2—大数据集上排序算法性能的体验

    /* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年12月18日 *版本:v1 ...

  8. python快速排序算法没看懂_你需要知道的九大排序算法【Python实现】之快速排序...

    五.快速排序 基本思想:  通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序. 算法实现: ​ #coding: ...

  9. 算法学习总结(2)——温故十大经典排序算法

    一.什么是排序算法 1.1.排序定义 对一序列对象根据某个关键字进行排序. 1.2.排序术语 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...

最新文章

  1. opencv相机标定
  2. vsftpd 在linux 中的环境配置【部分原创】
  3. 解决 idea Method threw ‘java.lang.NoClassDefFoundError‘ exception. Cannot evaluate xxx toString 问题
  4. 处理百万级以上的数据处理
  5. 近期的技术问题让云供应商进行预设加密
  6. web.xml的contextConfigLocation作用及自动加载applicationContext.xml
  7. latex sign_LATEX科研论文写作教程
  8. 如何选择物联网服务商
  9. EMNLP 2020 BiST: Bi-directional Spatio-Temporal Reasoning for Video-Grounded Dialogues
  10. Choco包管理工具安装
  11. JAVA项目接入腾讯应用宝YSDK平台之QQ微信登录接入模式详解
  12. mac蓝牙连接有问题要怎么处理呢?
  13. 三国大时代java_横跨,塞班、安卓、pc的国产良心作《三国大时代》系列
  14. python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)
  15. 数字孪生核电站促进界面监测的应用实践
  16. php跑满CPU的问题终于发现原因了
  17. 计算机专业江苏考研,22考研,计算机专业江苏地区有哪些性价比高又好考的学校,快收藏吧!...
  18. android 实现打印功能,Android通过OTG线连接打印机实现打印功能
  19. 【笔记】分布式系统核心问题概述(二)
  20. 场效应管(MOS管)

热门文章

  1. layui数据可视化_空间数据可视化 GEOM
  2. Jzoj5245 Competing Souls
  3. 软件測试之独步武林系列(一)
  4. JSON与Delphi Object的互换
  5. Asp.Net Core发布绑定域名和端口
  6. PAT甲题题解-1106. Lowest Price in Supply Chain (25)-(dfs计算树的最小层数)
  7. jQuery 的属性操作方法
  8. 236 Lowest Common Ancestor of a Binary Tree
  9. 使用XML文件方式配置log4cxx(log4cxx xml例子)
  10. 图像优化算法(HE、AHE、CLAHE)简单介绍