关于B树这种数据类型

问题描述

它到底有什么优势?搞了1天,我愣是没看明白。。查找到底如何快了,为什么数据索引都是用它。。比如我有一组数string[]a={"Nick","Nnn","Aba","Nna","AAA"};如果把它B树化,它是如何构造的?查找是如何查找的?要说查找快的话,当然是哈希表,查找是O(1),那叫一个快。。

解决方案

解决方案二:
啥意思呀,B树,。。。哪来的这词。。
解决方案三:
B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;
解决方案四:
好高端。
解决方案五:
你可以找一本数据结构的教材看一下。B树是稳定可预测的,它可以保证查询的时间复杂性。并且它是具有合理的数据结构的,因此可以保证跟磁盘块的索引方式相一致。hash主要是针对内存中的数组,而不是针对海量数据。当把它针对海量数据来使用时,也还是必须使用类似“树”的形式将hash值映射到存储上,就不会显得快了。说“hash是o(1)的”这其实不可靠,只能说hash方法最快是o(1)的,但是最慢呢?其实hash方法最慢是o(n)。因此说hash很快,可以说hash跟“全表扫描接近”而很慢。hash是不稳定的,尽管达到“最慢”的可能性并不高,但是同样也不能保证总是达到最快的性能。因为它跟hash的算法有关,你用少量数据是不能测试出来的。比如说有1000万记录,假设用B+树可以保证平均进行13次读取操作读(假设不考虑缓存的情况下)就能查询出来记录,而用hash并不能永远都是最快1次读取操作就读取出来,也不能保证20次读取读就能读取出来(比如说信息集中于某一小部分hash值)。而且把hash值从内存转移到对应的磁盘具体的磁道、磁盘块上也是非常复杂的。
解决方案六:
引用2楼xuzuning的回复:

B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;

B-树:多路搜索树比如有ABC,ABB,AC是不是就像A||BC||CB这样来构建?
解决方案七:
B树未必是“二叉”的。在节点上往往是一个数组,例如有120个容量空间,而不总是只能容2个索引。而且说“n叉树、平衡树、B+树、B*树”等等,这只是一般的理论性的叫法。实际的系统,每一个都进行了扩充和优化,比理论上的模型更优。
解决方案八:
引用4楼sp1234的回复:

你可以找一本数据结构的教材看一下。B树是稳定可预测的,它可以保证查询的时间复杂性。并且它是具有合理的数据结构的,因此可以保证跟磁盘块的索引方式相一致。hash主要是针对内存中的数组,而不是针对海量数据。当把它针对海量数据来使用时,也还是必须使用类似“树”的形式将hash值映射到存储上,就不会显得快了。说“hash是o(1)的”这其实不可靠,只能说hash方法最快是o(1)的,但是最慢呢?其实hash方法最慢是o(n)。因此说hash很快,可以说hash跟“全表扫描接近”而很慢。hash是不稳定的,尽管达到“最慢”的可能性并不高,但是同样也不能保证总是达到最快的性能。因为它跟hash的算法有关,你用少量数据是不能测试出来的。比如说有1000万记录,假设用B+树可以保证平均进行13次读取操作读(假设不考虑缓存的情况下)就能查询出来记录,而用hash并不能永远都是最快1次读取操作就读取出来,也不能保证20次读取读就能读取出来(比如说信息集中于某一小部分hash值)。而且把hash值从内存转移到对应的磁盘具体的磁道、磁盘块上也是非常复杂的。

我大概明白你的意思。hash在理想的情况下(不同的key通过hash函数转换后的结果是不同的)是o(1)。如果冲突,接下来的查找就是线性的了。。关键是hash函数。。我主要不明白B树它到底是怎么构造和查找的,我愣是没明白。。我看了很多资源。。是不是像我5楼的回复那样构造?如果数据为5-18位长,我最多查找18次肯定能找到我要的数据
解决方案:
假设用B+树可以保证平均进行13次读取操作读-->假设用B+树可以保证最慢进行13次读取操作读用B+树,我们说“可以保证最慢进行多少次读操作(不考虑缓存的情况下)就能查询到”。而用hash,我们说“最快可以达到o(1)。这种差别就看得出来了!保存大量数据的最初,为了靠谱起见,必须能够使用B+树,而不是hash。但是作为研究,你可以自己在B+排序以外在选择hash排序,那是你自己的“爱好”。
解决方案:
中序,左序,右序……我全都忘了

时间: 2024-09-16 20:08:58

关于B树这种数据类型的相关文章

WPF:使用Json.NET在TreeView中树形显示JSON数据

原文  WPF:使用Json.NET在TreeView中树形显示JSON数据 据 读者可以参考这个开源的可以树形显示XML和JSON的工具: Mgen Object 603:XML/JSON树形显示小工具 或者一个更大的开源工程(构建和分析HTTP并支持XML及JSON的树形显示): Mgen Bluckbadda   效果如下: (每一个项目中的左侧黑字是数据的值,右侧灰字是数据的类型.对于对象或数组,黑字会显示对象的属性个数或数组的成员个数) (上图中的JSON数据来自:http://www

java实现动态数据类型 的树

问题描述 从数据库中动态的获取部门 显示动态树,逐级加载 总部门····部门1 ··部门1+····部门2 ··部门2+····部门3 ··部门3+ 解决方案 http://www.adp-gmbh.ch/ora/sql/connect_by_nocycle.html这里有个文章可以看一下.解决方案二:给你推荐一个树,很好用dhtmlxtree解决方案三: 解决方案四:是Oracle数据库吗 ?如果是的话 可以用下面的语法 Connect by prior start with你可以去Googl

访问XML数据的三中基于树模型||基于游标||流式API比较

xml|比较|访问|数据|游标 无处不在的 XML 除了可以表示结构化和半结构化的数据之外,XML 还有许多其他特性,使其成为一种被广泛采用的数据表示格式.XML 是可扩展的,与平台无关的,并且由于其完全采用 Unicode 而支持国际化.XML 是基于文本的格式,因此,用户可以根据需要使用标准的文本编辑工具读取和编辑 XML 文档. XML 的可扩展性表现在多个方面.首先,与 HTML 不同,XML 没有固定的词汇表.相反,用户可以使用 XML 定义特定的应用程序或行业专用的词汇表.其次,与使

JSP实现论坛树型结构的具体算法

js|树型结构|算法 实现论坛树型结构的算法很多,我现在的JSP论坛采用的也是当中的一种:不用递归实现树型结构的算法,现在我将论坛树型结构的具体算法和大家介绍一下,和大家一起交流. 1.演示表的结构: 表名:mybbslist 字段 数据类型 说明 BBSID 自动编号 RootID Int 根帖ID,本身为根帖则RootID = ID FID Int 父帖ID,上一层帖子的ID,如是根帖则FID = 0 DEPTH Int 根帖Level=0,其他依据回复的深度递增 BBSSubject Ch

Oracle Form Builder中使用树的心得

oracle|心得 一.树的简介Developer 6.0以上版本提供了hierarchy tree(层次树)的概念,htree控件非常方便,只需要少量的编程即可实现显示层次结构的目的.   树的特有属性中如下几个较为重要: l         多项选择(Multi-Selection):是否允许一次选中树的多个节点.如果不允许,那么              选中第二个节点时,第一个被选中的节点会取消选择. l         记录组(Record Group):指定生成树的记录组的名字.  

“中值排序基数法实现树状结构”的补充

排序 "中值排序基数法实现树状结构"的补充     由于一时疏忽,造成了此法"对于int类型的基数字段,对原始贴的回复只能有31个:numeric类型的基数字段,对原始贴的回复也不能超过120个"(实际上是对于int型字段,原始贴的回复第32个以上的树状结构显示开始紊乱,对于numeric型的基数字段,原始贴的回复从121个以上树状结构显示开始紊乱--回复并不会出问题),这是由于计算机存储精度引起的.    我们可以将加贴的存储过程修改一下(加进前面加上**号的行)

数据结构教程 第二课 抽象数据类型的表示与实现

本课主题: 抽象数据类型的表示与实现 教学目的: 了解抽象数据类型的定义.表示和实现方法 教学重点: 抽象数据类型表示法.类C语言语法 教学难点: 抽象数据类型表示法 授课内容: 一.抽象数据类型定义(ADT) 作用:抽象数据类型可以使我们更容易描述现实世界.例:用线性表描述学生成绩表,用树或图描述遗传关系. 定义:一个数学模型以及定义在该模型上的一组操作. 关键:使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式.定义它的人同样不必要关心它如何存储. 例:线性表这样的抽象数据类型,其数学

解析SQL Server 2008数据库中的新数据类型

对于关系型数据库来说,表现树状的层次结构始终是一个问题.微软在SQL Server 2005中首次尝试了 解决这个问题,那就是被称之为通用数据表表达式(Common Table Expressions,CTE)的实现方式. 尽管CTE在现有的数据库架构中运行良好,微软找到了一种将此类层次结构作为头等概念来使用的方式 .因此,为了实现这种效果,他们在SQL Server 2008中提出了一种"HierarchId"数据类型 . 在传统的层次结构中,一条记录仅仅储存了一个指向它父记录的引用

SQL Server 2008 层次ID数据类型

目录 准备工作1 练习:使用HierarchyID数据类型2 准备工作 预计完成本实验所需的时间 40 分钟 目标 在完成本实验后,您将可以: 处理SQL Server 2008当中的层次ID数据类型 先决条件 在完成本实验前,您必须具有: 编写Transact-SQL 脚本与使用SQL Server Management Studio的相关经验. 实验场景 SQL Server 2008允许数据库应用程序以一种比现有方法更为高效的方式来构建树状结构.HierarchyId是一种新的系统类型,它