【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
文章目录
- 第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
- 一、算法的时间复杂度
- 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 代替运行时间中的所有加法常数 T(n)=n²+7n+6 => T(n)=n²+7n+1
- 只保留最高阶项 T(n)=n²+7n+1 => T(n) = n
- 去除最高阶项的系数 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数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍相关推荐
- Java基础学习——第十六章 Java8新特性
Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...
- 斗地主AI算法——第六章の牌型判断
本章实现了上一章提到的检查当前是否只是一手牌函数ins_SurCardsType /* 检查剩余的牌是否只是一手牌是: 返回手牌类型数据 不是:返回错误类型(cgERROR) */ CardGroup ...
- 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结
--1-- 算法:解决问题的一种方法或者一个求解过程 是若干指令的序列 输入 输出 有限性 确定性 程序:用某种设计语言对算法的具体实现 可以不满足 有限性 程序 = 算法+数据结构 果子合并问题( ...
- 【数据结构总结】第六章 图(非线性结构)
第六章 图(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览,加 ...
- Java 核心技术卷1 --第六章 接口、lambda表达式和内部类
吧Github代码链接: https://github.com/deyou123/corejava.git 第六章 接口.lambda表达式和内部类 6.1 接口 6.1.1 接口概念 接口不是类,而 ...
- 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介
第十六章 进程.线程.同步锁和线程安全问题 文章目录 第十六章 进程.线程.同步锁和线程安全问题 一.进程 1.基本介绍 2.进程模型 二.线程 1.基本介绍 2.线程的生命周期 3.线程的优先级 4 ...
- 第十六周上机实践—项目2—大数据集上排序算法性能的体验
/* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年12月18日 *版本:v1 ...
- python快速排序算法没看懂_你需要知道的九大排序算法【Python实现】之快速排序...
五.快速排序 基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序. 算法实现: #coding: ...
- 算法学习总结(2)——温故十大经典排序算法
一.什么是排序算法 1.1.排序定义 对一序列对象根据某个关键字进行排序. 1.2.排序术语 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...
最新文章
- opencv相机标定
- vsftpd 在linux 中的环境配置【部分原创】
- 解决 idea Method threw ‘java.lang.NoClassDefFoundError‘ exception. Cannot evaluate xxx toString 问题
- 处理百万级以上的数据处理
- 近期的技术问题让云供应商进行预设加密
- web.xml的contextConfigLocation作用及自动加载applicationContext.xml
- latex sign_LATEX科研论文写作教程
- 如何选择物联网服务商
- EMNLP 2020 BiST: Bi-directional Spatio-Temporal Reasoning for Video-Grounded Dialogues
- Choco包管理工具安装
- JAVA项目接入腾讯应用宝YSDK平台之QQ微信登录接入模式详解
- mac蓝牙连接有问题要怎么处理呢?
- 三国大时代java_横跨,塞班、安卓、pc的国产良心作《三国大时代》系列
- python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)
- 数字孪生核电站促进界面监测的应用实践
- php跑满CPU的问题终于发现原因了
- 计算机专业江苏考研,22考研,计算机专业江苏地区有哪些性价比高又好考的学校,快收藏吧!...
- android 实现打印功能,Android通过OTG线连接打印机实现打印功能
- 【笔记】分布式系统核心问题概述(二)
- 场效应管(MOS管)
热门文章
- layui数据可视化_空间数据可视化 GEOM
- Jzoj5245 Competing Souls
- 软件測试之独步武林系列(一)
- JSON与Delphi Object的互换
- Asp.Net Core发布绑定域名和端口
- PAT甲题题解-1106. Lowest Price in Supply Chain (25)-(dfs计算树的最小层数)
- jQuery 的属性操作方法
- 236 Lowest Common Ancestor of a Binary Tree
- 使用XML文件方式配置log4cxx(log4cxx xml例子)
- 图像优化算法(HE、AHE、CLAHE)简单介绍