Рассмотрим массив двухмерного массива 2000 x 2000. 100 000 элементов установлены в true, остальное - false.Структура сетки 2D-сетки для ближайшей свободной ячейки
Для ячейки (x1, y1) нам нужно найти ближайшую ячейку (x2, y2) (по манхаттанскому расстоянию: abs (x1-x2) + abs (y1-y2)), которое является ложным.
Один из способов сделать это было бы:
for (int dist = 0; true; dist++)
for ((x2,y2) in all cells dist away from (x1,y1))
if (!array[x2,y2])
return (x2,y2);
В худшем случае нам придется перебрать 100000 клеток, прежде чем найти один свободный.
Есть ли структура данных, которую мы могли бы использовать, а не 2D-массив, который позволил бы нам быстрее выполнять этот поиск?
Будет ли обновлен массив? Будете ли вы выполнять только многие поиски? –
Является ли массив постоянным, и вам задано много запросов? Или это вопрос одного вопроса на массив? Нет смысла создавать интеллектуальную структуру данных, если вы собираетесь использовать ее только один раз. – amit
Извините, да, данные будут меняться - как только ячейка будет найдена, она будет помечена как истина. –