iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >用Python编写B+树的插入操作
  • 785
分享到

用Python编写B+树的插入操作

B树的概念 2024-01-23 14:01:36 785人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

B+树插入操作需要考虑节点和平衡,如果是空树,按递增顺序将key插入叶子节点;如果不是空树,需要区分索引节点和叶子节点,不满足条件时还要对节点进行分解。 python实现B+树插入操作import math # 创建节点 cla

B+树插入操作需要考虑节点和平衡,如果是空树,按递增顺序将key插入叶子节点;如果不是空树,需要区分索引节点和叶子节点,不满足条件时还要对节点进行分解。

python实现B+树插入操作

import math
# 创建节点
class node:
    def __init__(self, order):
        self.order = order
        self.values = []
        self.keys = []
        self.nexTKEy = None
        self.parent = None
        self.check_leaf = False

    def insert_at_leaf(self, leaf, value, key):
        if (self.values):
            temp1 = self.values
            for i in range(len(temp1)):
                if (value == temp1[i]):
                    self.keys[i].append(key)
                    break
                elif (value < temp1[i]):
                    self.values = self.values[:i] + [value] + self.values[i:]
                    self.keys = self.keys[:i] + [[key]] + self.keys[i:]
                    break
                elif (i + 1 == len(temp1)):
                    self.values.append(value)
                    self.keys.append([key])
                    break
        else:
            self.values = [value]
            self.keys = [[key]]


# B+树
class BplusTree:
    def __init__(self, order):
        self.root = Node(order)
        self.root.check_leaf = True

    # 插入操作
    def insert(self, value, key):
        value = str(value)
        old_node = self.search(value)
        old_node.insert_at_leaf(old_node, value, key)

        if (len(old_node.values) == old_node.order):
            node1 = Node(old_node.order)
            node1.check_leaf = True
            node1.parent = old_node.parent
            mid = int(math.ceil(old_node.order / 2)) - 1
            node1.values = old_node.values[mid + 1:]
            node1.keys = old_node.keys[mid + 1:]
            node1.nextKey = old_node.nextKey
            old_node.values = old_node.values[:mid + 1]
            old_node.keys = old_node.keys[:mid + 1]
            old_node.nextKey = node1
            self.insert_in_parent(old_node, node1.values[0], node1)

    # 搜索操作
    def search(self, value):
        current_node = self.root
        while(current_node.check_leaf == False):
            temp2 = current_node.values
            for i in range(len(temp2)):
                if (value == temp2[i]):
                    current_node = current_node.keys[i + 1]
                    break
                elif (value < temp2[i]):
                    current_node = current_node.keys[i]
                    break
                elif (i + 1 == len(current_node.values)):
                    current_node = current_node.keys[i + 1]
                    break
        return current_node

    # 搜索节点
    def find(self, value, key):
        l = self.search(value)
        for i, item in enumerate(l.values):
            if item == value:
                if key in l.keys[i]:
                    return True
                else:
                    return False
        return False

    # 在父级插入
    def insert_in_parent(self, n, value, ndash):
        if (self.root == n):
            rootNode = Node(n.order)
            rootNode.values = [value]
            rootNode.keys = [n, ndash]
            self.root = rootNode
            n.parent = rootNode
            ndash.parent = rootNode
            return

        parentNode = n.parent
        temp3 = parentNode.keys
        for i in range(len(temp3)):
            if (temp3[i] == n):
                parentNode.values = parentNode.values[:i] + \
                    [value] + parentNode.values[i:]
                parentNode.keys = parentNode.keys[:i +
                                                  1] + [ndash] + parentNode.keys[i + 1:]
                if (len(parentNode.keys) > parentNode.order):
                    parentdash = Node(parentNode.order)
                    parentdash.parent = parentNode.parent
                    mid = int(math.ceil(parentNode.order / 2)) - 1
                    parentdash.values = parentNode.values[mid + 1:]
                    parentdash.keys = parentNode.keys[mid + 1:]
                    value_ = parentNode.values[mid]
                    if (mid == 0):
                        parentNode.values = parentNode.values[:mid + 1]
                    else:
                        parentNode.values = parentNode.values[:mid]
                    parentNode.keys = parentNode.keys[:mid + 1]
                    for j in parentNode.keys:
                        j.parent = parentNode
                    for j in parentdash.keys:
                        j.parent = parentdash
                    self.insert_in_parent(parentNode, value_, parentdash)

# 输出树
def printTree(tree):
    lst = [tree.root]
    level = [0]
    leaf = None
    flag = 0
    lev_leaf = 0

    node1 = Node(str(level[0]) + str(tree.root.values))

    while (len(lst) != 0):
        x = lst.pop(0)
        lev = level.pop(0)
        if (x.check_leaf == False):
            for i, item in enumerate(x.keys):
                print(item.values)
        else:
            for i, item in enumerate(x.keys):
                print(item.values)
            if (flag == 0):
                lev_leaf = lev
                leaf = x
                flag = 1

record_len = 3
bplustree = BplusTree(record_len)
bplustree.insert('5', '33')
bplustree.insert('15', '21')
bplustree.insert('25', '31')
bplustree.insert('35', '41')
bplustree.insert('45', '10')

printTree(bplustree)

if(bplustree.find('5', '34')):
    print("Found")
else:
    print("Not found")

以上就是用Python编写B+树的插入操作的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 用Python编写B+树的插入操作

本文链接: https://www.lsjlt.com/news/556748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用Python编写B+树的插入操作
    B+树插入操作需要考虑节点和平衡,如果是空树,按递增顺序将key插入叶子节点;如果不是空树,需要区分索引节点和叶子节点,不满足条件时还要对节点进行分解。 Python实现B+树插入操作import math # 创建节点 cla...
    99+
    2024-01-23
    B树的概念
  • 使用Python编写B+树的删除操作代码
    B+树删除操作需要先找到删除节点的位置,然后判断节点的键数。 如果节点中的键数量超过了最小数量,直接删除即可。 如下图,删除“40”: 如果节点中有确切的最小键数,删除就需要从兄弟节点那里借用,将兄弟节点的中间键添加到父节点。如下...
    99+
    2024-01-22
    B树的概念
  • 详解B树删除操作:使用Python实现B树删除操作的详细图解
    B树删除操作需要考虑节点所在位置和平衡,并且很有可能会发生下溢的情况。当一个节点包含的子节点数量少于它应该持有的最小数量时,就会发生下溢。 图文展示B树删除操作原理 在不影响平衡情况下。 下溢情况。 删除内部节点。 Python实...
    99+
    2024-01-22
    B树的概念
  • Python实现B树插入算法的原理图解
    B树是高度平衡的二叉搜索树,进行插入操作,要先获取插入节点的位置,遵循节点比左子树大,比右子树小,在需要时拆分节点。 一图看懂B树插入操作原理 B树插入算法BreeInsertion(T, k)r  root[T]if n[r] ...
    99+
    2024-01-23
    B树的概念
  • python操作mysql批量插入
    一、大量信息插入 通过python向mysql插入大量数据时,可以有两种方法: for + cursor.execute(sql),最后集中提交(commit()) cursor.executemany(sql,list) 两种方法效率上和...
    99+
    2023-08-31
    mysql 数据库 python
  • 用python编写maya插件
    1. python的安装 在Eclipse中安装pydev环境,pydev更新地址为:  http://pydev.org/updates 2. 配置python环境: 打开Eclipse菜单Window/Preferences,在PyD...
    99+
    2023-01-31
    插件 python maya
  • python 编写输出到csv的操作
    如下所示: def test_write(self): fields=[] fields.append(orderCode) with open(r'./test001....
    99+
    2024-04-02
  • python操作文件写入内容
    [root@bogon ~]# cat file.py  #/usr/bin/env python  # coding: utf-8 ecs="efwefwffrfrer" ipaddrr="192.168.56.10" print typ...
    99+
    2023-01-31
    操作 文件 内容
  • MySQL中B+树索引的作用是什么
    本篇文章给大家分享的是有关MySQL中B+树索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。树的简介树的简介树跟数组、链表、堆栈...
    99+
    2024-04-02
  • Python中如何实现二叉排序树的定义、查找、插入、构造、删除操作
    这篇文章将为大家详细讲解有关Python中如何实现二叉排序树的定义、查找、插入、构造、删除操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 二叉排序树的定义  二叉排序树 ( B i n a r y...
    99+
    2023-06-15
  • 基于红黑树插入操作原理及java实现的示例分析
    这篇文章主要介绍基于红黑树插入操作原理及java实现的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!红黑树是一种二叉平衡查找树,每个结点上有一个存储位来表示结点的颜色,可以是RED或BLACK。红黑树具有以下...
    99+
    2023-05-30
    java
  • Python 操作pdf pdfplumber读取PDF写入Excel
    目录1. Python 操作pdf(pdfplumber读取PDF写入Excel1.1 安装pdfplumber模块库1.2 常用操作1.2.1 Python读取pdf文件案例1.2...
    99+
    2024-04-02
  • Java创建二叉搜索树,实现搜索,插入,删除的操作实例
    Java实现的二叉搜索树,并实现对该树的搜索,插入,删除操作(合并删除,复制删除)首先我们要有一个编码的思路,大致如下: 1、查找:根据二叉搜索树的数据特点,我们可以根据节点的值得比较来实现查找,查找值大于当前节点时向右走,反之向左走!2、...
    99+
    2023-05-30
    java 二叉搜索树 搜索
  • 如何利用 Python 编写文件操作的学习笔记?
    Python 是一门强大的编程语言,它可以用于各种任务,包括文件操作。在本文中,我们将介绍如何利用 Python 编写文件操作的学习笔记。 一、Python 文件操作的基础知识 在 Python 中,我们可以使用内置的 open() 函数来...
    99+
    2023-11-14
    文件 学习笔记 关键字
  • 如何深入学习Html DOM树的操作
    这篇文章将为大家详细讲解有关如何深入学习Html DOM树的操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。你对HTML DOM树的概念是否了解, 这里和...
    99+
    2024-04-02
  • 使用Java编写一个插入排序算法
    使用Java编写一个插入排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、算法原理插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。假设我们输入...
    99+
    2023-05-31
    java 插入排序 ava
  • Mybatis批量插入返回插入成功后的主键id操作
    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<ins...
    99+
    2024-04-02
  • B+树在数据库索引中的作用是什么
    本篇文章给大家分享的是有关B+树在数据库索引中的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、B-树和B+树回顾1.B-树B-tree(多路搜索树)是一种常见的数...
    99+
    2023-06-19
  • Python 文件的读写操作
    文章目录 一、Python 文件读写概述二、使用 open() 打开文件三、使用 read()、readline()、readlines() 读取数据四、使用 write()、writelin...
    99+
    2023-09-29
    职场和发展 java python 后端 算法
  • Python怎么读取和写入操作CSV文件
    这篇文章主要介绍“Python怎么读取和写入操作CSV文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么读取和写入操作CSV文件”文章能帮助大家解决问题。什么是 CSV 文件?CSV...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作