Скажем, у меня есть 2D-накопитель в java int[][] array
. Массив может выглядеть так:
(оси x и z представляют собой индексы в массиве, ось y представляет значения - это изображения int[56][56]
со значениями от 0 до 4500)
или
Что мне нужно сделать - найти пики в массиве - в первом есть 2 пика и 8 пиков во втором массиве. Эти пики всегда "очевидны" (всегда есть промежуток между вершинами), но они не должны быть похожими на эти изображения, они могут быть более или менее случайными - эти изображения не основаны на реальных данных, просто образцы, Реальный массив может иметь размер 5000x5000 с пиками от тысяч до нескольких сотен тысяч... Алгоритм должен быть универсальным, я не знаю, насколько велики могут быть массивы или пики, я также не знаю, сколько пиков там находятся. Но я знаю какой-то порог - пики не могут быть меньше заданного значения.
Проблема заключается в том, что один пик может состоять из нескольких меньших пиков рядом (первое изображение), высота может быть довольно случайной, а также размер может быть существенно различен в пределах одного массива (размер - я имею в виду количество единиц, которое требуется в массиве - один пик может состоять из 6 единиц, а другой из 90). Он также должен быть быстрым (все сделано в 1 итерации), массив может быть действительно большим.
Любая помощь приветствуется - я не ожидаю от вас кода, просто правильная идея:) Спасибо!
edit:. Вы спрашивали о домене - но это довольно сложно, и imho это не может помочь с проблемой. Это фактически массив ArrayLists с 3D-точками, например ArrayList < Point3D > [] [] и значение, о котором идет речь, это размер ArrayList. Каждый пик содержит точки, принадлежащие одному кластеру (в данном случае плоскости) - этот массив является результатом алгоритма, который сегментирует pointcloud. Мне нужно найти наивысшее значение в пике, чтобы я мог поместить точки от "самого большого" arraylist в плоскость, вычислить некоторые параметры из нее и правильно класть большинство точек с пика.