Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
здраствуйте. посоветуйте пожалуйста эффективный алгоритм поиска дырок в множестве. грубо говоря есть таблица с полями start, count. надо вывести все записи этой таблицы в виде start, fin, а также пустые интервалы с указанием что запись отсутствует. для понятности пример: startcount110123177301 нужно чтобы получилось startfinexist110+1111-1214+1516-1723+2429-3030+ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 10:39 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
Можно как-нибудь ограничить максимальный размер "дырки"? Например, тысячей? Если да, то задача легко решается с опомщью SQL-запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 10:50 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
Garya - объясните мне, как при помощи SQL-запроса можно получить данные, которых в таблице нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 10:58 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
2 Garya сделаем допущение что можно (например 256 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 11:03 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
А что возвращать в случаеstartcount111123177301 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 11:12 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
Я подумал. Ограничение не нужно. Можно сделать живописнее и более универсально. :) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 11:57 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 16:27 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
Вообще-то на форуме по MS SQL Server таких задачек видимо-невидимо. Обычно такие вопросы ТАМ задают... :) А самые красивые и быстродействующие решения обычно выдает SergSuper (да светится имя его). Я так с ним даже и не пытаюсь конкурировать... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2005, 17:44 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
2 Мигалка возвращать 1,11,+ 12,14,+ 15,16,- 17,23,+ и т.д. спасибо всем ответившим. буду пробовать-пытаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 06:10 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
2 Кабан Савраскин. Мой запрос возвращает именно то, что тебе нужно (смежные интервалы в один интервал НЕ сливает). Только с алиасами для полей я немного поднаврал (посчитал, что название полей в результирующем наборе несущественно). Однако, если заменить "as [End]" на "as Fin", а "as [Sign]" на "as [Exist]", то получится в точности нужный результирующий набор (при условии, что исходная таблица называется Sequenses): /* этот кусок запроса возвращает только имеющиеся интервалы (которые помечаются знаком "+") /* select Start, Start+[Count]-1 as [Fin] , '+' as [Exist] from Sequenses union /* а этот кусок запроса возвращает только промежутки между интервалами, помеченные знаком "-" */ select a.Start+a.[Count] as Start, (select min(b.Start)-1 from Sequenses b where b.Start>a.Start+a.[Count]) as [Fin] , '-' as [Exist] from Sequenses a /* исключаем последнюю запись, чтобы пустота за ней не воспринималась как незаполненный промежуток */ where a.Start<(select max(Start) from Sequenses) and /* и еще исключаем промежутки, между интервалами, размер которых равен нулю */ not exists(select c.* from Sequenses c where c.Start=a.Start+a.[Count]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 12:00 |
|
||
|
алгоритм проверки дырок в интервале
|
|||
|---|---|---|---|
|
#18+
:) спасибо Гаря за столь подробное разъяснение (особенно по поводу алиасов :). могу добавить только, что пришлось [] заменить на ", потому как в постгресе синтаксис чуть-чуть другой. запрос действительно работает как часы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 12:33 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33083981&tid=1347659]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 424ms |

| 0 / 0 |
