Jaa*_*a-c 12 java algorithm max multidimensional-array
假设我在java中有一个2D累加器数组int[][] array.该数组可能如下所示:
(x和z轴表示数组中的索引,y轴表示值 - 这些是int[56][56]具有0~4500值的图像)

要么

我需要做的是在阵列中找到峰值 - 第一个峰值有2个峰值,第二个阵列有8个峰值.这些峰值总是"明显的"(峰值之间始终存在间隙),但它们不必像这些图像那样相似,它们可能或多或少是随机的 - 这些图像不是基于真实数据,只是样本.真正的阵列可以有5000x5000的大小,峰值从几千到几十......算法必须是通用的,我不知道阵列或峰值有多大,我也不知道那里有多少个峰值是.但我确实知道某种阈值 - 峰值不能小于给定值.
问题是,一个峰可以由附近的几个较小的峰组成(第一个图像),高度可以是非常随机的,并且在一个阵列中大小可以显着不同(大小 - 我的意思是它在阵列中占用的单位数 - 一个峰值可以包含6个单位,其他峰值可以包含90个单位.它也必须快速(所有在1次迭代中完成),阵列可能非常大.
任何帮助表示赞赏 - 我不希望你的代码,只是正确的想法:)谢谢!
他对使用某种优化启发式估计全局最大值不感兴趣 - 他只想在多个独立的簇中找到最大值.
这些峰值总是"明显的"(峰值之间始终存在差距)
基于你的图像,我假设你的意思是总是有一些值0分离簇?如果是这种情况,您可以使用简单的泛洪填充来识别集群.您还可以在执行洪水填充时跟踪每个群集的最大值,因此您既可以识别群集又可以同时找到它们的最大值.
这也是你可以获得的速度,而不依赖于启发式(可能会返回错误的答案),因为每个群集的最大值可能是群集中的任何值,因此您必须至少检查一次.
请注意,这将遍历数组中的每个项目.这也是必要的,因为(根据您提供给我们的信息),阵列中的任何单个项目都可能成为其自己的集群(这也会使其成为峰值).阵列中有大约2500万个项目,这在现代计算机上只需要几秒钟.