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

पायथन में सड़क पर सभी घरों को रोशन करने के लिए न्यूनतम त्रिज्या ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है जो 1-आयामी रेखा पर घरों की स्थिति दर्शाती है। अब मान लीजिए हमारे पास 3 स्ट्रीट लाइट हैं जिन्हें हम रेखा पर कहीं भी रख सकते हैं और स्थिति x पर एक लाइट [x-r, x+r] रेंज में सभी घरों को रोशन करती है। हमें सबसे छोटा r ज्ञात करना है जिससे सभी घर रोशन हो जाएं।

उदाहरण के लिए, nums = [4,5,6,7] के लिए आउटपुट 0.5 होगा, क्योंकि हम लैंप को 4.5, 5.5 और 6.5 पर रख सकते हैं ताकि r=0.5 हो। ये तीन लाइटें सभी 4 घरों को रोशन कर सकती हैं।

एल्गोरिदम (बाइनरी सर्च + ग्रीडी)

  • valid(r) फ़ंक्शन परिभाषित करें:
    • last_location := nums[0] + r, count := 1
    • प्रत्येक val in nums के लिए:
      • यदि val - last_location > r, तो count++, last_location = val + r
    • count <= 3 वापस करें
  • मुख्य विधि से:
    • nums को सॉर्ट करें
    • left := 0, right := nums[-1], res := inf, itr := 0
    • जब left <= right और itr < 20:
      • mid = left + (right-left)/2
      • यदि valid(mid), तो res = min(res, mid), right = mid
      • अन्यथा left = mid
      • itr++
    • res वापस करें

उदाहरण

class Solution:
    def solve(self, nums):
        def valid(r):
            last_location = nums[0] + r
            count = 1
            for val in nums:
                if val - last_location > r:
                    count += 1
                    last_location = val + r
            return count <= 3
        nums.sort()
        left = 0
        right = nums[-1]
        res = float("inf")
        itr = 0
        while left <= right and itr < 20:
            mid = left + (right - left) / 2
            if valid(mid):
                res = min(res, mid)
                right = mid
            else:
                left = mid
            itr += 1
        return res

ob = Solution()
nums = [4,5,6,7]
print(ob.solve(nums))

इनपुट

[4,5,6,7]

आउटपुट

0.5
  1. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

    मान लीजिए हमारे पास points नामक एक ऐरे है जिसमें कुछ पॉइंट्स (x, y) के रूप में हैं। अब दो पॉइंट्स (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच की मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी पॉइंट्स को जोड़ने की न्यूनतम लागत ढूंढनी है। उदाहरण के लिए, यदि इनपुट है points = [(0,0),(

  1. Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें? Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें?

    डायरेक्टेड एसाइक्लिक ग्राफ (DAG) में जिन वर्टेक्सेज़ का इन-डिग्री 0 है, उनसे सभी नोड्स पहुंचे जा सकते हैं। एल्गोरिदम सभी नोड्स का सेट बनाएं (0 से n-1)। सभी एजेज़ के डेस्टिनेशन नोड्स (v) का सेट बनाएं। सोर्स नोड्स = सभी नोड्स - डेस्टिनेशन नोड्स (यानी इन-डिग्री 0 वाले)। यही मिनिमम वर्टेक्स सेट है। उद

  1. - पायथन में सभी अच्छे प्रदर्शन करने वालों को भुगतान की जाने वाली न्यूनतम राशि खोजने का प्रोग्राम

    मान लीजिए हमारे पास ratings नामक संख्याओं की एक सूची दी गई है, जो कोडर्स के प्रदर्शन स्कोर दिखाती है। अब मैनेजर हर कोडर को 1000 रुपये देना चाहता है, सिवाय इसके कि यदि दो कोडर आसन्न हैं, तो वे बेहतर प्रदर्शन करने वाले को खराब प्रदर्शन करने वाले से कम से कम 1000 रुपये अधिक देना चाहेंगे। हमें उपरोक्त प