- java/
- Java 一种高效的数据结构,用于在一段时间之前逐出事件?
Java 一种高效的数据结构,用于在一段时间之前逐出事件?
Java 一种高效的数据结构,用于在一段时间之前逐出事件?,java,sorting,data-structures,Java,Sorting,Data Structures,我有一个由ID和日期组成的对象集合。我希望以一种可以通过ID高效地查找这些对象的方式存储这些对象,并删除在某个时间点之前发生的所有事件
我在考虑使用HashMap和TreeMap,其中HashMap保存id,TreeMap存储按日期排序的元素。这样就可以按ID进行O(1)查找,并可以有效地删除所有旧事件。我还尝试在没有ID哈希表的情况下使用日期的排序树状图
是否有更高效的数据结构来存储信息以有效地支持这些操作?考虑到您想要支持的操作是
插入
按ID查找,以及
删除某个时间之前发生的所有内容
我有一个由ID和日期组成的对象集合。我希望以一种可以通过ID高效地查找这些对象的方式存储这些对象,并删除在某个时间点之前发生的所有事件
我在考虑使用HashMap和TreeMap,其中HashMap保存id,TreeMap存储按日期排序的元素。这样就可以按ID进行O(1)查找,并可以有效地删除所有旧事件。我还尝试在没有ID哈希表的情况下使用日期的排序树状图
是否有更高效的数据结构来存储信息以有效地支持这些操作?考虑到您想要支持的操作是
- 插入
- 按ID查找,以及
- 删除某个时间之前发生的所有内容
我认为您可能需要使用一种数据结构,它是链式哈希表和散列树的组合。其基本思想如下:哈希表将ID值映射到相关对象,splay树存储按日期排序的对象。要插入到结构中,需要在O(logn)摊销时间内将元素同时插入ID哈希表和splay树中。您可以在哈希表中的O(1)预期时间内进行查找
根据问题的参数,您可以非常高效地删除在某个时间之前出现的所有元素。想法如下。splay树(摊销O(logn))支持删除树中时间早于某个特定值的所有内容。现在,如果插入到此结构中的条目具有这样的属性,即每当您删除某个时间以下的所有值时,您永远不会在该时间之前插入条目,那么您可以使用以下删除过程:首先,使用高效算法删除散展树中需要在总摊销时间O中删除的所有条目(log n),然后记录刚删除的时间。从那时起,无论何时在哈希表中进行查找,如果您看到某个元素的时间低于给定的时间阈值,则只需将其删除。如果在重新刷新期间执行此操作,则可以分散O(n)从哈希表中删除所有内容所需的工作,这些内容应在需要的时间内删除到某一时刻,因此可以摊销工作。这仍然为您提供了O(1)按ID查找时间和O(1)摊销插入哈希表时间。简言之,如果您可以这样假设,您将获得以下运行时:
- 插入:O(对数n)摊销
- 按ID查找:应为O(1)
- 删除T:O(对数n)摊销前的所有数据
希望这对您有所帮助!因为您希望支持的操作是
- 插入
- 按ID查找,以及
- 删除某个时间之前发生的所有内容
我认为您可能需要使用一种数据结构,它是链式哈希表和splay树的组合。基本思想如下:哈希表将ID值映射到所讨论的对象,splay树存储按日期排序的对象。要插入到结构中,您需要将元素插入ID哈希表和splay中O(logn)中的树摊销时间。您可以在哈希表中查找O(1)中的预期时间
根据问题的参数,您可以极为有效地删除在某个时间之前出现的所有元素。其思想如下。有效地(摊销O(logn))显示散点树支持删除树中时间早于某个特定值的所有内容。现在,如果插入到此结构中的条目具有这样的属性,即每当删除某个时间以下的所有值时,都不会在该时间之前插入条目,则可以使用以下删除过程:首先,使用高效的删除算法ng splay树中需要在总摊销时间O(log n)中删除的所有条目,然后记录刚删除的时间。从那时起,无论何时在哈希表中进行查找,如果您看到某个元素的时间低于给定的时间阈值,则只需将其删除。如果您在重新刷新期间执行此操作,则可以分散O(n)从哈希表中删除所有内容所需的工作,这些内容应在需要的时间内删除到某一时刻,因此可以摊销工作。这仍然为您提供了O(1)按ID查找时间和O(1)摊销插入哈希表时间。简言之,如果您可以这样假设,您将获得以下运行时:
- 插入:O(对数n)摊销
- 按ID查找:应为O(1)
- 删除T:O(对数n)摊销前的所有数据
希望这有帮助!您正在进行哪些比较?是否要进行范围搜索(查找日期范围或ID范围内的所有内容)?ID搜索基本上是一种查找。日期搜索是在现在之前删除任何内容您正在进行哪些比较?是否要进行范围搜索(查找日期范围或ID范围内的所有内容)?Id搜索基本上是一种查找。日期搜索是删除之前的任何内容now@user1180969-很乐意帮忙!如果你认为这个答案是你想要的,别忘了你可以接受它。:-@user1180969-很乐意帮忙!不要忘记,如果你认为这就是你想要的,你可以接受这个答案。:-)