2010-10-22 22 views
5

bracketing मैं कार्य निम्नलिखित है खोजने के लिए:एल्गोरिथ्म लाइनों एक बिंदु

कार्यक्रम हम थोड़ा मैप किया प्रदर्शन पर सीमा रेखा कैसे करना चाहिए। n वास्तविकताओं के जोड़े (ai,bi) ने n लाइन yi = ai*x + bi परिभाषित किया है। लाइनों अर्थ में x -interval [0, 1] में आदेश दिए थे कि 0 और n-2 के बीच और x के सभी मानों के लिए i के सभी मानों के लिए yi < yi+1[0, 1]

कम औपचारिक रूप से में, लाइनों ऊर्ध्वाधर में स्पर्श नहीं करते पटिया। (x,y) पर एक बिंदु दिया गया, जहां 0 < x < 1, हम बिंदु को ब्रैकेट करने वाली दो पंक्तियों को निर्धारित करना चाहते हैं।

हम इस समस्या को जल्दी से कैसे हल कर सकते हैं?

उत्तर

1
Function bracket(Real x, Real y, Array a[1..n],b[1..n] of Reals): Returns void 
{ 
    Integer i = 1; 

    While (i<=n && (a[i] * x + b[i]) <= y, i++) 

    If (i==1 || i == n+1) 
         { Print("Not bracket exists"); 
         Exit() 
         } 
    If (a[i] * x + b[i]) == y) 
         { Print("Point lies on line",i); 
         Exit() 
         } 
    Print("Point between lines ", i-1, " and ", i); 
} 

हालांकि, मामूली पकड़ है। निम्न चित्र देखें:

alt text

क्या आप कहेंगे कि बिंदु एफ दो पंक्तियों द्वारा "कोष्ठकों के भीतर" में [0,1] एक्स [0,1] ?? इस मामले में सही जवाब क्या है?

+0

शायद एक बाइनरी खोज तेज होगी? – Dialecticus

+1

@ डायलेक्टिकस शायद मैंने ओपी को गलत समझा ("हम इस समस्या को जल्दी कैसे हल कर सकते हैं?")। यदि "जल्दी" का अर्थ है ओ (लॉगन) आप सही हैं, तो "जल्दी" का अर्थ सिर्फ एक ही निर्देश में है, उपरोक्त "लूप" लूप करेगा। इस संदर्भ में इस्तेमाल करने से पहले कभी "जल्दी" नहीं देखा :) –

संबंधित मुद्दे