Покрытие точек отрезками
От: jerry_ru  
Дата: 20.05.10 13:17
Оценка:
Пусть есть множество точек X = {x1, ..., xn}, лежащих на оси. Есть множество отрезков P = {p1, ..., pn},
причем каждый отрезок p может располагаться в произвольном месте на оси. Каждый отрезок p обладает
способностью поглощать q точек.
1. Каковы необходимые условия того, что все точки X могут быть поглощены отрезками P
2. Каковы достаточные условия того, что все точки X могут быть поглощены отрезками P
3. Алгоритм расчета местоположения отрезков на оси


Подскажите пожалуйста, есть ли типовые алгоритмы, или возможно есть иная формулировка данной задачи.
Re: Покрытие точек отрезками
От: MBo  
Дата: 20.05.10 13:56
Оценка:
Здравствуйте, jerry_ru, Вы писали:

_>Пусть есть множество точек X = {x1, ..., xn}, лежащих на оси. Есть множество отрезков P = {p1, ..., pn},

_>причем каждый отрезок p может располагаться в произвольном месте на оси. Каждый отрезок p обладает
_>способностью поглощать q точек.
_> 1. Каковы необходимые условия того, что все точки X могут быть поглощены отрезками P
_> 2. Каковы достаточные условия того, что все точки X могут быть поглощены отрезками P
_> 3. Алгоритм расчета местоположения отрезков на оси


Длина отрезков задана (фиксирована) ?
Re: Покрытие точек отрезками
От: dilmah США  
Дата: 20.05.10 14:44
Оценка:
_>Пусть есть множество точек X = {x1, ..., xn}, лежащих на оси. Есть множество отрезков P = {p1, ..., pn},
_>причем каждый отрезок p может располагаться в произвольном месте на оси. Каждый отрезок p обладает
_>способностью поглощать q точек.
_> 1. Каковы необходимые условия того, что все точки X могут быть поглощены отрезками P
_> 2. Каковы достаточные условия того, что все точки X могут быть поглощены отрезками P
_> 3. Алгоритм расчета местоположения отрезков на оси

_>Подскажите пожалуйста, есть ли типовые алгоритмы, или возможно есть иная формулировка данной задачи.


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


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

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

Ну то есть идея такая -- попытаться найти такое определение функции "разброс", чтобы из существования решения для набора точек с некоторым значением "разброса" следовало существование решения для всех наборов точек с меньшим "разбросом". Тогда можно будет решить задачу динамическим программированием или жадным алгоритмом.
Re: Покрытие точек отрезками
От: batu Украина  
Дата: 20.05.10 15:43
Оценка:
Здравствуйте, jerry_ru, Вы писали:

_>Пусть есть множество точек X = {x1, ..., xn}, лежащих на оси. Есть множество отрезков P = {p1, ..., pn},

_>причем каждый отрезок p может располагаться в произвольном месте на оси. Каждый отрезок p обладает
_>способностью поглощать q точек.
_> 1. Каковы необходимые условия того, что все точки X могут быть поглощены отрезками P
_> 2. Каковы достаточные условия того, что все точки X могут быть поглощены отрезками P
_> 3. Алгоритм расчета местоположения отрезков на оси


_>Подскажите пожалуйста, есть ли типовые алгоритмы, или возможно есть иная формулировка данной задачи.

В такой формулировке все множество точек может быть покрыто т.е. каждая точка своим собственным отрезком. Так как количество отрезков равно количеству точек.
Интереснее задача когда количетво точек n, а количество отрезков m, где m<n.
Выбираем m-1 пару последовательных точек между которыми максимальное расстояние. (надеюсь точки {x1, ..., xn} упорядочены). Минимальная необходимая общая длина отрезков для покрытия должна быть >= xn-x1-сумма этих найденых максимальных расстояний. Если это не так, то покрытие не возможно.
Количество оставшихся промежутков (которые и будем покрывать) n-m штук.
Надо подумать как бы их накрыть...
Re[2]: Покрытие точек отрезками
От: dilmah США  
Дата: 20.05.10 17:18
Оценка:
B>Выбираем m-1 пару последовательных точек между которыми максимальное расстояние. (надеюсь точки {x1, ..., xn} упорядочены). Минимальная необходимая общая длина отрезков для покрытия должна быть >= xn-x1-сумма этих найденых максимальных расстояний. Если это не так, то покрытие не возможно.
B>Количество оставшихся промежутков (которые и будем покрывать) n-m штук.
B>Надо подумать как бы их накрыть...

этот подход не всегда ведет к решению, хотя решение есть.

Пусть q=2. Точки: 1,1,100,200,200,300,400,400
Длины отрезков: 1,1,1,201

Три пары последовательных точек между которыми макс. расстояние: 100,200; 200,300; 300,400
Остались промежутки: 1-100 ; 200-200; 300-300; 400-400

Если ты хочешь покрывать именно эти промежутки и не покрывать те которые выкинул, то ничего не получится, ты не покроешь промежуток 1-100 одним отрезком, потому что q=2, а там 3 точки.

В то же время есть решение: покрыть длинным отрезком точки 100 и 300. А остальные покрыть короткими отрезками. Таким образом правильное решение покрывает промежутки которые ты выкинул.
Re[3]: Покрытие точек отрезками
От: batu Украина  
Дата: 20.05.10 18:00
Оценка:
Здравствуйте, dilmah, Вы писали:

B>>Выбираем m-1 пару последовательных точек между которыми максимальное расстояние. (надеюсь точки {x1, ..., xn} упорядочены). Минимальная необходимая общая длина отрезков для покрытия должна быть >= xn-x1-сумма этих найденых максимальных расстояний. Если это не так, то покрытие не возможно.

B>>Количество оставшихся промежутков (которые и будем покрывать) n-m штук.
B>>Надо подумать как бы их накрыть...

D>этот подход не всегда ведет к решению, хотя решение есть.


D>Пусть q=2. Точки: 1,1,100,200,200,300,400,400

D>Длины отрезков: 1,1,1,201

D>Три пары последовательных точек между которыми макс. расстояние: 100,200; 200,300; 300,400

D>Остались промежутки: 1-100 ; 200-200; 300-300; 400-400

D>Если ты хочешь покрывать именно эти промежутки и не покрывать те которые выкинул, то ничего не получится, ты не покроешь промежуток 1-100 одним отрезком, потому что q=2, а там 3 точки.


D>В то же время есть решение: покрыть длинным отрезком точки 100 и 300. А остальные покрыть короткими отрезками. Таким образом правильное решение покрывает промежутки которые ты выкинул.

Не очень понял объяснение.
1. Что такое q?
2. Точки на линии? Как-то странно ты их задаешь. Что за точки 200, 200 и 400, 400?
3. отрезки определяются длиной?
Но смысл понятен. Конечно, так в лоб не получится. И не только по той причине что ты сказал. Это только необходимое условие для покрытия, а не алгоритм. Алгоритм не продумал. Есть идея что начинать с удаления первого максимального, а потом пытаться уложить две части. Ну, типа рекурсию запустить.. Но, подумаю завтра утром. Извини.. Телек смотрю.. А ты с обозначениями определись что б людям легче было придумывать.
Предлагаю точки определять одним значением (это пойму что это за точки 200, 200) . Количествто точек n, Отрезки определять длиной, количество отрезков n. Устроит?
Re[4]: Покрытие точек отрезками
От: dilmah США  
Дата: 20.05.10 18:30
Оценка:
B>Не очень понял объяснение.
B>1. Что такое q?

в исходном условии:

Каждый отрезок p обладает способностью поглощать q точек.


B>2. Точки на линии? Как-то странно ты их задаешь. Что за точки 200, 200 и 400, 400?


да, точки на линии, задаются одним числом, координатой. Перечислены через запятую. 200, 200 это две точки, лежащие рядом, в одном месте -- если это очень принципиально, то можно разнести их на эпсилон, скажем 199.9 и 200.1

B>3. отрезки определяются длиной?


да.

B>А ты с обозначениями определись что б людям легче было придумывать.


ээ.. это не моя задача вообще-то

B>Предлагаю точки определять одним значением (это пойму что это за точки 200, 200) . Количествто точек n, Отрезки определять длиной, количество отрезков n. Устроит?


если я правильно понял условие, то да. Только отрезков m, а не n.
Re[5]: Покрытие точек отрезками
От: batu Украина  
Дата: 20.05.10 18:40
Оценка:
Здравствуйте, dilmah, Вы писали:

B>>Не очень понял объяснение.

B>>1. Что такое q?

D>в исходном условии:

D>

Каждый отрезок p обладает способностью поглощать q точек.


B>>2. Точки на линии? Как-то странно ты их задаешь. Что за точки 200, 200 и 400, 400?


D>да, точки на линии, задаются одним числом, координатой. Перечислены через запятую. 200, 200 это две точки, лежащие рядом, в одном месте -- если это очень принципиально, то можно разнести их на эпсилон, скажем 199.9 и 200.1


B>>3. отрезки определяются длиной?


D>да.


B>>А ты с обозначениями определись что б людям легче было придумывать.


D>ээ.. это не моя задача вообще-то


B>>Предлагаю точки определять одним значением (это пойму что это за точки 200, 200) . Количествто точек n, Отрезки определять длиной, количество отрезков n. Устроит?


D>если я правильно понял условие, то да. Только отрезков m, а не n.

Убедил!
Re: Покрытие точек отрезками
От: jerry_ru  
Дата: 21.05.10 18:31
Оценка:
Добрый вечер.

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

_> Ну то есть идея такая -- попытаться найти такое определение функции "разброс"


Не понял идею .
Re[2]: Покрытие точек отрезками
От: jerry_ru  
Дата: 21.05.10 18:37
Оценка:
_>Хочу немного уточнить условие количество точек и отрезков не равно, длины в общем случае произвольные, располагать отрезки на оси можно также произвольно.

Еще маленькое уточнение: количество точек которое может поглотить отрезок может быть разным для разных отрезков.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.