当前位置: 首页 > news >正文

乐清网站建设lonwap360建筑网如何修改名字

乐清网站建设lonwap,360建筑网如何修改名字,p2p网站建设cms,男的做直播网站好B树的实现#xff1a;代码示例与解析 引言 B树是一种自平衡的树数据结构#xff0c;广泛应用于文件系统和数据库系统中。它是一种多路搜索树#xff0c;旨在保持数据有序并允许高效的查找、插入和删除操作。本文将深入探讨B树的实现#xff0c;提供完整的代码示例和详细的…B树的实现代码示例与解析 引言 B树是一种自平衡的树数据结构广泛应用于文件系统和数据库系统中。它是一种多路搜索树旨在保持数据有序并允许高效的查找、插入和删除操作。本文将深入探讨B树的实现提供完整的代码示例和详细的解析。 B树的基本概念 定义 B树是一种平衡的多路搜索树其定义如下 每个节点最多有m个子节点m称为B树的阶。除根节点外每个节点至少有⌈m/2⌉个子节点。每个节点存储k-1个关键字并且这些关键字按照从小到大的顺序存储。关键字将子节点分隔成k个区间节点的子节点树包含的关键字数目符合关键字分隔的区间。 性质 根节点至少有两个子节点除非它是叶节点。所有叶子节点都位于同一层。节点的关键字将子节点的关键字分隔成区间这些区间分别在节点的左子树和右子树中。 操作 B树的基本操作包括查找、插入和删除。每个操作都涉及节点的分裂和合并以保持树的平衡。 B树的实现 下面我们使用Python来实现B树并提供详细的代码解析。 B树节点类 首先我们定义一个B树节点类BTreeNode它包含基本的属性和方法 class BTreeNode:def __init__(self, t, leafFalse):self.t t # 最小度数self.leaf leaf # 是否为叶子节点self.keys [] # 存储关键字self.children [] # 存储子节点def insert_non_full(self, key):i len(self.keys) - 1if self.leaf:# 在叶子节点中插入新关键字self.keys.append(None)while i 0 and self.keys[i] key:self.keys[i 1] self.keys[i]i - 1self.keys[i 1] keyelse:# 在非叶子节点中插入新关键字while i 0 and self.keys[i] key:i - 1if len(self.children[i 1].keys) 2 * self.t - 1:self.split_child(i 1)if self.keys[i 1] key:i 1self.children[i 1].insert_non_full(key)def split_child(self, i):t self.ty self.children[i]z BTreeNode(t, y.leaf)self.children.insert(i 1, z)self.keys.insert(i, y.keys[t - 1])z.keys y.keys[t:(2 * t - 1)]y.keys y.keys[0:(t - 1)]if not y.leaf:z.children y.children[t:(2 * t)]y.children y.children[0:(t - 1)]B树类 接下来我们定义B树类BTree它包含树的根节点和基本的树操作 class BTree:def __init__(self, t):self.t t # 最小度数self.root BTreeNode(t, True)def insert(self, key):root self.rootif len(root.keys) 2 * self.t - 1:s BTreeNode(self.t, False)s.children.insert(0, root)s.split_child(0)i 0if s.keys[0] key:i 1s.children[i].insert_non_full(key)self.root selse:root.insert_non_full(key)def search(self, key, nodeNone):if node is None:node self.rooti 0while i len(node.keys) and key node.keys[i]:i 1if i len(node.keys) and key node.keys[i]:return nodeelif node.leaf:return Noneelse:return self.search(key, node.children[i])def delete(self, key):self._delete(self.root, key)if len(self.root.keys) 0:if not self.root.leaf:self.root self.root.children[0]else:self.root Nonedef _delete(self, node, key):t self.tif node is None:returnidx 0while idx len(node.keys) and node.keys[idx] key:idx 1if idx len(node.keys) and node.keys[idx] key:if node.leaf:node.keys.pop(idx)else:if len(node.children[idx].keys) t:pred self.get_pred(node, idx)node.keys[idx] predself._delete(node.children[idx], pred)elif len(node.children[idx 1].keys) t:succ self.get_succ(node, idx)node.keys[idx] succself._delete(node.children[idx 1], succ)else:self.merge(node, idx)self._delete(node.children[idx], key)else:if node.leaf:returnflag idx len(node.keys)if len(node.children[idx].keys) t:self.fill(node, idx)if flag and idx len(node.keys):self._delete(node.children[idx - 1], key)else:self._delete(node.children[idx], key)def get_pred(self, node, idx):current node.children[idx]while not current.leaf:current current.children[-1]return current.keys[-1]def get_succ(self, node, idx):current node.children[idx 1]while not current.leaf:current current.children[0]return current.keys[0]def merge(self, node, idx):child node.children[idx]sibling node.children[idx 1]child.keys.append(node.keys[idx])child.keys.extend(sibling.keys)if not child.leaf:child.children.extend(sibling.children)node.keys.pop(idx)node.children.pop(idx 1)def fill(self, node, idx):t self.tif idx ! 0 and len(node.children[idx - 1].keys) t:self.borrow_from_prev(node, idx)elif idx ! len(node.keys) and len(node.children[idx 1].keys) t:self.borrow_from_next(node, idx)else:if idx ! len(node.keys):self.merge(node, idx)else:self.merge(node, idx - 1)def borrow_from_prev(self, node, idx):child node.children[idx]sibling node.children[idx - 1]child.keys.insert(0, node.keys[idx - 1])if not child.leaf:child.children.insert(0, sibling.children.pop())node.keys[idx - 1] sibling.keys.pop()def borrow_from_next(self, node, idx):child node.children[idx]sibling node.children[idx 1]child.keys.append(node.keys[idx])if not child.leaf:child.children.append(sibling.children.pop(0))node.keys[idx] sibling.keys.pop(0)代码解析 BTreeNode 类 BTreeNode 类表示 B 树的节点其属性包括 t: B 树的最小度数。leaf: 一个布尔值表示节点是否为叶节点。keys: 一个列表存储节点的关键字。children: 一个列表存储节点的子节点。 该类的方法包括 insert_non_full(key): 在非满节点中插入关键字。split_child(i): 分裂满子节点。 BTree 类 BTree 类表示整个 B 树其属性包括 t: B 树的最小度数。root: B 树的根节点。 该类的方法包括 insert(key): 插入关键字。search(key, nodeNone): 查找关键字。delete(key): 删除关键字。_delete(node, key): 辅助删除方法。get_pred(node, idx): 获取前驱关键字。get_succ(node, idx): 获取后继关键字。merge(node, idx): 合并节点。fill(node, idx): 填充节点。borrow_from_prev(node, idx): 从前一个兄弟节点借一个关键字。borrow_from_next(node, idx): 从下一个兄弟节点借一个关键字。 示例代码 下面的示例代码展示了如何使用上述 B 树实现进行插入、查找和删除操作 if __name__ __main__:btree BTree(3)# 插入关键字keys_to_insert [10, 20, 5, 6, 12, 30, 7, 17]for key in keys_to_insert:btree.insert(key)# 查找关键字key_to_search 6result btree.search(key_to_search)if result:print(f关键字 {key_to_search} 找到在节点: {result.keys})else:print(f关键字 {key_to_search} 不存在)# 删除关键字keys_to_delete [6, 13, 7]for key in keys_to_delete:btree.delete(key)print(f删除关键字 {key} 后的树结构:)# 打印树结构print_tree(btree.root)打印树结构 为了更好地理解 B 树的结构我们可以编写一个函数来打印树结构 def print_tree(node, level0):print(Level, level, :, node.keys)level 1for child in node.children:print_tree(child, level)结论 本文详细介绍了 B 树的基本概念、实现以及代码示例。通过 Python 实现 B 树并提供相关操作的代码解析我们可以更好地理解 B 树的工作原理和应用场景。B 树是一种非常重要的数据结构其高效的查找、插入和删除操作使其在数据库系统和文件系统中得到了广泛应用。希望本文能够帮助读者更好地掌握 B 树的实现与应用。
http://www.w-s-a.com/news/228992/

相关文章:

  • asp网站怎么仿站推广软件下载平台
  • 电子商务网站建设期末试题08答案互联网怎么做
  • 规范门户网站的建设和管理办法微信网站开发公司电话
  • 免费行情网站凡客的官网
  • 做网站运营的女生多吗海淀企业网站建设
  • 网站运行环境配置网站建设个一般需要花费多少钱
  • 广西平台网站建设报价wordpress 免费 企业 主题
  • 四川省建设厅职称查询网站辽宁省住房和城乡建设部网站
  • 公司网站后台登陆网站放到云服务器上怎么做
  • 济南 网站定制做网站购买域名
  • 代理分佣后台网站开发怎么用源码做网站视频
  • 天津网站建设招标wordpress七牛图片插件
  • 建设合同施工合同示范文本汕头市网络优化推广平台
  • 网站关键词修改老王搜索引擎入口
  • 那个网站做搬家推广比较好建设部网站办事大厅栏目
  • 做企业销售分析的网站广州网站设计建设
  • 建站流程wordpress怎么开伪静态
  • 服务器不是自己的做违法网站videopro wordpress
  • 北京建网站的公司哪个比较好网站开通告知书
  • 网站负责人 主体负责人黑龙江 建设监理协会网站
  • 手机网站焦点图代码建设工程质量检测网站
  • 墙绘做网站推广有作用没html网页制作用什么软件
  • 企业做网站有用吗网站推广的常用方法有哪些?
  • 景安做网站教程互联网小程序开发
  • 桂林北站离阳朔多远贵州省建设厅住房和城乡建设官网二建考试
  • 浙江省建设厅 网站是多少wordpress淘宝客一键
  • 网站流量少怎么做5个不好的网站
  • 随州网站建设有限公司个人申请注册公司需要多少钱
  • 东莞做商城网站建设wordpress批量下载外链图片
  • 新网站建设运营年计划书仓山区建设局招标网站