Ich habe eine Tabelle in der Datenbank, die items
speichert, die für ein paar Tage gemietet werden kann. JetztLegen Sie fest, ob sich der Eingabedatenbereich mit den vorhandenen Werten überschneidet.
, wenn jemand ein item
mietet, geben sie ein start_date
und ein end_date
(im Grunde ein date range
, für die sie die item
mieten wollen).
Ich möchte wissen, was ist der effiziente Algorithmus (in Bezug auf die zeitliche Komplexität) zu überprüfen, dass der Eingang date range
nicht mit bestehenden date ranges
in der Datenbank überlappt.
Illustration:
|<------existing 1------->|
|<------existing 2------->|
|<------ input date range ---->| (which clearly, overlaps)
Hinweis:
Diese Frage ist nicht ein Duplikat this Frage. Dieser prüft, ob sich zwei date ranges
überlappen. Meine Frage ist über einen Eingang date range
Überlappung mit mehreren bestehenden date ranges
Noch ein Hinweis:
Falls Sie diese Frage des Tags sind verwirrt, ich bin offen für beide Arten von Antworten, language-agnostic
sowie language-specific
.
Für diejenigen, die language-specific
Antwort geben wollen, sind hier weitere Details:
Ich habe ein django 1.9
Projekt auf python 3.4
mit PostgreSQL
als Datenbank. Meine Modelle sind:
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()
Ihre Antwort sieht sehr vielversprechend aus, können Sie bitte zumindest einen Hinweis darauf geben, wie dies mit Bäumen gemacht werden kann? –
Sicher. Verwenden Sie statt einer geordneten Liste einen Baum. Die AVL, schwarz-rot oder 2-3 Bäume versprechen "O (log n)" Leistung für diese Aktionen ... –