我认为,你可以通过两 trees黑树这样做: 一个主要ook树,储存由比较功能订购的钥匙,一个指数-ook树,如清单所示,是任意订购的关键。 每个指数级分校必须有一个面积小的领域,如果每个小点都包含面积面积,那么红黑树可以按指数进行勘测。 See for example the RedBlackTreeSet implementation in the C5 Generic Collection Library。
关键ook树的每一条目都需要一个点子,才能进入指数-l树的相应条目。 除了左点和右边点,指数-l树将需要一个母点,以便进行自下而上的至上导航以及从上到下。
每一关键点都需要6个点:每一分点的通常左点和正确点,加上从关键角到指数-指标的点子,加上每个指数-指标的上级点子。 你们还需要每个节点的一位点子来说明储存的价值。
行动:
附录 - 对应行动将把钥匙插入两.树——一次在关键ook树中,一次在比较功能确定的位置上,再一次在指数-l树的最正确位置上。 植入红黑树是一种 log时间运行。
关键——这是在主要ook树上进行的,利用比较功能找到正确的位置——O(log(n))
Lookup by index - this can be done on the index-lookup field, as mentioned above - O(log(n))
关键指标——首先研究关键ook树O(log(n)的关键。 跟踪点对指数ook树。 (O(log(n)))对平方树进行跟踪。 使用面积田来确定钥匙的指数。 - O(log(n))
删除指数-在指数-l树中研究该项目。 删除指数ook树。 审视关键ook树的地基。 删除主要ook树。 所有业务均为O(log(n)) ,因此删除的是O(log(n) 。
Delete by key - use Get index from key to get the index of the key. Delete by index from the index-lookup tree. Delete by key from the key-lookup tree. O(log(n)) overall.
This structure also supports O(log(n)) insertion at any arbitrary position, not just at the end.
储存间接费用显然相当可观,但仍然是O(n)。 时间的复杂性符合所有要求。
不幸的是,我不知道这一结构的执行情况。
最新情况:你可以把树木与一个散板桌结合起来,以便用钥匙进行O(1)的检查。 我上文建议,不要有两 trees树,而是使用一个 has表,用于按地盘 look,并如上所示为平板块 look树,但 has树的分位数则含有平衡树木的子点,用于进行逐个清单的勘测。 现在由主人看的是O(1),其他一切都平均留在O(ln)(n)。 当然,现在,你们有时会得到O(n)的重罚,就像任何 has一样。