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

Python में घर और निकटतम मेलबॉक्स के बीच न्यूनतम कुल दूरी खोजने का प्रोग्राम


मान लीजिए हमारे पास एक ऐरे houses है और एक मान k है। यहां houses[i] सड़क के किनारे iवें घर का स्थान दर्शाता है, हमें सड़क पर k मेलबॉक्स आवंटित करने हैं, और प्रत्येक घर और उसके निकटतम मेलबॉक्स के बीच न्यूनतम कुल दूरी ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है houses = [6,7,9,16,22], k = 2, तो आउटपुट 9 होगा क्योंकि यदि हम मेलबॉक्स को 7 और 18 पर रखते हैं, तो प्रत्येक घर से न्यूनतम कुल दूरी |6-7|+|7-7|+|9-7|+|16-18|+|22-18| = 1+0+2+2+4 = 9 होगी।

समाधान के चरण

  1. houses सूची को सॉर्ट करें
  2. util() फंक्शन परिभाषित करें जो idx, n, k लेता है
  3. यदि k == 1:
    • core := houses[(n + idx) // 2]
    • sum(|houses[i] - core| for i in range(idx, n+1)) वापस करें
  4. result := infinity
  5. i को idx से n तक:
    • यदि n - i < k - 1, तो लूप से बाहर निकलें
    • result := min(result, util(idx, i, 1) + util(i+1, n, k-1))
  6. result वापस करें
  7. मुख्य मेथड से:
    • util(0, len(houses) - 1, k) वापस करें

उदाहरण

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

def solve(houses, k):
    houses.sort()
    def util(idx, n, k):
        if k == 1:
            core = houses[(n + idx) // 2]
            return sum(abs(houses[i] - core) for i in range(idx, n + 1))
        result = float('inf')
        for i in range(idx, n + 1):
            if n - i < k - 1:
                break
            result = min(result, util(idx, i, 1) + util(i+1, n, k - 1))
        return result
    return util(0, len(houses) - 1, k)

houses = [6,7,9,16,22]
k = 2
print(solve(houses, k))

इनपुट

[6,7,9,16,22], 2

आउटपुट

9
  1. पायथन में समकोण त्रिभुज के मध्य बिंदु और आधार के बीच का कोण खोजने का प्रोग्राम पायथन में समकोण त्रिभुज के मध्य बिंदु और आधार के बीच का कोण खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक समकोण त्रिभुज की दो भुजाएं हैं, ये भुजाएं AB और BC हैं। कर्ण AC का मध्य बिंदु M मानें। हमें M और BC के बीच का कोण ढूंढना है।उदाहरण के लिए, यदि इनपुट ab = 6 bc = 4 है, तो आउटपुट 56.309932474020215 होगा क्योंकि ab/bc का आर्क_टैन 0.9828 है लेकिन डिग्री में यह 56.31 है।समाधान दृष्

  1. पायथन में बाइनरी ट्री में दो नोड्स के बीच की दूरी खोजने का प्रोग्राम पायथन में बाइनरी ट्री में दो नोड्स के बीच की दूरी खोजने का प्रोग्राम

    मान लीजिए हमें एक बाइनरी ट्री दिया गया है और हमें बाइनरी ट्री में दो नोड्स के बीच की दूरी ढूंढनी है। हम दो नोड्स के बीच के एज को ग्राफ की तरह ढूंढते हैं और उनके बीच एज की संख्या या दूरी वापस करते हैं। ट्री के नोड की संरचना नीचे दी गई है: data: right: left: उदाहरण के लिए, यदि इनपुट है: और जिन नो

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

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