data-structures相关内容

'Head First' 风格的数据结构算法书?

我喜欢关于面向对象设计的 Head First 系列书籍.这是对这个主题的一个非常温和和有趣的介绍.我目前正在学习数据结构课程,发现我们正在使用的文本(Kruse/Ryba 数据结构和 C++ 中的程序设计)非常枯燥且难以理解.这主要是由于我自己在数学领域的局限性. 有没有人知道数据结构文本的风格比较轻松,带有幽默感,但仍然涵盖了所有基础知识,例如二叉树、B 树和图? 解决方案 算法 ..
发布时间:2022-01-05 19:03:46 C/C++开发

什么时候选择RB树、B-Tree或AVL树?

作为程序员,我什么时候应该考虑使用 RB 树、B 树或 AVL 树?在决定选择之前需要考虑哪些关键点? 有人可以为每个树结构解释一个场景,为什么会参考关键点选择它而不是其他树结构吗? 解决方案 加点盐: 当您管理超过数千个项目并从磁盘或某些慢速存储介质对它们进行分页时,请使用 B 树. RB 树,当您在树上进行相当频繁的插入、删除和检索时. 当您的插入和删除相对于您 ..
发布时间:2022-01-05 19:03:38 其他开发

数据结构树和图有什么区别?

从学术上来说,Tree和Graph的数据结构有什么本质区别?那么基于树的搜索和基于图的搜索呢? 解决方案 树只是图的一种受限形式. 树有方向(父/子关系)并且不包含循环.它们属于有向无环图(或 DAG)的范畴.所以树是有限制的 DAG,一个孩子只能有一个父母. 需要指出的重要一点是,树不是递归数据结构.由于上述限制,它们不能作为递归数据结构来实现.但是也可以使用任何通常不是递归 ..
发布时间:2022-01-05 19:03:30 其他开发

检查二叉树是否是二叉搜索树的伪代码 - 不确定递归

我有作业要写伪代码来检查有效的二叉树是否是搜索二叉树. 我创建了一个数组来保存树的有序值.如果有序值按降序排列,则意味着它确实是 BST.但是,我在方法 InOverArr 中的递归遇到了一些问题. 我需要更新数组的索引,以便按照它们在树中的顺序将值提交给数组. 我不确定在递归过程中索引是否真的正确更新..是不是?如果你看到一些问题,你能帮我解决这个问题吗?非常感谢 伪代码 ..
发布时间:2022-01-05 19:02:36 其他开发

如何操作 JSON 树的叶子

我想使用 JAVA 在 JSON 树中用 _RARE_ 替换稀有词. 我的rareWords列表包含 迟到填充罪犯 所以对于下面的 JSON ["S", ["PP", ["ADP", "In"], ["NP", ["DET", "the"], ["NP", ["ADJ", "late"], ["NOUN", "1700 我应该得到 ["S", ["PP", ["ADP", "In" ..
发布时间:2022-01-05 18:59:48 Java开发

非二叉树高度

有没有办法找到不一定是二进制的树的高度?二叉树的高度有很多算法,但没有一种算法适用于非二叉树. 解决方案 是的,有.递归方法可能类似于: 公共类TreeNode{私有列表>children = new ArrayList>();私人 T 数据 = 空;公共树节点(T数据){this.data = 数据;}公共列表>获取儿童(){返回儿童;}public void setChild(Tre ..
发布时间:2022-01-05 18:53:50 其他开发

来自先序和中序遍历的二叉树

如何从这些 pre/in order 遍历中获取树: 前:A、B、D、E、C、F、G、H在:E、D、B、A、G、F、H、C 编辑:我的回答 A/\乙丙/\DF//\EG H 解决方案 编辑:更正, 您没有正确答案,FGH 在 C 的左侧. 要验证只需针对它运行两个算法: PreOrder(节点)如果节点为空返回打印(节点)预购(node.left)预购(节点.右) ..
发布时间:2022-01-05 18:50:57 其他开发

二叉树的第一个公共祖先

如果我有一个这样的二叉搜索树,那么节点 6 和 1 的最低共同祖先是什么? 解决方案 根据维基百科定义的最低共同祖先我纠正自己: 最低共同祖先(LCA)是图论中的一个概念,计算机科学.设 T 是一棵有 n 个节点的有根树.最低的共同祖先在两个节点 v 和 w 之间定义为最低T 中同时具有 v 和 w 作为后代的节点(我们允许一个节点成为自己的后代). 所以是的,按照这个定义,正 ..

反转数组查询

我有一个大小为 N 的数组,我给出了两种类型的查询 1 L R 反转 [L,R] 中的所有元素 2 L 找到索引 L 处的值. 示例:[1,2,3,4,5]1 2 4 ->[1,4,3,2,5]1 4 5 ->[1,4,3,5,2]2 5 ->2 Q-查询次数 Q 直截了当的解决方案将是O(Q*N),这会很慢,如何使它更快可以使用分割树? 解决方案 我不确定线段树算法是什么 ..
发布时间:2022-01-05 18:49:34 其他开发

解析文本以制作树数据结构

假设我正在从文件中读取一行: {Parent{{ChildA}{ChildB}}} 更复杂的例子: {Parent{{ChildA{ChildC}{ChildD}}{ChildB{ChildE}{ChildF}}}} 用于构造树的语法是什么. {} 括号内的任何名称都是一个节点,如果在该括号内还有其他节点(括号),则这些节点是子节点. 我能够使用计数器解析第一个特定示例,但只能 ..
发布时间:2022-01-05 18:49:27 C/C++开发

哈希表与树

哈希表总是比树快吗?尽管哈希表的搜索复杂度为 O(1),但假设由于散列函数设计不当,会发生大量冲突,并且如果我们使用链式结构(例如平衡树)处理冲突,那么搜索的最坏情况运行时间将是 O(log n).那么,即使在最坏的情况下,我是否可以得出大数据集或小数据集的结论,哈希表总是比树快?另外,如果我有足够的内存并且不想进行范围搜索,我可以随时使用哈希表吗? 解决方案 哈希表总是比树快吗? ..
发布时间:2022-01-05 18:49:20 其他开发

存储整数范围的数据结构,查询范围和修改范围

我们需要维护 mobileNumber 及其在内存中的位置.挑战在于我们有超过 500 万用户并且存储每个用户的位置就像 500 万条记录的哈希图.为了解决这个问题,我们必须处理范围 我们获得了一系列电话号码,例如 range1 start="9899123446" end="9912345678" location="a" range2 start="9912345679" e ..
发布时间:2022-01-05 18:49:03 其他开发

完全二叉树和几乎完全二叉树的区别

完整树是每一层都完全填充的树,几乎完整的树是一棵树,如果最后一层没有完全填充,则所有节点尽可能地离开.我的困惑在于以下二叉树示例: O/\哦哦/\/\哦哦哦哦/\哦哦 根据定义它应该是一棵不完全二叉树,但它是一棵完整的二叉树.如果有人能详细说明这个完整的二叉树是怎样的,为什么不是一个不完整的二叉树? 解决方案 你的例子是一棵完全二叉树:一棵完全二叉树可以有一个不完整的最后一层,只要它 ..
发布时间:2022-01-05 18:48:00 其他开发

平衡 AVL 树需要不止一次旋转?

我最好的猜测是,当您从已经平衡的 AVL 树中插入或删除一个元素时,一次旋转总是足以平衡 AVL 树. 一转就够了吗?一个示例将有助于需要多次轮换的情况. PS:我只将 RL/LR 旋转算作一次旋转. 解决方案 对于 insert 最多旋转 1 圈. 对于删除,旋转次数以 O(log(n)) 为界.Log(n) 是树的高度. 关于 AVL 删除的更多解释.当你从 AVL 中 ..
发布时间:2022-01-05 18:44:43 其他开发

AVL 树上的二叉搜索树

据我所知 AVL 树和 二叉搜索树 在平均情况下是相同的,在最坏的情况下,AVL 会击败 BST.这给了我一个暗示,即 AVL 在与它们交互的所有可能方式中总是优于 BST,也许在平衡实现方面增加了一点复杂性. 是否有任何理由应该首先使用 BST 而不是 AVL? 解决方案 首先,获得最佳性能不是编程的最终目标.因此,即使选项 B 总是比 A 更快并且消耗的内存更少,但这并不意味着它 ..

顺便说一句,“订单"有什么区别?和“学位"在树数据结构方面

B-树定义他们在 : 中使用“订单"术语 根据 Knuth 的定义,m 阶 B 树是满足以下性质的树:1. 每个节点最多有 m 个孩子.... 和“度"在树术语中定义为: Degree – 节点的子树数. 所以,它们是一样的吗?我感觉不到任何区别. 解决方案 Degree 表示 B 树中一个节点可以拥有的子节点数量的下限(根除外).即尽可能少的孩子.而 Order 表示子节点数量 ..
发布时间:2022-01-05 18:42:03 其他开发

如何使用树找到最长的公共子串?

根据wiki的最长公共子串问题可以使用后缀树来解决. 来自 wiki: 一组字符串的最长公共子串可以通过为字符串构建一个广义后缀树,然后找到具有来自所有字符串的叶节点的最深内部节点在它下面的子树中 我不明白这个. 示例:如果我有: ABCDE 和 XABCZ 那么后缀树是(由于空间原因省略了来自 XABCZ 的一些分支): 最长的公共子串是 ABC 但这不是我看不到 wi ..
发布时间:2022-01-05 18:41:12 Java开发

Java中PriorityQueue和TreeSet的区别?

我试图了解何时使用这两种数据结构.据我所知,PriorityQueue 也以树的形式实现,因为文档指出插入、删除和包含的平均时间为 O(log(n)).TreeSet 也提供相同的时间复杂度.加上它们都是不同步的实现.而且我可以为它们编写比较器来充当最小堆或最大堆. 有人可以指出我在什么情况下使用这两组吗? 解决方案 如果需要队列,请使用 PriorityQueue.如果需要 Set ..
发布时间:2022-01-05 18:40:08 Java开发

如何在数据库中表示树状结构

我正在开始一个项目,我正处于设计阶段:也就是说,我还没有决定要使用哪个数据库框架.我将拥有创建类似“森林"结构的代码.也就是说,许多树,其中每棵树都是一个标准:节点和边.在代码创建这些树后,我想将它们保存在数据库中.(然后最终将它们拉出) 在 db 中表示数据的天真方法是具有两个表的关系数据库:节点和边.也就是说,节点表将有节点 id、节点数据等.而边表将是节点 id 到节点 id 的映射. ..
发布时间:2022-01-05 18:38:13 其他开发