Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 多个子树-线性时间访问复杂度_Algorithm_Tree - Fatal编程技术网

Algorithm 多个子树-线性时间访问复杂度

Algorithm 多个子树-线性时间访问复杂度,algorithm,tree,Algorithm,Tree,我的问题不在于支撑这棵树的结构,而在于我这样做的方式;因为我认为从长远来看,这个实现会花费很多 我有一个树结构,其中树节点将包含其子节点的引用列表。但是这里的问题是,在查找节点的子节点时,我们需要遍历需要线性时间(线性时间复杂性)的子节点列表。我还需要将这些都存储为直系子代(因为children这个词用于直系子代) 现在,有没有什么方法可以将列表结构以外的所有子对象放在一起,以便从列表中检索和删除子对象将是高效和对数的(如果可以的话)? 如果我要遍历树,然后从根节点转到正确的子节点,我必须检查

我的问题不在于支撑这棵树的结构,而在于我这样做的方式;因为我认为从长远来看,这个实现会花费很多

我有一个树结构,其中树节点将包含其子节点的引用列表。但是这里的问题是,在查找节点的子节点时,我们需要遍历需要线性时间(线性时间复杂性)的子节点列表。我还需要将这些都存储为直系子代(因为children这个词用于直系子代)

现在,有没有什么方法可以将列表结构以外的所有子对象放在一起,以便从列表中检索和删除子对象将是高效和对数的(如果可以的话)?

如果我要遍历树,然后从根节点转到正确的子节点,我必须检查每个子节点的条件。该检查将是线性搜索和检查。
我只想要一种技术,它将有助于改进遍历过程中在子列表中搜索正确子节点的算法。

与其让每个节点保持一个常规列表,不如让它保持一个排序列表(logn查找)或hashmap(恒定时间查找)。在这种情况下,排序可能是最好的,因此您可以轻松地迭代元素并节省空间。

与其让每个节点保持一个常规列表,不如让它保持一个排序列表(log n lookup)或hashmap(常量时间查找)。在这种情况下,排序可能是最好的,这样您就可以轻松地迭代元素并节省空间。

您需要更详细地描述您的数据结构,一个节点可以有多少子节点,它是按定义树还是不正确地使用术语树您需要更详细地描述您的数据结构,一个节点可以有多少子节点,是按定义树,还是不正确地使用术语树。这适用于节点包含字符串或int的情况,以便我可以排序并执行二进制搜索/分治算法以在对数时间内找到元素。@MasterJ好的,您的节点中必须有某种数据,如果它有数据,你可以对它进行排序是的,但在我的例子中,我只是保存了节点的引用,没有任何东西需要排序。在节点中创建任何优先级属性都会减少我保存引用的工作量,这就是为什么我不能有这样一个排序元素。@MasterJ您几乎总是可以有一个排序条件,但一旦您谈到引用,您必须指定一种语言以供进一步帮助,我将使用UI动态添加子级。就像我选择了一个节点,然后我通过在它下面拖放来选择它的子节点。执行此父节点将保留添加到该节点的所有节点的引用列表。我将这样做,这就是为什么引用不能有任何排序信息。这适用于节点包含字符串或int的情况,以便我可以排序并执行二进制搜索/分治算法,以在对数时间内找到元素。@MasterJ好的,您的节点中必须有某种数据,如果它有数据,你可以对它进行排序是的,但在我的例子中,我只是保存了节点的引用,没有任何东西需要排序。在节点中创建任何优先级属性都会减少我保存引用的工作量,这就是为什么我不能有这样一个排序元素。@MasterJ您几乎总是可以有一个排序条件,但一旦您谈到引用,您必须指定一种语言以供进一步帮助,我将使用UI动态添加子级。就像我选择了一个节点,然后我通过在它下面拖放来选择它的子节点。执行此父节点将保留添加到该节点的所有节点的引用列表。我将这样做,这就是为什么引用不能有任何排序信息。