Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Data Structures_Tree - Fatal编程技术网

Algorithm 用于维护数字的数据结构

Algorithm 用于维护数字的数据结构,algorithm,sorting,data-structures,tree,Algorithm,Sorting,Data Structures,Tree,请建议一个数据结构来维护数字,以便我能够回答以下问题- 查找(整数n)-O(日志n)) 计数小于k=O(对数(n))的数 插入-O(对数(n)) 这不是家庭作业,而是我在解决一个大问题时遇到的一个小问题- 我曾经想到过一种avl树,它在每个节点上保持子树中的节点数。但是我不知道在插入和重新平衡时如何在每个节点上保持这个计数。在二叉树中查找是O(log(n)),插入也是。 如果将子树大小存储在节点中: 您可以从子树中成功插入节点计数器后返回 删除相同内容时 所以子树大小就像一个find,O(l

请建议一个数据结构来维护数字,以便我能够回答以下问题-

查找(整数n)-O(日志n))

计数小于k=O(对数(n))的数

插入-O(对数(n))

这不是家庭作业,而是我在解决一个大问题时遇到的一个小问题-


我曾经想到过一种avl树,它在每个节点上保持子树中的节点数。但是我不知道在插入和重新平衡时如何在每个节点上保持这个计数。

在二叉树中查找是O(log(n)),插入也是。 如果将子树大小存储在节点中:

  • 您可以从子树中成功插入节点计数器后返回
  • 删除相同内容时

所以子树大小就像一个find,O(log(n))。

看看堆数据结构的不同变体,例如..

我也会尝试使用AVL树。如果不深入研究,我不认为这会太难补充。对于AVL树,您始终需要知道每个节点的每个子树的深度(或者至少是平衡因子)。因此,传播子树的大小应该不会太难。在旋转的情况下,您准确地知道每个节点和每个子树将落在何处,因此应该只需对旋转的节点进行简单的重新计算。

。。。到目前为止你在想什么?@m0skit0查看已编辑的问题。这些操作仅在平衡二元搜索树中记录(n)。我的问题就是如何更新其中的相关节点。@NitinGarg:每当有人提到二叉树时,它们很可能就是一棵平衡树。在节点上保存额外的计数信息只是在树上执行任何操作时保存不变量的问题。EAP也适用于查找n个最小数。OP要求“计算小于k的数字数”。我知道他对小于k的元素数感兴趣。这可以通过重复使用最小的元素或检查堆数据结构来解决。