2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 14:06 


19/08/23
10
Добрый день.

Дан массив $A$ из $N$ целочисленных положительных пар точек (можно думать в ключе прямоугольников с высотой $h$ и шириной $v$). Нужно найти $K$ точек с минимальным диаметром.
Диаметром множества называется максимальное расстояние между двумя точками множества. В задаче используется расстояние Чебышева, т.е. $d(a, b) = \max(
|a_x - b_x|, |a_y - b_y|)$.

Ограничения: $2 \leq K \leq N \leq 10^5$, $1 \leq x \leq y \leq 400$

Мои наблюдения и мысли:
В силу специфики расстояния, диаметр на $N$ точках можно считать за линейное время от $N$ как $\max(\max(A_x) - \min(A_x), \max(A_y) - \min(A_y))$, где $A_x$ и $A_y$ - это массивы из $x$-координат и $y$-координат, соответственно.

Можно попробовать бинарный поиск диаметра с диапазоном от 0 до диаметра всех $N$ точек, но нужно уметь быстро посчитать, существует ли хотя бы $K$ точек с диаметром $m$ среди всех точек, где $m$ - текущее среднее значение в бинарном поиске. Жадные алгоритмы, которые у меня возникают для такого подсчета кажутся мне некорректными, но, возможно, я что-то упускаю.

Спасибо всем за помощь!

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 14:30 
Заслуженный участник
Аватара пользователя


16/07/14
9306
Цюрих
У вас же всего лишь 160000 различных координат получается. Сможете быстро посчитать, сколько точек в квадрате с заданными углами? Если да, то просто перебираете один угол квадрата, и бинпоиском по стороне находите нужную для этого угла сторону.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 15:52 


19/08/23
10
mihaild в сообщении #1605847 писал(а):
У вас же всего лишь 160000 различных координат получается. Сможете быстро посчитать, сколько точек в квадрате с заданными углами? Если да, то просто перебираете один угол квадрата, и бинпоиском по стороне находите нужную для этого угла сторону.


Я правильно понимаю, что Вы предлагаете цикл по всем возможным координатам(400х400) (пусть это будет правый верхний угол обрамляющего квадрата), внутри которого бин-поиском определяется длина его стороны, такая что, хотя бы $K$ точек в этот квадрат входят. Процедура возвращает минимальную найденную длину в этом цикле. Так?

Вместо 400, наверное можно использовать $l = \max(\max(A_x), \max(A_y))$. Подсчет количества точек внутри квадрата с заданным углом и стороной займет $O(N)$. С учетом бин-поиска по стороне $O(\log(l) \times N)$. С учетом внешнего цикла, асимптотика процедуры $O(l^2 \times \log(l) \times N)$. Так? Обязателен ли цикл
по всей сетке?

Спасибо за Ваш комментарий!

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 16:36 
Заслуженный участник
Аватара пользователя


16/07/14
9306
Цюрих
trozki_187 в сообщении #1605850 писал(а):
Подсчет количества точек внутри квадрата с заданным углом и стороной займет $O(N)$.
Если сделать некоторую предобработку за $O(l^2)$, то после можно будет считать число точек в произвольном прямоугольнике за $O(1)$.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 16:55 


19/08/23
10
mihaild в сообщении #1605857 писал(а):
Если сделать некоторую предобработку за $O(l^2)$, то после можно будет считать число точек в произвольном прямоугольнике за $O(1)$.

Не подскажете? не соображу, что за предобработка.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 17:05 
Заслуженный участник


12/08/10
1694
trozki_187 в сообщении #1605860 писал(а):
Не подскажете? не соображу, что за предобработка.
Для каждого $(s,t)$ количество точек с координатами $\{(x,y)|x\le s,y\le t\}$

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 17:34 


19/08/23
10
Null в сообщении #1605861 писал(а):
Для каждого $(s,t)$ количество точек с координатами $\{(x,y)|x\le s,y\le t\}$


Да, но сторона квадрата варьируется. Поэтому, это вроде как, не поможет. Таким образом можно посчитать количество точек в прямоугольнике, у которого один угол зафиксирован в (0, 0).

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 17:37 
Заслуженный участник


12/08/10
1694
trozki_187 в сообщении #1605864 писал(а):
Таким образом можно посчитать количество точек в прямоугольнике, у которого один угол зафиксирован в (0, 0).
Попробуйте поскладывать-повычетать эти прямоугольники(как множества)

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 17:48 


19/08/23
10
Null в сообщении #1605865 писал(а):
Попробуйте поскладывать-повычетать эти прямоугольники(как множества)


Я Вас понял, спасибо, но такая предобработка предполагает сканирование массива $A$, не так ли? То есть $O(N \times l^2)$

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 18:08 
Заслуженный участник


12/08/10
1694
В начале данные надо сжать: заводим массив $l\times l$ и считаем в нем количество точек с координатами $(i,j)$. В общем сложность $O(l^2 \log(l)+N)$, не влазьте за нее.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 18:11 
Заслуженный участник
Аватара пользователя


16/07/14
9306
Цюрих
Такая предобработка делается за $O(l^2 + N)$. Заведите массив размера $l^2$, заполните его из исходного и забудьте про исходный.

Кстати после этого можно ещё и без бинпоиска обойтись, если правильно квадраты перебирать.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 23:07 


19/08/23
10
mihaild в сообщении #1605871 писал(а):
Кстати после этого можно ещё и без бинпоиска обойтись, если правильно квадраты перебирать.
Еще раз спасибо! За $O(l^2 \times \log(l) +N)$ реализовал. Не подскажете как обойтись без $\log(l)$?

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 23:11 
Заслуженный участник
Аватара пользователя


16/07/14
9306
Цюрих
Как найти минимальный размер квадрата, содержащего $K$ точек, верхний правый (и соответственно нижний левый) угол которого имеет координаты $x = y$, за $O(l)$ (без перебора всех таких квадратов, что было бы $O(l^2)$)?

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 23:26 


19/08/23
10
mihaild в сообщении #1605885 писал(а):
верхний правый (и соответственно нижний левый) угол которого имеет координаты $x = y$, за $O(l)$ (без перебора всех таких квадратов, что было бы $O(l^2)$)?
Правильно понимаю, что речь идет о квадратах с двумя углами на диагонали? Их же всего порядка $l$.

 Профиль  
                  
 
 Re: Поиск подмножества на плоскости с минимальным диаметром
Сообщение19.08.2023, 23:55 
Заслуженный участник
Аватара пользователя


16/07/14
9306
Цюрих
trozki_187 в сообщении #1605887 писал(а):
Правильно понимаю, что речь идет о квадратах с двумя углами на диагонали? Их же всего порядка $l$
Да, правильно.
Нет, их $O(l^2)$. Диагональ имеет длину $O(l)$, а квадрат задается двумя точками из неё.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mikhail_K


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group