Я бы сказал, что это зависит от того, как нужны данные.Если, учитывая две точки, вам нужно проверить, находятся ли они в одном блоке единиц, я думаю, что ответ @ Джека - лучший.Это также верно, если у вас есть некоторые знания о том, где изначально находятся блоки, поскольку вы можете использовать их в качестве отправных точек для своего алгоритма.
Если у вас нет никакой другой информации, возможно, один из них будетвозможность:
Если задана точка, вы хотите найти все элементы в одном блоке, то заливка будет уместной.Затем вы можете кэшировать каждое гнездо таким, каким вы его нашли, и когда вы получите другую точку, сначала посмотрите, находится ли оно в известном гнезде, и если оно не выполняет заливку, чтобы найти это гнездо, то добавьте его в кеш.
В качестве детали реализации, при прохождении матрицы каждая строка должна иметь доступ к набору гнезд, представленному в предыдущей строке.Тогда вам нужно будет только проверить новые точки по этим гнездам, а не по полному набору, чтобы определить, находится ли новая точка в известном наборе или нет.
Убедитесь, что вы используете реализацию набора с оченьнизкая стоимость поиска, такая как хеш-таблица или, возможно, фильтр Блума, если вы можете справиться с вероятностными эффектами.