1算法分析

作者: 浩林Leon | 来源:发表于2018-04-07 17:18 被阅读21次
1.时间复杂度分析:

一个程序运行总时间主要和两点有关:

  • 1.执行每条语句的耗时
  • 2.执行每条语句的频率
image.png image.png

对于大多数程序,得到运行时间的数学模型所需的步骤如下:

  • 1.确定输入模型,定义问题规模
  • 2.识别内循环
  • 3.根据内循环的操作确定成本模型
  • 4.对于给定的输入,判断这些操作的执行频率.
    例如:
    二分查找.他的输入模型是a[],内循环是一个while循环的所有语句,成本模型是比较操作.他的所需比较次数最多为lgN+1.
算法分析中常用函数
描述 记号 定义
向下取整(floor) ⎿x⏌ <=x的最大整数
向上取整(cell) ⎾x⏋ >=x的最小整数
自然对数 lnN LogeN (表示ex=N)
以2为底对数 lgN log2N(表示2x=N)
以2为底的整形对数 ⎿lgN⏌ <=lgN的最大整数
调和级数 HN 1+1/2+1/3+1/4+1/5+…+1/N
N! 1x2x3x4x...xN
2018-04-07 19-28-49 的屏幕截图.png
2018-04-07 19-29-48 的屏幕截图.png

2.空间复杂度分析:

分析内存的使用比分析时间复杂度要简单得多.而且在分析过程中我们会把复杂的对象简化成原始数据类型,而原始数据类型是预先定义好的.而且非常好理解:只需要将变量的数量和他们的类型对应的字节数分别相乘汇总即可.
对象:要知道一个对象所用的内存量,需要将所有实例变量的使用内存与对象本身的开销相加.对象本身开销一般是16字节(包括一个对象类的引用 [8字节] ,垃圾收集信息[4字节]以及同步信息[4字节]).另外一般对象的内存大小会被填充称为8的倍数(也就是对象开销+实例变量+padding=8N, 其中0<=padding<8)填充字节需要根据大小来调整.对象的引用一般是一个内存地址,因此会用8字节.

  • Integer封装的对象内存计算:
2018-04-07 19-36-15 的屏幕截图.png

计算:16+4+?=8N 所以padding=4 ,一共占24 Byte

  • Date对象内存计算:
2018-04-07 19-37-04 的屏幕截图.png

计算 :16+4*3+?=16+12+? =8N (?=4,一共为 32)

  • Counter 对象:
2018-04-07 19-37-43 的屏幕截图.png

计算:16+8+4+?=8N(28+?=8N, ?=4 ,一共为32)

  • 链表:

对于嵌套内部类(非静态类)例如Node 类.还需要一个额外的8字节(用于指向外部类)

public class Node{
private Node next;
private Item item;
     public class Item{
  ...  }
}

此时内存大小计算为 :

内存组成
对象开销[16]
额外开销[8]
Item [引用 8]
Next [引用 8]
Padding =?

16+8+8*2+?=40 (8N)
所以padding =0,一共内存占40byte

  • 数组:

一个原始类型数据的数组一般需要24个字节的头信息(16字节对象开销+4字节保存长度+4字节填充) ,再加上保存值的所需内存 .
例如一个含有N个int 数组 内存为 (24+4N+padding) 字节 会保持8N.
一个N的double 数组 内存为 (24+8N+padding)
一个对象的数组就是一个对象的引用的数组.需要额外加上引用所需内存;
例如:一个含有N个Date的数组.
内存=24+(8 [对象引用大小]+32[对象本身内存大小])N

相关文章

  • 第14章 深度优先搜索

    1、中国象棋 算法分析 bfs 时间复杂度 Java代码 2、踏青 算法分析 flood fill 算法 时间复杂...

  • 第1章 快速提升代码能力

    1、a + b问题 算法分析 不分析了 Java代码 2、斐波拉契数列 算法分析 不分析了 Java代码 3、矩阵...

  • 1算法分析

    1.时间复杂度分析: 一个程序运行总时间主要和两点有关: 1.执行每条语句的耗时 2.执行每条语句的频率 对于大多...

  • 算法4(Algorithms4)- Part 1 算法分析(A

    算法4(Algorithms4)- Part 1 算法分析(Analysis Of Algorithms) 注:...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 手机开发实战37——SIM卡安全缺陷分析

    转 安全缺陷分析 1、安全分析 (1)SIM卡 SIM卡中最敏感的数据是保密算法A3、A8算法、密钥Ki、PIN、...

  • 02-25:RNN算法

    RNN算法 1、RNN算法原理 (1)RNN变种GRU (2)RNN变种LSTM LSTM缺点分析: todo: ...

  • 算法设计与分析(第3版)

    《算法设计与分析(第3版)》系统地介绍了算法设计与分析的概念和方法,共4篇内容。第1篇介绍算法设计与分析的基本概念...

  • 推荐算法

    推荐算法分类 基于流行度的算法 基于内容的算法 协同过滤算法 基于模型 混合算法 算法分析 1. 基于流行度的算法...

  • sklearn的常用函数以及参数——3. 聚类算法&降维算法

    聚类算法 1. knn算法 2.Kmeans算法 3. 层次聚类 4. DBSCAN 降维算法 1. 主成分分析法...

网友评论

    本文标题:1算法分析

    本文链接:https://www.haomeiwen.com/subject/zdvyhftx.html