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

Python में दो अलग-अलग सरणियों से बढ़ते और घटते भागों वाला सबसे लंबा बिटोनिक अनुक्रम ढूंढना


मान लीजिए हमारे पास दो सरणियाँ हैं; हमें सबसे लंबा संभव बिटोनिक अनुक्रम ढूंढना है ताकि बढ़ता हुआ भाग पहली सरणी से हो और पहली सरणी का उपअनुक्रम हो। इसी तरह घटता हुआ भाग दूसरी सरणी से होना चाहिए और दूसरी सरणी का उपअनुक्रम होना चाहिए।

तो, यदि इनपुट A = [2, 6, 3, 5, 4, 6], B = [9, 7, 5, 8, 4, 3] की तरह है, तो आउटपुट [2, 3, 4, 6, 9, 7, 5, 4, 3] होगा।

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

  • एक फ़ंक्शन index_ceiling() परिभाषित करें। यह arr, T, left, right, key लेगा

  • जब right - left > 1, करें

    • mid := left + (right - left) / 2;

    • यदि arr[T[mid]] >= key, तो

      • right := mid

    • अन्यथा,

      • left := mid

  • right वापस करें

  • एक फ़ंक्शन long_inc_seq() परिभाषित करें। यह A लेगा

  • n := A का आकार

  • tails_idx := n आकार की एक सरणी, 0 से भरें

  • prev_idx := n आकार की एक सरणी, -1 से भरें

  • length := 1

  • i के लिए 1 से n की सीमा में, करें

    • यदि A[i] < A[tails_idx[0]], तो

      • tails_idx[0] := i

    • अन्यथा जब A[i] > A[tails_idx[length - 1]], तो

      • prev_idx[i] := tails_idx[length - 1]

      • tails_idx[length] := i

      • length := length + 1

    • अन्यथा,

      • pos := index_ceiling(A, tails_idx, -1, length - 1, A[i])

      • prev_idx[i] := tails_idx[pos - 1]

      • tails_idx[pos] := i

  • i := tails_idx[length - 1]

  • जब i >= 0, करें

    • उत्तर के अंत में A[i] डालें

    • i := prev_idx[i]

  • मुख्य विधि से, निम्नलिखित करें -

  • n1 := A का आकार, n2 := B का आकार

  • long_inc_seq(A)

  • उत्तर := उत्तर उल्टा करें

  • B := B उल्टा करें

  • long_inc_seq(B)

  • उत्तर वापस करें

उदाहरण

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

answer = [] def index_ceiling(arr,T, left,right, key):     while (right - left > 1):         mid = left + (right - left) // 2;         if (arr[T[mid]] >= key):             right = mid         else:             left = mid     return right def long_inc_seq(A):     n = len(A)     tails_idx = [0]*(n)     prev_idx = [-1]*(n)     length = 1     for i in range(1, n):         if (A[i] < A[tails_idx[0]]):             tails_idx[0] = i         elif (A[i] > A[tails_idx[length - 1]]):             prev_idx[i] = tails_idx[length - 1]             tails_idx[length] = i             length += 1         else:             pos = index_ceiling(A, tails_idx, -1, length - 1, A[i])             prev_idx[i] = tails_idx[pos - 1]             tails_idx[pos] = i     i = tails_idx[length - 1]     while(i >= 0):         answer.append(A[i])         i = prev_idx[i] def long_bitonic(A,B):     n1 = len(A)     n2 = len(B)     global answer     long_inc_seq(A)     answer = answer[::-1]     B = B[::-1]     long_inc_seq(B) A = [2, 6, 3, 5, 4, 6] B = [9, 7, 5, 8, 4, 3] long_bitonic(A,B) print(answer)

इनपुट

[2, 6, 3, 5, 4, 6], [9, 7, 5, 8, 4, 3]

आउटपुट

[2, 3, 4, 6, 9, 7, 5, 4, 3]

  1. पायथन में दिए गए योग वाले पेयर्स खोजें जैसे कि पेयर एलिमेंट्स अलग-अलग BSTs में हों पायथन में दिए गए योग वाले पेयर्स खोजें जैसे कि पेयर एलिमेंट्स अलग-अलग BSTs में हों

    मान लीजिए हमारे पास दो दिए गए बाइनरी सर्च ट्री हैं और एक और योग दिया गया है; हमें दिए गए योग के संबंध में पेयर्स ढूंढने हैं ताकि प्रत्येक पेयर के एलिमेंट्स अलग-अलग BSTs में हों।तो, यदि इनपुट sum = 12 जैसा हैतो आउटपुट [(6, 6), (7, 5), (9, 3)] होगा।इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंग

  1. पायथन प्रोग्राम: दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजें पायथन प्रोग्राम: दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें दो सरणियाँ दी गई हैं, हमें दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजने की आवश्यकता है। उदाहरण # sys मॉड्यूल import sys # जोड़ी def print_(ar1, ar2, m, n, x): # अंतर diff = sys.maxsize # इंडेक्स l = 0 r = n-1

  1. - पायथन में दो से अधिक स्ट्रिंग्स से सबसे लंबी सामान्य सबस्ट्रिंग कैसे खोजें

    लॉन्गेस्ट कॉमन सबस्ट्रिंग एल्गोरिदम के सामान्य डायनामिक प्रोग्रामिंग कार्यान्वयन O(nm) समय में चलते हैं। लॉन्गेस्ट कॉमन सबस्ट्रिंग एल्गोरिदम का निम्नलिखित कार्यान्वयन है: उदाहरण longest: longest = m[x][y] x_longest = x else: m[x][y