Algorithm 如何在空(3,5)树中插入元素?

Algorithm 如何在空(3,5)树中插入元素?,algorithm,data-structures,tree,b-tree,Algorithm,Data Structures,Tree,B Tree,我知道人们真的不喜欢在这里看到家庭作业问题,但我现在不知道该怎么办 在我们的算法讲座中,我被要求创建一个(3,5)-树。开始时它是空的,然后我们调用它上的各种插入 然而,我不明白插入(3,5)树是如何工作的。正如许多资料显示的那样,用(2,4)树做同样的事情是相当容易的。元素将创建树的上层,并将现有节点拆分为两部分。我们在课堂上也注意到了这一点。然而,这对(3,5)棵树不起作用,是吗?如果我将我的节点一分为二,那么新创建的节点将只有2个子节点。但是应该有3个,因为每个节点必须至少有“a”(在本例

我知道人们真的不喜欢在这里看到家庭作业问题,但我现在不知道该怎么办

在我们的算法讲座中,我被要求创建一个(3,5)-树。开始时它是空的,然后我们调用它上的各种插入

然而,我不明白插入(3,5)树是如何工作的。正如许多资料显示的那样,用(2,4)树做同样的事情是相当容易的。元素将创建树的上层,并将现有节点拆分为两部分。我们在课堂上也注意到了这一点。然而,这对(3,5)棵树不起作用,是吗?如果我将我的节点一分为二,那么新创建的节点将只有2个子节点。但是应该有3个,因为每个节点必须至少有“a”(在本例中为3)个子节点


意识到我需要从一个节点创建3个新节点。但是规则是什么呢?我在哪里分手?我也会失去我们注意到的不变量,地板((b+1)/2)元素必须到左边。

@AdrianColomitchi我只是把它添加到根中。也许它没有说出我的问题到底是什么。我的问题不是插入一个元素。它涉及各种元素。在我的例子中,insert使用不同的元素调用了23次。在2-4树中,我需要在第4次调用时创建一个新的根,如果正确的话,在第5次调用时创建一个3-5树。但是我真的不知道如何操作第五次插入。
正如许多资料所显示的那样
你演讲的笔记显示了什么?根节点可以有多少子节点?一个节点分成多少个节点?当一个节点需要拆分时,有多少密钥需要重新分发?(最具体的标签有误导性,试试。)@greybeard我的笔记与我链接的笔记大致相同。这就是我所困惑的。我被告知如果节点中的元素超过b-1,就要分割,并且要分割它所说的“左部分”仍然有地板((b+1)/2)元素。但对于哪个元素应该向上移动以及如何拆分,并没有其他评论。当然,注释层((b+1)/2)应该向左,足以定义2-4树(而不是我所看到的3-5树)的向上移动和剩余元素。因此,我希望有一些常见的方法来解决这个问题。
[我的笔记没有]评论哪个元素应该向上移动,以及如何拆分
来解决这个问题,这很可能是本作业的目的。你已经注意到没有(与下限@greybeard Ohh相比,好吧。我会试试。@Adriancolomychi我只是把它添加到根中。也许它没有说出我的问题真正是什么。我的问题不是插入一个元素。而是关于各种元素。在我的情况下,使用不同的元素调用insert 23次。在2-4树中,我需要创建一个新的root在第四次调用时,在第五次调用的3-5树中,如果我没有弄错的话。但是我真的不知道如何操作第五次插入。
正如许多源所显示的那样
你的讲稿显示了什么?根节点可能有多少子节点?一个节点被拆分成多少个节点?当一个节点需要拆分时,有多少键需要重新分配?(请尝试使用最具体的标记。)@greybeard我的笔记与我链接的笔记大致相同。这就是我感到困惑的地方。我被告知如果节点中的元素超过b-1,就拆分,并且拆分它所说的“左侧部分”仍然有地板((b+1)/2)元素。但是没有其他关于哪个元素应该向上移动以及如何拆分的注释。当然,注释层((b+1)/2)应该向左移动足以定义2-4树(而不是我看到的3-5树)的向上移动和剩余元素。因此,我希望有一些常见的方法来完成此操作。
[我的注释没有]关于哪个元素应该向上移动以及如何拆分
以解决此问题的注释很可能是本作业的目的。您已经注意到没有(与下限@greybeard Ohh相比),好的。我会尝试。