Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
Java 一种高效的数据结构,用于在一段时间之前逐出事件?_Java_Sorting_Data Structures - Fatal编程技术网

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-很乐意帮忙!不要忘记,如果你认为这就是你想要的,你可以接受这个答案。:-)