第一次总结

第一次写博客

这是第一次写博客,确实不知道写什么,就总结一下今天学到的吧。

  1. 磁盘 内存 cpu 之间的关系
  • 磁盘是链式存储 因为删除文件后会导致存储空间会空出一些不连续地方,而这些不连续空间无法存储超过他们各自大小的文件, 但要是链式存储的话,就不会出现这个问题,只要有空间就可以利用,因为我们不要它是连续的。

  • 格式化,从2kb~2048kb(我电脑是这样) ,格式化后的是最小存储单元,一个单元只能存一个东西,存不满的话也不能继续存了,就是说如果太大的话,会有许多存储单元没有存满,就造成了浪费,那岂不是说越小越好,当然不是,举个例子,我们都知道,那些存储单元是有地址的,他们的地址就是他们的编号。假如有一个1T的磁盘,最小存储单元是8kb的,1T等于1024G , 等于1024x1024M, 约等于109kb, 所以差不多分成108个存储块,给他们从0开始编号,就是他们地址,当我们存入文件时,因为是链式存储,每一个块都会记录它的下一个块的地址是多少,而这也是有开销的,以上面的为例,一个108 的数需要用一个int类型来存储,而int是4个字节,所以占比就是存数据和存地址的占比就是(1/(8x1024))(mmm,和老师算的好像不一样,不知道哪算错了), 这是最小单元是8kb的情况,如果再小一点,256B,比例就成了1/256 ,如果再小的话, 可能int类型不足以记录它们的地址了,就需要使用long类型,这时比例又变了。1/256就是说存1T的文件, 有4G是用来存储地址的。所以,最小存储单元不能太小,小的话还有一个问题是增加硬盘寻址的时间,假如每次寻址都用10ms,2kB,和256B就差了进10倍。所以最小单元适当大点会加快对大文件存取速度,但浪费的空间会增加,可以试试,把一个盘格式化为32kb,专门用来存储大文件。

  • 说完磁盘,再说内存,内存是通过电信号来存取东西,而磁盘是通过机械臂在磁盘上读取0,1序列,所以就速度来说,内存比磁盘要快的多。内存的信息是暂时,当关机重启后,内存的东西就没了,但磁盘上的文件还在。

  • 我们说各种软件是在内存上运行的,其实是在CPU上运行的,CPU一次处理命令有限,但速度非常快,它不断从内存上读取命令,执行命令,这就是软件运行的过程,因为从内存上的速度也不是太慢,所以总体还是很快的。其实CPU也可以直接从磁盘中读数据,但从磁盘上读取数据太慢了,与CPU的高速度不符,会造成时间大量的浪费,
    但当内存满了的时候,硬盘上会分出一部分虚拟内存,由于磁盘上读取数据慢,所以当内存满了的时候,电脑会变得非常慢。

2.知道了它们的关系,我们来看数据结构
对数据的基本操作就是增删改查,而它们可以分为顺序结构和链式结构,数组就是顺序结构,我们可以通过下标来访问它的每一个元素。
我们来看一下各个结构的时间复杂的:

类型操作时间复杂度说明
无序数组O(1)只需在数组末尾添加数据即可
O(n)在查的基础上,还得移动数据,删除元素的后面的元素向前移
O(n)在查的基础上,只需修改元素的值即可
O(n)需要遍历数组
有序数组O(n)需要找到元素的插入位置,然后移动元素,使其保持有序
O(n)需要找到要删除位置,然后移动后面的元素
O(n)需要找到修改元素,再找到插入位置,再移动元素,此种操作时间最长
O(log2n)因为是有序的,可以采用折半查找
无序链表O(1)只要在头部或尾部插入即可
O(n)需要遍历链表,找到后删除,调节指针即可
O(n)需要遍历链表 ,查到一个元素后还得继续查到尾,修改找到的元素
O(n)需要遍历链表,查到一个元素后还得继续查到尾
有序链表O(n)需要遍历链表,找到插入位置
O(n)遍历链表,找到元素,删除,但如果下一个比它大就可停止寻找
O(n)找到元素后,插入到正确位置,同样,下一个比它大就不用再找了
O(n)遍历链表,但找到后,发现下一个比它大就不用继续找了

看上面的各个结构的时间复杂度,发现都不是很理想,这时引入了树结构,对于满二叉排序树来说,增删改查的时间复杂度都是log2n, 二叉排序树是左子树的值都比它小,右子树的值都比它大,所以每次查找都会把范围缩小一半,删除,修改,增加也是,通过分支选择能很快找到相应位置。我们知道,这和这棵树的高度有关,找到一个元素,最多需要比较logn 也就是树的高度 次。

但对于有些序列来说如, 1,2,4,5 当我们构建排序树时,会形成一条单链,和单链表就一样了,显然,我们不希望这样,这时,我们需要构建平衡二叉树,平衡二叉树的各个操作时间复杂度也都时logn。

相应的,还有三叉树,m叉树,叉数越多,层次就越少,比较次数也就越少,也就越快,而B树,B+树,红黑树,应该就是这种结构,对于数据库的索引,大多数用的就是这几种结构,以便更快进行操作。

这是第一次写博客,有好多东西表述不清,还望理解,其中可能会有错的地方,欢迎指出,后面写的很不详细,因为我也不是太懂,在这做个记录,以后一定要弄清那些树结构。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值