У меня есть прямоугольная плоская сетка, в которой каждой ячейке присвоен некоторый целочисленный вес. Я ищу алгоритм для идентификации кластеров от 3 до 6 соседних ячеек с весом выше среднего. Эти капли должны иметь примерно круглую форму.
Для моего случая средний вес ячеек, не содержащих кластер, составляет около 6, а для ячеек, содержащих кластер, около 6+4, т.е. есть «фоновый вес» где-то около 6. Веса колеблются в соответствии со статистикой Пуассона.
Для небольшого фона жадные или засеянные алгоритмы работают довольно хорошо, но это не работает, если мои ячейки кластера имеют веса, близкие к колебаниям фона, т. е. они будут стремиться найти кластер, даже если там ничего нет. Кроме того, я не могу выполнить перебор всех возможных настроек, потому что моя сетка большая (что-то вроде 1000x1000), и я планирую делать это очень часто (10 ^ 9 раз). У меня сложилось впечатление, что могут существовать способы решить эту проблему в теории графов. Я слышал о вершинных покрытиях и кликах, но не знаю, как лучше всего перевести мою задачу на их язык. Я знаю, что у теории графов могут быть проблемы со статистическим характером входных данных, но мне было бы интересно посмотреть, что могут найти алгоритмы оттуда, даже если они не могут идентифицировать каждый кластер.
Вот пример отсечения: выделенная область имеет в среднем 10 записей на ячейку, все остальные ячейки имеют в среднем 6. Конечно, сетка расширяется дальше.
| 8| 8| 2| 8| 2| 3|
| 6| 4| 3| 6| 4| 4|
===========
| 8| 3||13| 7| 11|| 7|
|10| 4||10| 12| 3|| 2|
| 5| 6||11| 6| 8||12|
===========
| 9| 4| 0| 2| 8| 7|