
算法与数据结构
将会从java的角度去探索算法和数据结果
珞珈山紫竹
希望用最简单的语言去阐释研发
展开
-
B树和B+树的不同
B+和B树本质上的不同B树每个节点会存值和指针,所以一个节点的关键字=孩子树-1(关键字隔离出来的缝就是子树的索引)B+ 树非叶子结点只存储指针,所有关键字都存储在叶子结点上,也叶子结点之间有前后指针相连(每一阶都需要一次磁盘IO,所以树越矮越好)理论上不同1、中间结点不存储关键字所以树更矮胖2、B+ 树查询必须查到叶子结点,B树不会直接查找到叶子结点,因此b+树查找更稳定3、对于范围查找,b+树只需遍历叶子结点链表,b树却需要重复中序遍历https://www.cnblogs.com/xu原创 2022-01-17 15:31:16 · 245 阅读 · 0 评论 -
synchronized 的优化过程
问题synchronized 的执行过程1.6 之前需要大量的用户态和内核态的切换消耗了大量的资源有了一个无锁-->偏向锁-->自旋锁-->重量级锁的锁升级的过程偏向锁 如果第一个线程添加锁后无其他线程抢占资源则这个线程不会变成同步状态自旋锁 如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争的锁的线程就不需要做内核态和用户态之间的转换(线程私有内存,和共有内存),进入阻塞,挂起状态等。深入理解synchronized锁升级过程_CrazySnail_x..原创 2021-12-21 18:35:47 · 169 阅读 · 0 评论 -
算法时间复杂度的求解方法
1、最高次数即为复杂度2、求对数的原因是 2*x =n x = log2n时间复杂度怎么算?如何计算时间复杂度?时间复杂度 - 知亦行 - 博客园详解O(log n)时间复杂度的由来_每天八杯水的博客-优快云博客_时间复杂度o...原创 2021-12-10 11:05:13 · 272 阅读 · 0 评论 -
常用的排序算法
快速排序:// 三个参数 要排序的数组 ,前置索引// 取一个中间值一般为数组的第一个值// 分别取 一个前置漂移值 一个后置漂移值// 从后往前比中间值小的交换,然后从前往后比中间值大的交换// 结果是两个漂移值相等,左右漂移值相等指向为中间值,然后左右两个数组分别递归// 递归出来的原理是左右漂移值发生变化的时候(本来应该是相等的)public static int[] quictSort1(int[] arr,int low,int high){ int sta.原创 2021-11-25 16:32:50 · 760 阅读 · 0 评论 -
树(二叉查找树,AVL树,红黑树,B树,B+树)
1、二叉搜索树二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:1、若其左子树存在,则其左子树中每个节点的值都不大于该节点值;2、若其右子树存在,则其右子树中每个节点的值都不小于该节点值。 存在的问题:退化为单链2、平衡二叉树它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂...原创 2021-11-22 10:47:37 · 602 阅读 · 0 评论 -
美团的一次简单算法题
public static void merge(int A[],int m,int B[],int n){ for(int i=0;i<n;i++){ A[m]=B[i]; for(int j=m;j>0;j--){ if(A[j]<A[j-1]) { int curr = A[j]; A[j]=A[j-1]; A[j-1]=cur...原创 2021-10-26 19:54:20 · 179 阅读 · 0 评论