0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
1 | |
Найти точку в к-мерном пространстве22.09.2013, 18:33. Показов 1225. Ответов 19
Метки нет (Все метки)
Есть к-мерное дискретное (целочисленное) пространство. В нем отмечены некоторые точки. Нужно найти такую точку, что если через нее провести прямые параллельные базисным векторам, то на них будет лежать максимальное число точек. Если таких несколько, то нужно найти все. Как это можно сделать не перебирая все точки пространства?
0
|
22.09.2013, 18:33 | |
Ответы с готовыми решениями:
19
Найти наибольший угол треугольника заданного координатами в 4-мерном пространстве Найти в n-мерном пространстве min расстояние от начала координат до отрезка, заданного координатами концов Треугольники в 3х мерном пространстве Задача в 3х-мерном пространстве |
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
|
|
22.09.2013, 23:03 | 2 |
Пусть точек . Решение в лоб (перебираем все пары точек, увеличиваем счетчик, если ровно одна из координат совпадает, в конце берем точки с максимальным значением счетчика) требует сравнений. Чтобы его сократить:
1. Сортируем точки по каждой из координат. Теперь точки у которых совпадает одна из координат лежат рядом в соответствующем массиве. 2. Перебираем точки 2.1. Каждую ищем в отсортированных массивах. 2.2. Составляем список точек, совпадающих по координате с данной. 2.3. Считаем точки, встречающиеся в этом списке ровно один раз. Увеличиваем на эту величину счетчик для текущей точки и на 1 для всех встречающихся один раз точек. 2.4. Удаляем текущую точку из отсортированных массивов. 3. Берем точки с максимальным значением счетчика. Получаем сложность порядка .
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 00:37 [ТС] | 3 |
Может получиться так, что нужной точки нет в исходном массиве. Пример датасета для 2-мерного пространства:
3,3 1,3 3,3 0,2 2,2 1,3 Ответом здесь будут точки 0,3 и 2,3 Добавлено через 8 минут Замечу, что для 2мерного случая решение несложное, но с обощением на к-мерность возникают проблемы. Например, для 3мерного случая нам придется рассматривать каждую плоскость соответствующую 3ей координате. Собственно вопрос в том, как избежать такого перебора. Кроме того, если ровно одна координата совпадает, то через такие точки нельзя провести прямую параллельную базису. Если ровно одна координата различается, тогда можно.
0
|
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
|
|
23.09.2013, 01:15 | 4 |
Вижу, что я неправильно понял условие задачи и предложил алгоритм для поиска наилучшей точки из отмеченных. Надо еще подумать, но уже поздно. Завтра подумаю.
0
|
834 / 642 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
23.09.2013, 11:41 | 5 |
Имея set <все_точки>, для каждой размерности сохранить map <координата, количество>. Последовательно для каждой пары осей перебираем точку из их map'ов. Полученная точка однозначно оределяет все вектора - считаем для них число точек, проверив дополнительно существует ли точка, которая является пересечением осей. Ассимптотика O(n^4).
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
||||||
23.09.2013, 12:17 | 6 | |||||
Как-то жирно, ресурсозатратно (в духе высокоуровневых языков). Я бы сортировал указатели на точки по x, y, z. Тогда образуется такая структурка
0
|
834 / 642 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
23.09.2013, 12:25 | 7 |
А ничего что пространство k-мерное, а не 3-мерное?
Добавлено через 3 минуты Наврал. Добавлено через 3 минуты Ассимптотика O(k^3*n^2): k^2 - перебор двух осей n^2 - перебор точек на осях k - подсчёт по оставшимся k-2 осям
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 14:19 [ТС] | 8 |
И я не слишком понял идею алгоритма. Не могли бы вы поподробнее описать что мы делаем на примере такого датасета: 1,3,3 2,1,3 3,3,3 1,0,2 1,2,2 0,1,3 Добавлено через 24 минуты По сути задачу можно сформулировать так: найти такую точку, чтобы как можно большее число точек, подающихся на вход, отличалось от нее не более чем в 1 координате (на самом деле не более чем в d, но мне хотя бы при d=1 разобраться)
0
|
834 / 642 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
23.09.2013, 16:14 | 9 |
Хм.. Кажется, я бред написал...
Думал, что так получится, но тут что-то не то
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
|
23.09.2013, 17:17 | 10 |
Давайте закончим с "первоначальной" постановкой задачи Здесь все ясно: для каждой точки заводим k счетчиков (к - число осей). Сортируя точки k раз заполняем счетчики используя интервал точек сортированного массива отличающихся лишь по одной оси (последний ключ сортировки)
Не слабо... Др словами - "найти точку с максимальной плотностью (d)"? Добавлено через 3 минуты Неясно что имеется ввиду. Напр 2 точки, расстояние между ними по x < 1. но по др оси напр 1000. Такие точки считаются или как?
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 17:26 [ТС] | 11 |
Ну...Не вполне уверен, что я правильно понимаю что такое плотность(d). Точки могут не быть сосредоточены геометрически близко. Но для 3мерного пространства это будет означать при d=1 что мы проводим через точку прямые, при d=2 - плоскости, при d=3 - куб (ну тут уже, очевидно, подойдет любая точка пространства). В общем, по-моему переформулировка получилась более понятной, т.к. она избавляет от геометрического смысла.
Добавлено через 4 минуты Пространство, как я писал, дискретное. Допускаются только целые координаты. Если точки отличаются только по одной координате, неважно на сколько, то они лежат на одной прямой (параллельной какому-то базисному вектору) и следовательно считаются. Еще раз сформулирую: нужно найти такую точку, чтобы изменением ровно d координат (раз уж упомянул, будем говорить более обощенно, чтобы не путаться), можно было получить как можно больше точек из входного набора
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
|
23.09.2013, 17:54 | 12 |
А что есть "изменение ровно d координат"? Это шаг величиной d по одной из осей? Напр d = 1, точки (5, 5, 1)(5, 5, 2)(5, 5, 3) считаются, каждая точка имеет минимум 2 годных соседей. Тогда кстраивает предыдущее решение. Все это мне напоминпет воксели
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 18:02 [ТС] | 13 |
Нет, это шаг произвольной длины по d осям
Например, из (5, 5, 1) можно получить (5, 5, 3) изменив одну координату (третью). Тут d=1. Например, между (5,5,1) и (5,3,2) d=2
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
|
23.09.2013, 18:14 | 14 |
То есть средняя точка имеет минимум 2 соседей, крайние - минимум 1. Все равно устраивает предыдущее решение
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 18:22 [ТС] | 15 |
Она может иметь больше 2 соседей, может вообще не иметь соседей, главное, чтобы все точки различались ровно в одних и тех же координатах.
Например, точки 0,0,1 0,0,2 0,0,3 0,0,4 все являются соседними друг другу т.к. любую из них можно получить изменением 1 координаты в любой другой. Возможно я просто не понимаю то, что вы хотите сказать. Если вы считаете, что ваш алгоритм работает, то не могли бы вы показать конкретные шаги на датасете который я писал выше. Напишу еще раз - 1,3,3 2,1,3 3,3,3 1,0,2 1,2,2 0,1,3.
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
|
23.09.2013, 19:46 | 16 |
(1,3,3) (2,1,3) (3,3,3) (1,0,2) (1,2,2) (0,1,3)
Сортируем по x, y, z (0,1,3) (1,0,2) (1,2,2) (1,3,3) (2,1,3) (3,3,3) - никакие 2 точки не лежат на оси Z Сортируем по y, z, x (1,0,2) (0,1,3) (2,1,3) (1,2,2) (1,3,3) (3,3,3) - 2 группы лежат на оси X (x, 1, 3) + (x, 3, 3) Сортируем по z, x, y (1,0,2) (1,2,2) (0,1,3) (2,1,3) (1,3,3) (3,3,3) - 1 группа лежит на оси Y (1, y, 2) Дальше отсеиваете группы по правилам как хотите. Напр если шаг между соседями 1, то ответ "пусто". Просчитав группу запоминаете результат в счетчикаx точки. Расчет по 1 оси не влияет на расчет по другой
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
23.09.2013, 20:25 [ТС] | 17 |
Что вы понимаете под шагом между соседями? Число координат в которых точки различны? Давайте определим, что сосед порядка d - это точка, которая может быть получена из текущей изменением d координат (неважно на какое число). При этом, при подсчете числа соседей учитываются только точки из данного на входе multiset, но точка относительно которой они считаются может быть произвольной. В этом случае, при d=1 у нас есть 2 точки дающие максимальное число соседей 1 порядка. Это точки 3,1,3 и 1,1,3. Они обе имеют по 3 соседа 1 порядка. Пустое множество вообще не может быть ответом никогда, если входное множество непусто.
0
|
1911 / 773 / 108
Регистрация: 01.10.2012
Сообщений: 4,200
|
|
24.09.2013, 09:52 | 18 |
Я понял координатЫ (именно одной). А оказывается любого числа координат (от 1 до k) но строго на одно число. Напр (0, 0, 0) и (1, 1, 1) - соседи (если d = 1). Также искомая точка может и не входить в исходное множество. Теперь все правильно?
0
|
834 / 642 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
24.09.2013, 10:13 | 19 |
0
|
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 24
|
|
24.09.2013, 21:19 [ТС] | 20 |
Нет, они различаются в трех координатах. Они были бы соседями только при d >= 3
Например, (0, 0, 0) и (0, 0, 500) - соседи при d=1
0
|
24.09.2013, 21:19 | |
24.09.2013, 21:19 | |
Помогаю со студенческими работами здесь
20
Построить окружности в 3-х мерном пространстве. Две точки в n-мерном пространстве X=(х1, х2, ..., хn), Y=(y1, y2, ...,yn) Класс вектор в n-мерном пространстве Задача на векторы в в н-мерном пространстве Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows
Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
|
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
|
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
|
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
|
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
|
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
|
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|