Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में दी गई बाधा का उपयोग करके न्यूनतम और अधिकतम के बीच सामान्य अंश खोजने का कार्यक्रम

मान लीजिए कि हमारे पास अधिकतम और न्यूनतम दो लंबे पूर्णांक मान हैं। हमें एक उभयनिष्ठ भिन्न n/d इस प्रकार ज्ञात करना है कि min <=d <=max. और |n/d - pi| सबसे छोटा है। यहाँ pi =3.14159265... और यदि एक से अधिक भिन्न इस शर्त को धारण कर रहे हैं, तो भिन्न को सबसे छोटे हर के साथ लौटाएँ।

इसलिए, यदि इनपुट न्यूनतम =1 अधिकतम =10 जैसा है, तो आउटपुट 22/7 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • P :=एक भिन्न (5706674932067741 / 1816491048114374) - 3
  • a :=0, b :=1, c :=1, d :=1
  • farey:=जोड़े की एक सरणी, इसमें शुरू में दो जोड़े होते हैं (a, b) और (c, d)
  • बिना शर्त निम्नलिखित के माध्यम से लूप करें -
    • f :=b + d
    • यदि f> अधिकतम - न्यूनतम, तो
      • लूप से बाहर आएं
    • e :=a + c
    • फेयरी के अंत में जोड़ी (e, f) डालें
    • यदि P <(e/f) का मान है, तो
      • c :=e और d :=f
    • अन्यथा,
      • a :=e और b :=f
  • p_min :=तल (P * न्यूनतम)
  • जबकि न्यूनतम <=अधिकतम, करें
    • c :=0, d :=0
    • फेयरी में प्रत्येक जोड़ी (ए, बी) के लिए, करते हैं
      • यदि न्यूनतम + b> अधिकतम, तो
        • लूप से बाहर आएं
      • अगर |(p_min + a)/ (न्यूनतम + b) - P| <|p_min / न्यूनतम - पी|, फिर
        • c :=a, d :=b
        • लूप से बाहर आएं
    • यदि d, 0 के समान है, तो
      • लूप से बाहर आएं
    • p_min :=p_min + c
    • ओ न्यूनतम:=न्यूनतम + घ
    • ओ रिटर्न अंश (p_min + 3 * न्यूनतम) / न्यूनतम

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

from fractions import Fraction

def solve(minimum, maximum):
   P = Fraction(5706674932067741, 1816491048114374) - 3

   a, b, c, d = 0, 1, 1, 1
   farey = [(a,b),(c,d)]

   while True:
      f = b + d
      if f > maximum - minimum:
         break

      e = a + c
      farey.append((e, f))
      if P < Fraction(e, f):
         c, d = e, f
      else:
         a, b = e, f

   p_min = int(P * minimum)

   while minimum <= maximum:
      c, d = 0, 0
      for a, b in farey:
         if minimum + b > maximum:
            break
         if abs(Fraction(p_min + a, minimum + b).real - P) < abs(Fraction(p_min, minimum).real - P):
            c, d = a, b
            break
      if d == 0:
         break
      p_min += c
      minimum += d
   return ("{}/{}".format(p_min + 3 * minimum, minimum))

minimum = 1
maximum = 10
print(solve(minimum, maximum))

इनपुट

4, 27

आउटपुट

22/7

  1. पायथन का उपयोग करके दिए गए नोड्स के बाइनरी ट्री के सबसे कम सामान्य पूर्वज का पता लगाने का कार्यक्रम

    मान लीजिए, हमें एक बाइनरी ट्री दिया गया है और हमें पेड़ में सभी नोड्स के सबसे कम सामान्य पूर्वज का पता लगाने के लिए कहा गया है। बाइनरी ट्री में सबसे कम सामान्य पूर्वज सबसे निचला नोड होता है, जिसमें नोड x1, x2, x3,...., xn वंशज होते हैं। एक विशेष नोड स्वयं का वंशज भी हो सकता है। हमें नोड ढूंढना होगा

  1. पायथन का उपयोग करके बाइनरी ग्रिड की व्यवस्था करने के लिए न्यूनतम स्वैप खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक n x n बाइनरी मैट्रिक्स है। हम इस पर एक ऑपरेशन कर सकते हैं जैसे, एक चरण में हम दो आसन्न पंक्तियों का चयन करते हैं और उन्हें स्वैप करते हैं। हमें आवश्यक न्यूनतम स्वैप की संख्या गिननी होगी, ताकि मैट्रिक्स के प्रमुख विकर्ण के ऊपर सभी नोड्स 0 हों। यदि ऐसा कोई समाधान नहीं है, तो

  1. पायथन में नोड और वंशज के बीच अंतर खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें किसी भी नोड और उसके वंशजों के बीच सबसे बड़ा निरपेक्ष अंतर खोजना होगा। तो, अगर इनपुट पसंद है तो आउटपुट 7 होगा क्योंकि नोड्स 8 और 1 के बीच सबसे बड़ा पूर्ण अंतर है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक फ़ंक्शन को परिभाषित करें dfs() ।