Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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_Loops_Complexity Theory_Treemap - Fatal编程技术网

Java 循环通过一组对象

Java 循环通过一组对象,java,loops,complexity-theory,treemap,Java,Loops,Complexity Theory,Treemap,我有一个巨大的键值对映射,大约10^7,我必须每秒循环15次才能更新它的内容 是否有任何类或结构能够提供良好的复杂性并减少循环所需的时间 目前,我正在使用TreeMap,但复杂性是logn仅用于包含、放置、获取和删除。通过元素的循环具有n的复杂性 您是否知道任何结构,或者您是否有任何想法可以将复杂性降低到n以下?如果您必须在整个集合上任意循环,您将不会得到比n更好的结果。如果必须循环整个集合,可以使用简单的ArrayList。但是,如果您需要使用键访问集合中的特定数据,TreeMap就可以了。如

我有一个巨大的键值对映射,大约10^7,我必须每秒循环15次才能更新它的内容 是否有任何类或结构能够提供良好的复杂性并减少循环所需的时间

目前,我正在使用TreeMap,但复杂性是logn仅用于包含、放置、获取和删除。通过元素的循环具有n的复杂性


您是否知道任何结构,或者您是否有任何想法可以将复杂性降低到n以下?

如果您必须在整个集合上任意循环,您将不会得到比n更好的结果。如果必须循环整个集合,可以使用简单的ArrayList。但是,如果您需要使用键访问集合中的特定数据,TreeMap就可以了。

如果您的问题只是查看所有O(n)值,那么在任何顺序(或有限并行)计算机上都无法超越O(n)界限


如果您有一台有限并行机器,并且完全取决于您更新元素的方式,那么您可以实现加速。例如,使用CUDA、GPU或OpenMP/MPI以及群集/多核工作站,您可以计算[i]=a[i]^3或具有良好加速比的类似值。当然,还有沟通的问题。。。但这可能是需要考虑的问题。

您如何能够在不到n个步骤的情况下循环n个元素?您确定必须循环整个元素才能更新其内容吗?更新采取什么形式?这种结构中存储了什么样的数据?没有任何我熟悉的算法可以将复杂度降低到n以下。这是一个我不熟悉的算法,它可能会也可能不会将复杂度降低到n-以下。如果算法是有用的,那么可能有人(即不是我)可以实现它。由于明显的原因,不可能循环通过比o(n)快的任何东西,除非您可以减少需要执行的集合中的元素数updated@emory:那似乎需要一台量子计算机。+1是一个好答案。在不到n次的时间里,你究竟要如何看待n个项目?我假设一台具有任意数量内核的假设并行机可以在线性时间内完成这项工作,只需并行检查所有n个元素。对于使用固定(有限)个处理器的并行算法,问题仍然是O(n),但当然可以通过并行来加速。这是一个非常好的实用答案,但我怀疑您可以使用量子计算机迭代n以下的整个集合。然而,在java在量子计算机上实现之前,这是一个没有实际意义的问题。我知道循环通过一组对象所需的时间与该对象的大小成正比,但我问是否有人知道任何结构可以至少提高一点循环时间。我有一个24X500000的二维双数组,该数组每秒更新15次(每个单元格几何上减少一个系数)。大多数细胞为0;因此,更新它们(乘以一个系数除了增加计算时间外没有任何效果)。我没有使用这个巨大的2D数组,而是使用树形图,只保留非零值,以行+列作为键,以单元格值作为节点值。我的问题是:树映射是否需要更多的计算而不是数组列表。还有其他性能更好的结构吗?