数据结构引入以及常用的内存开销

本文探讨了数据结构中的顺序和链式存储,以及集合、线性、树形和图形四种逻辑结构。重点讲解了大O记法在算法时间复杂度分析中的应用,并列举了常见时间复杂度阶。此外,还分析了不同数据类型在内存中的开销,包括对象头信息、填充字节和数组内存分配。总结了优化算法的必要性,指出当时间复杂度达到n^2及以上时应考虑优化。
摘要由CSDN通过智能技术生成

最近复习了一下数据结构,就做个随笔吧。有一些自己的思考,因笔者水平有限,也不一定完全正确。望读者指正

数据结构就是数据在内存中的存储方式。
按照物理的结构来分(也就是数据在内存中的存储方式),也就分为了顺序存储结构和链式存储结构

按逻辑结构来分,分为了
集合结构、线性结构、树性结构、图性结构

算法的时间复杂度
大O记法
O(f(n))

先说结论:
1.用常数1来取代运行中的常数
2.只保留最高阶
3.去除最高阶的常数因子
例子:
3 O(1)
n+3 O(n)
n^2+2 O(n^2)

我理解的时间复杂度就是无限将n放大,去除影响整体大小的因素,比如加的常数,低阶等 只留下影响整体大小的本质,比如最高阶

说一下常见的大O记法
就是n的多少次幂,因为这是影响时间复杂度的本质
1.线性阶
单循环 O(n)
2.平方阶
双重循环 O(n2)
3.立方阶
三重循环 O(n
3)
4.对数阶
例:
int i =0 ,n = 100;
while(i<n){
i= i*2;
}执行log2(n)次数
O(logn)
5.常数阶
不会随着n的增长而增长操作次数

这么多,哪种才是最合适的呐
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)

大于等于n^2就要考虑优化算法了

比如我们常见的算法,冒泡,选择,希尔排序,都是n^2;不推荐使用

下面再来看一下数据类型的内存开销
byte short int long float double boolean char
分别占
1 2 4 8 4 8 1 2个字节

注意
1.计算机访问内存一次一个字节
2.一个引用是8个字节
比如:Date date = new Date(); 则date这个变量需要占用8个字节来表示
3.创建一个对象,除了对象内部存储的信息。对象本身也有16个字节的内存开销用来保存对象头的信息

4.注意内存不够8个字节的倍数的,要补全至8个字节的倍数

public static A{ public int a = 1;}
(1).a占用4个字节
(2).对象本身占用16个字节
20不是8的倍数,自动补全到24

5.还有我们常用的数组
注意
其实并不是存储多大的数据,就申请多大的空间
16个字节存储自己的对象,4个字节保存长度,4个填充字节,然后再加上保存值需要的字节

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值