मेरे पास डेटाबेस में एक तालिका है जो items
स्टोर करती है जिसे कुछ दिनों की अवधि के लिए किराए पर लिया जा सकता है।निर्धारित करें कि इनपुट दिनांक सीमा मौजूदा लोगों के साथ ओवरलैप है
अब जब भी किसी एक item
किराए, वे निर्दिष्ट एक start_date
और एक end_date
(मूल रूप से एक date range
जिसके लिए वे किराए के लिए है कि item
चाहते हैं)।
मैं जानना चाहता हूं कि इनपुट date range
डेटाबेस में मौजूदा date ranges
के साथ ओवरलैप नहीं है, यह जानने के लिए कुशल एल्गोरिदम (समय जटिलता के मामले में) क्या है।
उदाहरण:
|<------existing 1------->|
|<------existing 2------->|
|<------ input date range ---->| (which clearly, overlaps)
नोट:
यह सवाल this सवाल का डुप्लिकेट नहीं है। वह जांचता है कि दो date ranges
ओवरलैप है या नहीं। मेरा प्रश्न के साथ कई मौजूदा date ranges
एक और नोट एक इनपुट date range
अतिव्यापी के बारे में है:
मामले में आप इस सवाल के टैग से उलझन में कर रहे हैं, मैं जवाब के दोनों प्रकार, language-agnostic
रूप में अच्छी तरह language-specific
के रूप में करने के लिए खुला रहा हूँ।
मैं एक django 1.9
परियोजना PostgreSQL
डेटाबेस के रूप में साथ python 3.4
पर चल रहे हैं:
जो लोग language-specific
जवाब देने के लिए, यहां और विवरण हैं। मेरे मॉडल हैं:
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()
आपका उत्तर बहुत ही आशाजनक लग रहा है, क्या आप कृपया कम से कम कुछ संकेत दे सकते हैं कि पेड़ों का उपयोग करके यह कैसे किया जा सकता है? –
ज़रूर। आदेशित सूची का उपयोग करने के बजाय, एक पेड़ का उपयोग करें। एवीएल, ब्लैक-रेड या 2-3 पेड़ सभी इन कार्यों के लिए 'ओ (लॉग एन)' प्रदर्शन का वादा करते हैं ... –