B-Trees|CS 61B Data Structures, Spring 2019

2023-11-10 18:10

本文主要是介绍B-Trees|CS 61B Data Structures, Spring 2019,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

B-Trees

  • B-Trees
    • BST Tree Height
    • BST(binary search tree) Performance ,Height, Depth
    • B-trees / 2-3 trees /2-3-4 trees
      • Problom with Binary search tree
      • solution:B Tree
      • The Real Name for Splitting Trees is “B Trees”
      • B-Tree Bushiness Invariants
      • B-Tree Runtime Analysis
        • Height of a B-Tree with Limit L(L: Max number of items per node.)
        • Runtime for contains
          • Runtime for contains:
          • Runtime for add
    • Summary

B-Trees

*** (Algs 424-431, 432-448 (extra))***

BST Tree Height

The difference in runtime between a worst-case tree and best-case tree is very dramati

  • Worst case: Θ(N)
  • Best-case: Θ(logN) (where N is number of nodes in the tree)
    在这里插入图片描述

the tree on the left side called “bushy”,the tree on the right hand called “spindly”(n its basically a linked list and the runtime is linear)

BigO is not equivalent to worst case! Remember, BigO is an upper bound,Thus, even though we said the worst-case runtime of a BST is Θ(N), it also falls under O(N ).(意味着runtime的增长速度小于等于N)

BST(binary search tree) Performance ,Height, Depth

  • depth: the number of links between a node and the root.
  • height: the lowest depth of a tree.
  • average depth: average of the total depths in the tree. You calculate this by taking :
    在这里插入图片描述 where d is depth and n is number of nodes at that depth.

for exampel:

在这里插入图片描述

average depth of the exampel: (0x1 + 1x2 + 2x4 + 3x6 + 4x1)/(1+2+4+6+1) = 2.35

The height of the tree determines the worst-case runtime, because in the worst case the node we are looking for is at the bottom of the tree.
The average depth determines the average-case runtime.

Random trees in the real world have Θ(log N) average depth and height.
In other words: Random trees are bushy, not spindly.but in same cases we couldn’t always insert items randomly in our tree,in other world we may get a spindly tree.

In the next chapter we will learn about a tree that always maintains its balance(always get the tree like a bushy tree)

B-trees / 2-3 trees /2-3-4 trees

Problom with Binary search tree

The problem with BST’s is that we always insert at a leaf node. This is what causes the height to increase.

假设有四个点k,v,y,z.,选择k为root,因为其余三个点均比k大,最后会形成一个bushy tree,倒是搜索一个点所需的时间是Θ(N)而不是Θ(logN)
Θ(logN)比Θ(N)要小很多
在这里插入图片描述

solution:B Tree

example for B Tree:

The process of adding a node to a 2-3-4 tree(每个点最多可以包含三个item) is:

  1. We still always inserting into a leaf node, so take the node you want to insert and traverse down the tree with it, going left and right according to whether or not the node to be inserted is greater than or smaller than the items in each node.
  2. After adding the node to the leaf node, if the new node has 4 nodes, then pop up the middle left node and re-arrange the children accordingly.(若叶子节点现在有4个item,我们因该将左边第二个item移到父节点,并将剩余的三个item按照大小一次拆分)
    在这里插入图片描述
  3. If this results in the parent node having 4 nodes, then pop up the middle left node again, rearranging the children accordingly.
  4. Repeat this process until the parent node can accommodate or you get to the root(若根节点中也有四个item,则把左边第二个拿出来作为新的root)
    在这里插入图片描述
  • more exampel:
    在这里插入图片描述
    在这里插入图片描述

Observation: Splitting-trees have perfect balance:
If we split the root, every node gets pushed down by exactly one level.
If we split a leaf node or internal node, the height doesn’t change

The Real Name for Splitting Trees is “B Trees”

Splitting tree is a better name, but I didn’t invent them, so we’re stuck with their real name: B-trees.

  • B-trees of order L=3 (每个节点可以有三个item) are also called a 2-3-4 tree or a 2-4 tree.
    • “2-3-4” refers to the number of children that a node can have, e.g. a 2-3-4 tree node may have 2, 3, or 4 children.
  • B-trees of order L=2 are also called a 2-3 tree.

B-Trees are most popular in two specific contexts:
Small L (L=2 or L=3):
Used as a conceptually simple balanced search tree (as today).
L is very large (say thousands).
Used in practice for databases and filesystems (i.e. systems with very large records).

B-Tree Bushiness Invariants

Because of the way B-Trees are constructed, we get two nice invariants:

  • All leaves must be the same distance from the source.
  • A non-leaf node with k items must have exactly k+1 children.
  • Example: The tree given below is impossible.
    and [5 6 7]) are a different distance from the source.
    Non-leaf node [2 3] has two items but only only one child. Should have three children.
    在这里插入图片描述

These invariants guarantee that our trees will be bushy.

B-Tree Runtime Analysis

Height of a B-Tree with Limit L(L: Max number of items per node.)

L=2

  • best case
    在这里插入图片描述
  • worst case
    在这里插入图片描述

Height: Between between best and worst case is ~logL+1(N) and ~log2(N),Overall height is therefore Θ(log N).

Runtime for contains
Runtime for contains:
  • Worst case number of nodes to inspect: H(Hight)
  • Worst case number of items to inspect per node: L
  • Overall runtime: O(HL)

Since H = Θ(log N), overall runtime is O(L log N).
Since L is a constant, runtime is therefore O(log N).

Runtime for add

Runtime for add:

  • Worst case number of nodes to inspect: H + 1
  • Worst case number of items to inspect per node: L
  • Worst case number of split operations: H + 1(若在leaf增加一个item后,超过该节点能承载的最大ITEM数,需要将左边第二个节点向上移动,最坏的情况是,当所有节点中均装有L个ITEM,此时添加一个新item,会导致某个item向上移动的操作一直进行,知道出现一个新的root)
  • 在这里插入图片描述

Overall runtime: O(HL)

Since H = Θ(log N), overall runtime is O(L log N).
Since L is a constant, runtime is therefore O(log N).

Bottom line: contains and add are both O(log N).

Summary

  • BSTs have best case height Θ(log N), and worst case height Θ(N).

  • Big O is not the same thing as worst case!

  • B-Trees are a modification of the binary search tree that avoids Θ(N) worst case.

  • Nodes may contain between 1 and L items.

  • contains works almost exactly like a normal BST.

  • add works by adding items to existing leaf nodes.

  • If nodes are too full, they split.

  • Resulting tree has perfect balance. Runtime for operations is O(log N).

  • Have not discussed deletion. See extra slides if you’re curious.

  • Have not discussed how splitting works if L > 3 (see some other class).

  • B-trees are more complex, but they can efficiently handle ANY insertion order.

这篇关于B-Trees|CS 61B Data Structures, Spring 2019的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384396

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja