|
|
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Добрый день! В качестве входных данных подается набор из N интервалов дат : 1.dt1,dt2 2.dt3,dt4 3.dt5,dt6 ... Нужно написать функцию, которая будет преобразовывать входные интервалы в значения, по которым можно было бы определить пересекаются эти интервалы или нет. Подскажите, пожалуйста, как это можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:04 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
NordallПодскажите, пожалуйста, как это можно сделать? То есть написать решение за тебя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:13 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
wadman, это было бы простозамечательно. Указание в каком направлении двигаться было бы более чем достаточно:название алгоритма и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:15 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Nordallпреобразовывать входные интервалы в значения, по которым можно было бы определить пересекаются эти интервалы или нет. В такой постановке задача нерешаема. Ты хочешь получить нулевую размерность, но сравнивать на уровне первой, которая в результатах свёртки просто отсутствует. Если же тебе надо принять ДВА интервала и вернуть, пересекаются они или нет - просто анализируй знак выражения (начало1 - конец2) * (начало2 - конец1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:21 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо за совет. У меня решение есть, но с производительностью есть вопросы: Для каждой интервала возвращаем массив всех дат из него (для первого: dt1,dt1+1,dt1+2,...,dt2) и сохраняем его в буфере. После обработки последнего интервала проверяем на уникальность дат в буфере.(это самый прямой алгоритм, естественно можно его улучшить) Если все даты уникальны, значит интервалы не пересекаются. Проблема в том что интервалы вида '03.12.2013' - '31.12.5999' будут возвращать 2916854 значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:52 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
очепятка '31.12.5999'->'31.12.9999' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 15:54 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
NordallУ меня решение есть, но Это - не решение. Это full trЫndetz erotic international... Мой алгоритм - решение. Хотя я считаю, что это у такого решения есть серьёзные проблемы с производительностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 18:32 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
А в чем принципиальность преобразовывать в значения? В скаляр что ли обязательно нужно? Можно просто отсортировать по началу интервала и пробежаться по порядку, посмотреть, есть ли пересечения соседних интервалов. В худшем случае O(n * lg n) сложность будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 20:40 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Мужик, Сейчас так и работает, но нужно переделать на скаляр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 21:14 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Akina, Тем не менее это вариант решения. Если бы оно меня устраивало, вопросов бы на форуме не задавал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 21:19 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Вводишь в проект MySQL-сервер. И со свистом обрабатываешь большие массивы данных одним махом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 23:44 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
PS. Формально любой Geometry тип может считаться скаляром, ибо может быть обратимо конвертирован в строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 00:05 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Nordall, вместо двух дат храни один int64 - вот тебе и скаляр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 00:06 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
Akina, спасибо за наиподробнейший пример! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 12:33 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
AkinaМой алгоритм - решение. Хотя я считаю, что это у такого решения есть серьёзные проблемы с производительностью. У него будет нормальная производительность, если интервалы перед сравнением отсортировать по дате начала. И в этом подходе содержится намёк на дальнейшее улучшение производительности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 12:36 |
|
||
|
Интервал дат
|
|||
|---|---|---|---|
|
#18+
softwarerAkinaМой алгоритм - решение. Хотя я считаю, что это у такого решения есть серьёзные проблемы с производительностью. У него будет нормальная производительность, если интервалы перед сравнением отсортировать по дате начала. И в этом подходе содержится намёк на дальнейшее улучшение производительности :) Мы до сих пор не в курсе, гда, как, что и почём. Скажем, в случае реализации моего алгоритма в СУБД сортировка нахрен не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 14:56 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38487512&tid=1341549]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 489ms |

| 0 / 0 |
