2009-12-01 5 views
0

У меня есть список начала сеанса и остановки, в формате, как так:Одновременные соединения, Excel

23/11/09 15:18:32, 23/11/09 15:18:40 
23/11/09 15:20:02, 23/11/09 15:20:32 
23/11/09 15:20:10, 23/11/09 15:20:40 

Это первенствует в данный момент, начать DateTime в одном конце столбца DateTime в другой.

В основном, что я хочу сделать, это некоторая пост-обработка этих данных. Я не уверен, что использовать еще, независимо от того, разрабатывать ли мое приложение или просто использовать excel, в котором я надеялся на помощь.

В основном, что я хочу сделать, это сказать, что на х период, скажем, для простоты, час 15:00 - 16:00. Основываясь на этих сеансах, я хочу выяснить, сколько одновременных соединений в течение этого часа.

Любые идеи, идеи, как их использовать? первенствует? VS2008?

Я думаю, одна хорошая вещь о сохранении его в Эксел, то я могу легко создавать диаграммы и т.д. ... и я всегда боролись работы с объектами даты и времени в VS.

+0

Что вы подразумеваете под Соединениями? –

+0

, так что для примерных сеансов, которые вы предоставляете, это правильный ответ 2? В этот час есть 3 сеанса, но только два из них перекрываются.Если бы были, скажем, четыре сеанса, A B C & D и A & B перекрывались, а C & D перекрывались, вы хотите, чтобы ответ был 2 (максимум один раз) или 4 (потому что все сеансы перекрывались)? –

+0

Ах, соединение = перекрывающиеся или параллельные сеансы. Excel должен сделать это, я думаю. –

ответ

2

Я считаю, что это не простая проблема. Позвольте мне переформулировать вашу проблему: вы можете рассматривать каждое соединение как сегмент в строке с начальным значением и конечным значением. То, что вы пытаетесь найти, является наибольшим подмножеством сегментов, которые имеют непузырное пересечение; количество элементов в этом подмножестве - это количество одновременных соединений. Если вы решите это, поиск ответа на ограниченный промежуток времени должен быть тривиальным (просто «обрезайте» каждое соединение, чтобы, если начальное значение перед началом периода, соединение начинается с начала периода).
Теперь причина, по которой я думаю, что это сложно, состоит в том, что если вы возьмете три сегмента, скажем, с 1:00 до 2:00, с 1:00 до 1:15 и с 1:45 до 2:00, все 3 перекрытия, но вы имеет только 2 параллельных соединения. Поэтому просто проверить, сколько других соединений перекрывается для каждого соединения, будет недостаточно, вам нужно будет фактически рассмотреть, как перекрытия перекрываются, так сказать.
Большинство вещей можно сделать в Excel, по крайней мере, если вы используете VBA, поэтому я не думаю, что это действительно ваша проблема - проблема в самом алгоритме.
Редактировать: Я быстро скосил, и кажется, что Marzullo's algorithm близок к тому, что вы пытаетесь сделать. Я буду копать еще несколько, но это может дать вам отправную точку.
Редактировать 2 Один «дешевый» способ получить достойный ответ/приближение - это разбить период, который вы планируете в течение небольших последовательных интервалов (например: перерыв на один час в 5-минутных сегментах) и для каждого сегмента, подсчет которые перекрываются. Это должно быть быстрее, чем явно пытаться идентифицировать сегмент, где пересекается большинство сегментов!

+0

Ломать во временных сегментах будет хорошо! Скажите, что я могу сообщить, сколько одновременных в слотах 5, 15, 30, 45, 1hr, это прекрасно! Я не могу сказать им на сто процентов, почему это упрощает алгоритм. Сегодня я путаю себя глупо! спасибо. – baron

+0

или, может быть, даже, один способ будет идти в каждом конкретном случае. очень грубая идея, но, например, перечислите все вызовы - время окончания вызова в списке. пользователь нажимает вызов - теперь я проверяю, сколько одновременных подключений происходит во время этого вызова. затем я перехожу через каждое значение CallStart> CallEnd, проверяя одновременные соединения в течение этого периода вызова. Это имеет смысл? – baron

+0

Просто, чтобы уточнить, мое «легкое» предложение состоит в том, чтобы 1) выбрать период, который вы хотите покрыть (скажем, с 2 вечера до 3 вечера), а затем разбить период на меньшие интервалы (скажем, 5 минут) - и просто подсчитать, сколько соединения пересекают каждый из 12 5-минутных интервалов. Они не гарантированно перекрываются, но это должно дать вам приблизительную оценку. И ваш номер перекрывающегося соединения в час - это максимум, наблюдаемый на меньших интервалах. – Mathias

0

Я предполагаю, что на самом деле неэффективный метод будет чтобы пройти через начальное значение вызова, проверяя с конечным значением EACH, которое больше, увеличивая счетчик, если оно больше (одновременный вызов)

, то в определенное время я мог бы сказать, сколько одновременных соединений их. ..

не думаю, что это очень помогает мне, если я хочу сказать что-то подобное е сколько одновременное с 14:00 до 15:00

ах

Смежные вопросы