初步涉及算法复杂度(一)

最近这段时间开始在对数据库方面的知识进行学习,频频看到一个叫做索引的东西,想要理解索引就需要理解B树和B+树,在查询这两种数据结构的过程当中又频繁看到了O(n),O(log n)这两个表达算法复杂度的式子,对于早已把数学忘光的人怕是云里雾里,所以今天我就去初步研究了一下算法复杂度。
O(n)的意思非常简单,表示的是程序的耗时是线性的,比如执行这行代码是一秒,执行10个这样的代码就是10秒,n就代表了执行次数。

for(int i=0;i<n;i++){//这里就o(n) 执行N次是一个线性叠加的时间
System.out.println("a");
}   

O(n^2)常见于双重for循环 形成一个nxn的运算次序。

  for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){//这里就形成了nxn的次数
      System.out.println("a");
    }
  }

O(logn)先解释其中的logn logn代表的就是多少个2相乘等于n,2^x=n; x就是logn的结果 这种时间复杂度的计算就适用于B树了,其实就是一种快速排序 ,根据我个人的理解如果你在数据库当中使用了索引,计算机会将这个信息保存的位置用一个数字进行记录,利用这个数字进行排序,随便拿出一个数字,对我们要找的数字进行大小比较,比如有四个数字,1、2、3、4,我需要拿到一个2,我要查找的是4 第一步判断4比2大吗 第二步 判断4比3大吗 最多两步就可以拿到需要的数字,2^x=4,所以得出x=2 也就是最大两步可以的出结果。
树的阶数:最多有几个叶子就是几阶 后面我们将阶数定义为M
B树也就是二叉搜索树一般情况下,非叶子节点都会有两个子节点,左小右大,每个节点包含一个元素,整体也是左小右大。增删改查之后不会再保持平衡,可能会形成链性的查询。
B-树就读作B树,与B树并不同虽然基本原则还是左小右大,但是每个节点并不一定只有一个元素,元素个数遵循这个规则 大于等于M/2-1(向上取整);小于等于M-1。例如三阶B-树,节点的元素最少有一个,最多有两个元素。叶子节点都在同一层,你可以注意到 节点包含的元素变多,树的高度相对B树就会低了,为什么要这么做呢,这种结构储存于硬盘当中,当我们需要比较的时候就从硬盘中拿到内存中,在内存无法放下整个树的时候,我们会将树的一部分比如其中一个节点和他的几个子节点先拿出来进行比较,这个IO是耗费时间的,所以我们减少树的高度就是减少IO的次数。增删改查仍然会保持平衡
B+树:与B-树最大的区别是,所有非叶子节点并不会存有实际数据,只会存有索引,且叶子节点之间都会形成一个按大小顺序排好的链表父节点的元素在子节点中是最大的那个元素,他比B-树的好处是,由于非叶子节点不存有数据 每次IO可以进行比较的树的高度会比B-树更高有效减少了IO次数,由此可见这些结构都是为了减少IO次数做努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值