|
|
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
Есть числовая прямая. Есть хороший отрезок - он может быть только один, у него есть координаты первой и последней точек. Есть плохие отрезки - тоже с координатами. Их надо пересечь вычитанием с хорошим отрезком. Надо понимать, что из одного хорошего после пересечения может получится два, если плохой отрезок находился внутри хорошего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 16:31 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
Каролиночка Надо понимать, что из одного хорошего после пересечения может получится два, если плохой отрезок находился внутри хорошего.значит, надо для начала определиться с тем, как хранить окончательный хороший отрезок. например, список отрезков. потом, при наложении плохого на хороший, определить.. я насчитал 4 варианта - 1. плохой не пересекается с хорошим вообще. 2. плохой делит хороший на два 3,4. плохой укорачивает хороший - слева или справа. все это (1-4) выполняется для плохого, и для каждого хорошего из списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 17:30 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
Берём координаты начал и концов плохих отрезков. Началу даём вес 1, концу вес -1. Сортируем по возрастанию координаты. И начинаем движение от самой левой точки, подсчитывая текущий вес. Участки, где вес нулевой - хорошие. Если начало хорошего отрезка левее самой левой плохой точки - участок между ними тоже хороший. Если самая правая плохая точка левее конца хорошего отрезка - участок между ними также хороший. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 18:31 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
КаролиночкаЕсть числовая прямая. Есть хороший отрезок - он может быть только один, у него есть координаты первой и последней точек. Есть плохие отрезки - тоже с координатами. Их надо пересечь вычитанием с хорошим отрезком. Надо понимать, что из одного хорошего после пересечения может получится два, если плохой отрезок находился внутри хорошего. Что будет если вследствие вычитания мы получит 3 и более хороших отрезков? Не противоречит ли это пункту первому? Может лучше работать с множеством хороших отрезков? (так удобнее для хранения в динамических структурах для данного алгоритма) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 19:04 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
КаролиночкаЕсть числовая прямая. Есть хороший отрезок - он может быть только один, у него есть координаты первой и последней точек. Есть плохие отрезки - тоже с координатами. Их надо пересечь вычитанием с хорошим отрезком. Надо понимать, что из одного хорошего после пересечения может получится два, если плохой отрезок находился внутри хорошего. Хорошо. Каролиночка, а что нужно сделать? Нарисовать на экране? Пожалуйста, в чем задача? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 21:04 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
На самом деле задача стоит примерно таким образом: - оперируем временными интервалами, каждый из которых задан объектом с полями startDate и endDate - на входе дается несколько интервалов + имеем список объектов ограничивающих отрезков Если мы пройдемся по списку ограничивающих отрезков, то да, существует несколько ситуаций, описанных выше, когда происходит усечение исходного интервала слева, справа, деление на два, или не происходит ничего. Поскольку входных отрезков несколько, плюс в процессе обработки могут получится новые отрезки (после деления), то исходный список интервалов, как я понимаю, необходимо обрабатывать рекурсивно, по достижению какого-то состояния. На данный момент я пытаюсь придумать критерий запуска рекурсии и, соответственно, ее окончания. Как-то так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2011, 01:59 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
А зачем рекурсия-то нужна? У вас же последовательная обработка... Давайте рассмотрим такой вариант: ваш "хороший" интервал (на самом деле, это будет допустимое множество) будет задаваться неким объектом. Например, объектом будет коллекция этих ваших объектов со старт/энд датами. И этот объект будет иметь методы для преобразования собственного состояния - например, даем методу некий соответствующий по типу интервал - а метод изменяет коллекцию, разбивая/соединяя имеющиеся интервалы. А "обвязка" пусть организует стек FIFO для поступающих интервалов... Или вам надо все сделать чисто структурным программированием? ЗЫ. Вы бы уж сказали, на чём вообще данное дело реализутся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2011, 03:44 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
+1 . ИМХО рекурсия не нужна, и FIFO тоже. Я б делала так (с учетом 11738645 ) Есть список результ. отрезков, "хороших", Напр. GoodList. Кладем в него исх. отрезок. Есть список огр. отрезков, напр. BadList . Для кажд. BadList[i], просматирваем GoodList: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2011, 12:38 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
Сорри, еще пункт Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2011, 12:53 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
ИринаВ, да, точно. У меня был просмотр GoodList по BadList, а у вас наоборот. Получалось, что у меня некоторые отрезки могли "пролететь" проверку, особенно образовавшиеся после деления. А вообще реализация идет на Java. Я сегодня попробую написать метод, потом тут покажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2011, 13:39 |
|
||
|
Пересечение отрезков
|
|||
|---|---|---|---|
|
#18+
Каролиночка, Можно держать сортированные списки начал и концов хороших отрезков, а не сами отрезки. При этом обработка одного плохого отрезка в общем случае сводится к добавлению одного элемента в каждый список и удалению нескольких. По окончании прохода формировать список хороших отрезков. Если множество возможных значений времени небольшое, например, номер минуты внутри суток, то можно использовать битовую карту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2011, 23:47 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=75&tid=1342568]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 348ms |

| 0 / 0 |
