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

पायथन में शब्दकोशीय क्रम से सबसे बड़ा वैध अनुक्रम बनाने का प्रोग्राम


मान लीजिए हमारे पास एक संख्या n है, हमें एक ऐसा अनुक्रम ढूंढना है जो निम्न सभी नियमों को पूरा करे:

  • 1 अनुक्रम में एक बार आता है।

  • 2 से n तक की प्रत्येक संख्या अनुक्रम में दो बार आती है।

  • 2 से n तक की प्रत्येक i के लिए, i की दो घटनाओं के बीच की दूरी ठीक i होती है।

अनुक्रम पर दो संख्याओं a[i] और a[j] के बीच की दूरी |j - i| है। हमें शब्दकोशीय क्रम से सबसे बड़ा अनुक्रम ढूंढना है।

इसलिए, यदि इनपुट है n = 4, तो आउटपुट होगा [4, 2, 3, 2, 4, 3, 1]

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

  • एक फ़ंक्शन backtrack() परिभाषित करें। यह elems, res, start := 0 लेगा
  • यदि elems का आकार <= 0, तो
    • True वापस करें
  • यदि start >= res का आकार, तो
    • False वापस करें
  • यदि res[start] -1 के समान नहीं है, तो
    • वापस करें backtrack(elems, res, start + 1)
  • i को 0 से elems के आकार - 1 तक के लिए, करें
    • num := elems[i]
    • dist := 0 जब num 1 के समान हो अन्यथा num
    • यदि (start + dist) < res का आकार और res[start + dist] -1 के समान है, तो
      • res[start] := num
      • res[start + dist] := num
      • elems से i-वां तत्व हटाएं
      • यदि backtrack(elems, res, start) गलत है, तो
        • res[start] := -1
        • res[start + dist] := -1
        • num को elems में स्थिति i पर डालें
        • अगले पुनरावृत्ति के लिए जाएं
      • अन्यथा,
        • True वापस करें
  • मुख्य विधि से, निम्न करें
    • elems := n से 1 तक के तत्वों वाली सूची
    • res := n*2-1 आकार की सूची जिसे -1 से भरा गया हो
    • backtrack(elems, res)
    • res वापस करें

उदाहरण

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

def backtrack(elems, res, start = 0):
    if len(elems) <= 0:
        return True
    if start >= len(res):
        return False
    if res[start] != -1:
        return backtrack(elems, res, start + 1)
    for i in range(len(elems)):
        num = elems[i]
        dist = 0 if num == 1 else num
        if (start + dist) < len(res) and res[start + dist] == -1:
            res[start] = num
            res[start + dist] = num
            elems.pop(i)
            if not backtrack(elems, res, start):
                res[start] = -1
                res[start + dist] = -1
                elems.insert(i, num)
                continue
            else:
                return True

def solve(n):
    elems = [i for i in range(n,0,-1)]
    res = [-1 for i in range(n*2 - 1)]
    backtrack(elems, res)
    return res

n = 4
print(solve(n))

इनपुट

4

आउटपुट

[4, 2, 3, 2, 4, 3, 1]
  1. पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम

    मान लीजिए हमें एक ग्राफ दिया गया है और हमें उसमें सबसे बड़े क्लिक का न्यूनतम आकार ढूंढना है। एक ग्राफ का क्लिक ग्राफ का एक उपसमुच्चय है जहां हर जोड़ी शीर्ष आसन्न होती है, यानी हर जोड़ी शीर्ष के बीच एक किनारा मौजूद होता है। ग्राफ में सबसे बड़ा क्लिक ढूंढना बहुपद समय में संभव नहीं है, इसलिए छोटे ग्रा

  1. पायथन में सभी संभावित वैध पथों से अधिकतम स्कोर ज्ञात करने का प्रोग्राम पायथन में सभी संभावित वैध पथों से अधिकतम स्कोर ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास दो सरणियाँ nums1 और nums2 हैं। एक वैध पथ को इस प्रकार परिभाषित किया गया है: nums1 या nums2 को पार करने के लिए चुनें (सूचकांक-0 से)। सरणी को बाएं से दाएं पार करें। अब, यदि हम किसी ऐसे मान से गुजर रहे हैं जो nums1 और nums2 दोनों में मौजूद है, तो हम दूसरे सरणी पर पथ बदल सकते हैं।

  1. Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक ऐरे दिया गया है, हमें ऐरे के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स दृष्टिकोण का उपयोग करते हैं जिसमें हम पूरे लूप को पार करके और तत्व प्राप्त करके सबसे बड़ा तत्व निकालते हैं। हम नीच