LINUX.ORG.RU

Две задачки

 ,


0

1

Вот условия (на украинском языке):

https://docs.google.com/open?id=0B_k04ZnX_vvzUHc2aEtINWVxTjA https://docs.google.com/open?id=0B_k04ZnX_vvzd1BuRGx3anFnXzQ https://docs.google.com/open?id=0B_k04ZnX_vvzdkFtN2lfTjFjWjA

Сорри за качество.

Для Ъ:

1. Дано N шаров (N <= 100), заданных координатами центров и радиусами. Все координаты от 1 до 10000. Написать программу, которая найдет максимальное количество шаров, которые мы можем пересечь, проведя луч из (0; 0; 0).

2. Дано множество прямых (2 <= N <= 10) на плоскости, заданных координатами концов. Написать программу, находящую множество точек, от которых суммарное расстояние до прямых минимально. Вывести его минимальным количеством линейно связанных фигур (в примерах выведено в виде координат вершин этих самых фигур). Все числа в выводе представить в виде несократимых дробей.

Помогите!

Идеи, которые уже возникали:

Для задачи 1:

При помощи сферических координат свести задачу к поиску пересечения максимального количества кругов на плоскости, а потом найти ее решение методом сканирующей прямой. Слишком сложно в реализации, авторами явно подразумевалось гораздо более простое решение.

Для задачи 2 в голову приходили различные переборы разной степени оптимальности, но все это не катит, т.к. дает решение с некоторой степенью приближения.

Deleted

Последнее исправление: CYB3R (всего исправлений: 2)

Ответ на: комментарий от anonymous

почему же искомый подграф дожен образовывать отдельную единицу связности? уточнил про n^3, поскольку даже первая фраза на вики намекает: линк

я хз почему у них NP (может немного другая постановка задачи), но я не вижу проблем в алгоритме предложенным мной.

почему же искомый подграф дожен образовывать отдельную единицу связности?

не распарсил.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AIv

Луч из нач. координат задается одной точкой вообще то... ;-)

но окружности же надо како-то задавать.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AIv

2) большой полностью содержит некоторое хитросплетение других поменьше.

Опять наплевать, лучи относящиеся к поменьше пройдут через большой.

таки да. достаточно просто к лучам через пересечения добавить лучи через центры окружностей.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

но окружности же надо како-то задавать.

Не окружности, а телесные углы. И тут достаточно условия на скалярное произведение двух векторов.

AIv ★★★★★
()
Ответ на: комментарий от AIv

но окружности же надо како-то задавать.

Не окружности, а телесные углы. И тут достаточно условия на скалярное произведение двух векторов.

я о том, что проекции на сферу надо задавать вектором и углом отклонения от вектора.

dikiy ★★☆☆☆
()
Ответ на: комментарий от qulinxao

Э... удаление шаров от центра вообще никакого значения не имеет (кроме как для расчета телесного угла), я б так вообще радиус-векторы всех центров нормировал на единицу, соответствующим образом изменив радиусы шаров.

AIv ★★★★★
()
Ответ на: комментарий от dikiy

Правильно. Но вместо угла можно брать косинус угла, который с-но и равен скалярному произведению;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Правильно. Но вместо угла можно брать косинус угла, который с-но и равен скалярному произведению;-)

с косинусом, хоть он и эквивалентен, больше проблем при проверке, пересекаются ли окружности.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Эти хорды на самом деле сегменты плоскости, проходимой через пересечения конусов и отсекаемые лучами пересечений поверхности. Часть этих сегментов пересекается. Если N конусов взаимно пересекаются, есть общая область, то сегменты плоскостей для каждого попарного пересечения тоже пересекаются, и пересекаются в одном луче, как в том примере 5.2, только в пространстве. Если три конуса попарно пересекаются, но у них нет общей области пересечения, то сегменты не пересекаются. То есть для каждой пары конусов (a1, b1, c1, d1), (a2, b2, c2, d2) строится сегмент пересечения как два луча, (p, q, r, s, t). В матрице звёшдочкой для кажлого сегмента отмечено если он пересекается с другим сегметном, (p1,q1,r1,s1,t1,)U(p2,q2,r2,s2,t2). Нужно смотреть попарное пересечение серментов. На моём рисунке взаимно пересекаются сегменты (1, 7, 8) и (2, 3, 7). В матрице помечены. Вот тебе обнаружены два луча, которые проходят через 3 разных шара каждый. Дополни рисунок разными способами, сам увидишь.

auto12884835
()
Ответ на: комментарий от auto12884835

ну если еще и строить хорды, то да, можно вычислить область. Но это реально лишняя работа, если можно просто перебрать все точки пересечения.

dikiy ★★☆☆☆
()

По первой задачке:

Считаем по проекции шаров на сферу определенного радиуса. Радиус сферы в принципе неважен. Проекция представлят собой круг, или, для нашей задачи, дугу с сектором 360 градусов. Результат пересечения n шаров описывается фигурой из n дуг.

Процесс решения: Создаем массив, в котором будем хранить все полученые фигуры. Берем 1-й шар, записываем в массив. Для остальных шаров проверяем на пересечение с ранее получеными фигурами и добавляем сам шар. Если есть пересечение - добавляем новую фигуру в массив как набор из n дуг. Ответом будет фигура, описываемая максимальным количеством дуг. Как вам такой вариант?

andrewzvn
()
Ответ на: комментарий от dikiy

каких проблем? С формулой косинуса двойного угла что ли?;-)

Все равно их считать через скалярные произведения. От радиуса, после перенормировки, можно перейти к критическому значению скалярного произведения, это делается для каждой сферы один раз. Скалярное произведение считается за три такта (на нормальном ЯП), аркосинус чуть ли не сотню.

ЗЫ туплню на ночь, там даже двойного угла нету.

AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от AIv

Все равно их считать через скалярные произведения. От радиуса, после перенормировки, можно перейти к критическому значению скалярного произведения, это делается для каждой сферы один раз. Скалярное произведение считается за три такта (на нормальном ЯП), аркосинус чуть ли не сотню.

так это ты начал про арккосинусы :)

dikiy ★★☆☆☆
()
Ответ на: комментарий от AIv

А как ты без арк-чего-нить-там перейдешь от декартовых координат к УГЛУ?

так угол же уже дан. координаты-то сферические в самом начале.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Тю... так ты и вправду а сфере это решать собрался? Не люблю сферических координат, если только чего нить проинтегрировать... Кроме всего прочего, там на полюсах вечные проблемы. ИМНО гемор со сфер. координатами перевешивает все сложности с решением системы из трех у-й для поиска лучей.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Тю... так ты и вправду а сфере это решать собрался? Не люблю сферических координат, если только чего нить проинтегрировать... Кроме всего прочего, там на полюсах вечные проблемы.

да не будет там никаких проблем. а на полюсах проблемы именно из-за «лишней» точки при переходе в декартовы координаты. Но в данном случае это не важно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AIv

удалённость шаров не важна при наложении теней.

удалённость шаров и их частичный порядок важно для оптимизации перебора - исходное задание всёж ограничено 100 шарами по причине сверх чем линейная сложности решения.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

O_O. Для 100 шаров порядок перебора вообще ультрафиолетов, все влезает в кэш. Что касается удаленности, то операция & (которой формально описывается поиск области пересечения проекций) вообще то коммутативна - ни на какие мысли не наводит?

AIv ★★★★★
()
Ответ на: комментарий от AIv

т.е мы же не перебераем все подмножества ( это 2**100 :)

вообще максимальное число разных областей вроде подобно числу 100 множеств на диаграмме вена вроде.

qulinxao ★★☆
()
Ответ на: комментарий от AIv

всё таки мысли по треду разбросаны поэтому:

разьясните на что проецируются шары(3ёх мерные) что их пересeчение однозначно 2 лучами(точки касания) либо 1 (тут ясно что область пересечения шаров точка)

т.е на что проецируется пересечения теней (двумерная лунка?(ограниченая дугами)) - что взаимооднозначна двум лучам?

по этому и хоца даже псевдокод шоб понять ибо это более формализованно чем даже доказательство которое нужно вкуривать.

т.е охота увидить конструктивное решение в отличии от доказательства существования.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Проецируются на сферу с центром в (0,0,0), но нас не интересует их проекция. Нам нужно из бесконечного множества лучей выходящих из (0,0,0) выбрать несколько лучей, среди которых гарантированно будет луч пронзающий максимальное число шаров.

AIv ★★★★★
()
Ответ на: комментарий от AIv

ok.

вот у нас есть пересечение теней двух шаров - почему нам достаточно 2 ух лучей?

и как добавление тени от третьего шара ( для случая когда есть общая тень от 3ёх шаров) меняет число лучей ?

qulinxao ★★☆
()

Учавствовал в олимпиаде ТРТУ. Там была такая же задача, тока вместо шаров были зайцы (или кролики - не помню уже). Решил, но, хоть убей не помню как. Загляни на их сайт (tsure.ru) - там обычно решения выкладывают. Задача называласть «Охотник и зайцы» или вроде того. :)

anonymous
()
Ответ на: комментарий от qulinxao

Давайте вы перечитаете еще раз чего я выше говорил (и даже ссылки приводил) и еще раз подумаете?;-)

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.