Ho una tabella nel database che memorizza items
che può essere affittata per un periodo di pochi giorni.Determinare se l'intervallo di date di input si sovrappone a quelli esistenti
Ora ogni volta che qualcuno affitta un item
, specificano un start_date
ed un end_date
(fondamentalmente un date range
per la quale vogliono affittare che item
).
Desidero sapere qual è l'algoritmo efficiente (in termini di complessità temporale) per verificare che l'input date range
non si sovrapponga a quello esistente date ranges
nel database.
Illustrazione:
|<------existing 1------->|
|<------existing 2------->|
|<------ input date range ---->| (which clearly, overlaps)
Nota:
Questa domanda non è un duplicato di this domanda. Quello controlla se due date ranges
si sovrappongono. La mia domanda riguarda un ingresso date range
sovrapposizione con più esistente date ranges
un'altra nota:
Nel caso in cui siete confusi da tag di questa domanda, io sono aperto a entrambi i tipi di risposte, language-agnostic
così come language-specific
.
Per coloro che vogliono dare language-specific
risposta, qui ci sono i dettagli:
Ho un progetto in esecuzione su django 1.9
python 3.4
con PostgreSQL
come database. I miei modelli sono:
class Item(models.Model):
name = models.CharField(max_length=100)
class BookingPeriod(models.Model):
item = models.ForeignKey(Item)
start_date = models.DateField()
end_date = models.DateField()
la tua risposta sembra molto promettente, puoi per favore dare almeno qualche suggerimento su come questo può essere fatto usando gli alberi? –
Sicuro. Invece di usare una lista ordinata, usa un albero. L'AVL, nero-rosso o 2-3 alberi promettono tutte le prestazioni di 'O (log n)' per queste azioni ... –