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

相关文章

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin