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

पायथन में दी गई संख्याओं के सेट से एक्सप्रेशन का अधिकतम संभव मान ढूंढना


मान लीजिए हमारे पास दो ऐरे nums1 और nums2 हैं, जिनमें समान संख्या में तत्व N हैं। अब 1 से N तक के तत्वों का एक सेट S लें। हमें (nums1[i1] + nums1[i2] + ... nums1[ik])² + (nums2[i1] + nums2[i2] + ... nums2[ik])² का मान ढूंढना है, जहां {i1, i2, ... ik} सेट S का एक नॉन-खाली सबसेट है।

उदाहरण के लिए, यदि इनपुट है nums1 = [-1, 6], nums2 = [5, 4], तो आउटपुट होगा 106 क्योंकि:

  • (-1)² + (5)² = 26
  • (6)² + (4)² = 50
  • (-1 + 6)² + (5 + 4)² = 106

समाधान दृष्टिकोण

यह समस्या ज्यामितीय व्याख्या पर आधारित है। प्रत्येक जोड़ी (nums1[i], nums2[i]) को 2D तल पर एक वेक्टर माना जाता है। लक्ष्य इन वेक्टरों के एक सबसेट का चयन करना है ताकि उनके योग की परिमाण (magnitude) अधिकतम हो।

  • सभी जोड़ियों को (nums1[i], nums2[i]) के रूप में सूचीबद्ध करें।
  • इन जोड़ियों को उनके ध्रुवीय कोण (polar angle) के अनुसार सॉर्ट करें, atan2(y, x) का उपयोग करके।
  • सर्कुलर ऐरे तकनीक का उपयोग करके सभी संभावित लगातार सबसेट्स की जांच करें (ऐरे को दोहराकर)।
  • फॉरवर्ड और बैकवर्ड दोनों दिशाओं में अधिकतम वर्ग परिमाण ट्रैक करें।

पायथन कार्यान्वयन

from math import atan2

def solve(nums1, nums2):
    vs = list(zip(nums1, nums2))
    vs = sorted(vs, key=lambda v: atan2(v[1], v[0]))
    best = 0
    for i in range(len(vs)):
        u = vs[i]
        l = u[0]*u[0] + u[1]*u[1]
        for v in (vs + vs)[i+1:(i+len(vs))]:
            t1 = (u[0]+v[0], u[1]+v[1])
            t2 = t1[0]*t1[0] + t1[1]*t1[1]
            if t2 >= l:
                u = t1
                l = t2
        if l > best:
            best = l
        u = vs[i]
        l = u[0]*u[0] + u[1]*u[1]
        for v in reversed((vs + vs)[i+1:(i+len(vs))]):
            t1 = (u[0]+v[0], u[1]+v[1])
            t2 = t1[0]*t1[0] + t1[1]*t1[1]
            if t2 >= l:
                u = t1
                l = t2
        if l > best:
            best = l
    return best

nums1 = [-1, 6]
nums2 = [5, -4]
print(solve(nums1, nums2))

इनपुट

[-1, 6], [5, -4]

आउटपुट

52

  1. पायथन का उपयोग करके अधिकतम संभावना वाले पथ को खोजने का प्रोग्राम पायथन का उपयोग करके अधिकतम संभावना वाले पथ को खोजने का प्रोग्राम

    मान लीजिए हमारे पास n नोड्स वाला एक अनिर्देशित भारित ग्राफ है (नोड्स 0 से क्रमांकित हैं)। यह ग्राफ एज लिस्ट के रूप में दिया गया है, प्रत्येक एज e के लिए, उस एज को पार करने की सफलता की संभावना probability[e] है। हमारे पास प्रारंभ और अंत नोड्स भी हैं, हमें प्रारंभ से अंत तक जाने के लिए अधिकतम सफलता स

  1. - Python प्रोग्राम: तीन संख्याओं में से अधिकतम खोजें

    इस ट्यूटोरियल में, हम एक प्रोग्राम लिखेंगे जो तीन आंकड़ों में से अधिकतम राशि ढूंढता है। हमारे पास तीन संख्याएं होंगी, और हमारा लक्ष्य उन तीन संख्याओं में से अधिकतम संख्या ढूंढना है।बेहतर समझ के लिए कुछ नमूना टेस्ट केस देखें।इनपुट: a, b, c = 2, 34, 4 आउटपुट: 34इनपुट: a, b, c = 25, 3, 12 आउटपुट: 25इनप

  1. - Python प्रोग्राम: दिए गए वर्णों का उपयोग करके संभावित शब्द प्रिंट करें

    इस ट्यूटोरियल में, हम दिए गए वर्णों के साथ सभी संभावित शब्द ढूंढने जा रहे हैं। आइए बेहतर समझ के लिए कुछ टेस्ट केस देखें।इनपुट: words = [hi, hello, bye, good] characters = [h, i, b, y, e] आउटपुट: hi byeआइए अपने लक्ष्य को प्राप्त करने के लिए नीचे दिए गए चरणों का पालन करें।एल्गोरिदम1. शब्दों और वर्णों