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

पायथन में एक सूची को दूसरी सूची में बदलने के लिए आवश्यक आसन्न स्वैप की संख्या गिनने का प्रोग्राम

दो सूचियाँ L1 और L2 दी गई हैं, दोनों की लंबाई n है और प्रत्येक में 1 से n तक के अद्वितीय मान हैं। L1 को L2 में बदलने के लिए आवश्यक न्यूनतम आसन्न स्वैप की संख्या ढूंढें।

उदाहरण

इनपुट: L1 = [0, 1, 2, 3], L2 = [2, 0, 1, 3]

आउटपुट: 2

चरण: 1 और 2 स्वैप करें → [0, 2, 1, 3], फिर 0 और 2 स्वैप करें → [2, 0, 1, 3]।

मुख्य अंतर्दृष्टि

आसन्न स्वैप की न्यूनतम संख्या = L2 के तत्वों को L1 में उनके सूचकांकों द्वारा प्रतिस्थापित करके बने क्रमपरिवर्तन का इनवर्जन काउंट (inversion count) है। लेकिन एक सरल लालची दृष्टिकोण काम करता है:

  1. L2 के प्रत्येक तत्व req के लिए (बाएं से दाएं):
    • L1 में req का सूचकांक i ढूंढें।
    • L1 से i-वें तत्व को हटाएं (यह अनुकरण करता है कि हम इसे सामने लाने के लिए i आसन्न स्वैप करते हैं)।
    • ans += i।

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

class Solution:
    def solve(self, L1, L2):
        ans = 0
        for req in L2:
            i = L1.index(req)  # सूचकांक ढूंढें
            L1.pop(i)          # हटाएं
            ans += i           # स्वैप जोड़ें
        return ans

# परीक्षण
ob = Solution()
L1 = [0, 1, 2, 3]
L2 = [2, 0, 1, 3]
print(ob.solve(L1, L2))  # 2

समय जटिलता

  • O(n²) क्योंकि list.index() और list.pop(i) दोनों O(n) हैं।
  • बड़े n के लिए, फेनविक ट्री (BIT) का उपयोग करके इनवर्जन काउंट O(n log n) में निकालें।

फेनविक ट्री अनुकूलन (संक्षिप्त)


def min_swaps_fenwick(L1, L2):
    pos = {val: i for i, val in enumerate(L1)}
    perm = [pos[val] for val in L2]
    # perm का इनवर्जन काउंट गिनें BIT से
    # ...
  1. - पायथन में संभावित विनम्र मैट्रिक्स की संख्या गिनने का प्रोग्राम

    मान लीजिए हमारे पास दो मान n और m हैं। हमें क्रम n x m के विनम्र मैट्रिक्स की संभावित व्यवस्थाओं की संख्या खोजनी है। एक मैट्रिक्स को विनम्र कहा जाता है जब:इसमें 1 से n x m तक का प्रत्येक तत्व ठीक एक बार होता हैकिसी भी दो इंडेक्स जोड़े (i1, j1) और (i2, j2) के लिए, यदि (i1 + j1) < (i2 + j2), तो Mat

  1. - Python प्रोग्राम - स्ट्रिंग में विशिष्ट सबस्ट्रिंग की संख्या गिनें

    एक स्ट्रिंग s दी गई है, हमें s के विशिष्ट गैर-खाली सबस्ट्रिंग की संख्या खोजनी है। उदाहरण इनपुट: s = abaa आउटपुट: 8 व्याख्या: सबस्ट्रिंग हैं [a, b, ab, ba, aa, aba, baa, abaa]। एल्गोरिदम (ट्राई/प्रीफिक्स ट्री) trie := {} (खाली डिक्शनरी) n := len(s) i 0 से n-1 तक: curr := trie j i से n-1

  1. पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमारे पास x नामक एक और संख्या भी है। हमें nums से उन सभी नंबरों को फ़िल्टर करके ढूंढना है जो x से कम हैं। पायथन में filter() मेथड होता है जो फंक्शन को आर्गुमेंट के रूप में लेता है और इस फंक्शन का उपयोग करके फ़िल्टर करता है। तो, यदि इनपुट nums = [1,5