Il existe plusieurs intervalles de temps récurrents, commençant à partir de startTime jusqu'à endTime. Chaque intervalle est défini par l'heure de début de la récurrence, l'heure de fin (jusqu'au point où la récurrence va se poursuivre), l'onDuration (quand elle est active et peut se chevaucher), et la durée d'extinction.Algorithme pour trouver si les intervalles de temps régulièrement récurrents se chevauchent?
Intervalle d'échantillonnage:
startTime: 3 secs
endTime: 30 secs
onDuration: 3 secs (represented by x)
offDuration: 5 secs (represented by -)
|--[xxx]-----[xxx]-----[xxx]-----[xxx]-|
Chevauchement Intervalles: Deux séries récurrentes sont dites à se chevaucher si elles ont chevauchement en temps (x) à l'intérieur de début et de plages de temps de fin de chacun d'eux.
Question: Il existe des dizaines de tels intervalles. Un nouvel intervalle récurrent, défini par les mêmes paramètres (startTime, endTime, onDuration, offDuration) est fourni. Ce nouvel intervalle récurrent chevauche-t-il l'un des intervalles existants, dans les plages horaires de startTime et endTime?
PotentialInterval:
startTime: 6 secs
endTime: 15 secs
onDuration: 3 secs
offDuration: 6 secs
PotentialInterval ne pas en conflit avec SampleInterval parce qu'elle se termine avant qu'il aurait chevauché.
Remarques:
Ceci est très similaire à this question, mais je ne pouvais pas comprendre complètement l'exactitude de la solution. De plus, je ne cherche qu'à déterminer s'ils sont en conflit (booléen vrai ou faux), plutôt que l'intervalle conflictuel réel.
L'heure de fin et l'heure de début de chaque intervalle forment une progression arithmétique. startTime n = startTime + (n-1) (onDuration + offDuration) où startTime n < endTime. Ainsi, peut-être this question pourrait pointer dans la bonne direction, même si je ne pouvais pas trouver un moyen d'incorporer des durées dans ce domaine.
Les échantillons sont beaucoup plus petits. En réalité, le nombre d'intervalles individuels dans chaque récurrence serait de plusieurs milliers (par exemple, d'ici à 10 ans tous les jours de 15h à 16h). En outre, le nombre de récurrences pourrait être des centaines. Ainsi, dénormaliser les données (faire une liste de chaque occurrence) peut ne pas être pratique.
Ces données sont stockées dans une base de données NoSQL, donc des manipulations de date-heure dans la base de données ne sont pas possibles. Cela doit être fait en mémoire, et de préférence dans l'ordre de ~ 500 millisecondes
Ça sent comme les devoirs ... – dat3450
Quelle est votre question? –
@ dat3450: Ce n'est pas un devoir, c'est un problème sur lequel je travaille actuellement pour la planification des ressources. Bien que j'aurais aimé faire ce genre de devoir, je ne serais pas coincé maintenant :) – user1271286