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

Python में k सॉर्ट की गई सूचियाँ मर्ज करें

मान लीजिए हमारे पास कुछ सूचियां हैं, इन्हें क्रमबद्ध किया गया है। हमें इन सूचियों को एक सूची में मिलाना होगा। इसे हल करने के लिए, हम हीप डेटा संरचना का उपयोग करेंगे। इसलिए यदि सूचियां [1,4,5], [1,3,4], [2,6] हैं, तो अंतिम सूची [1,1,2,3,4,4,5,6] होगी। ।

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

  • एक ढेर बनाओ

  • सूचियों में प्रत्येक लिंक की गई सूची l के लिए -

    • अगर 0 में नहीं है, तो I को हीप में डालें

  • रेस:=नल और रेस_नेक्स्ट:=नल

  • एक अनंत लूप करें -

    • अस्थायी:=ढेर की न्यूनतम

    • यदि ढेर में कोई तत्व नहीं है, तो रिस वापस करें

    • अगर रेस 0 है, तो

      • रेस:=अस्थायी, रेस_नेक्स्ट:=अस्थायी

      • अस्थायी:=अस्थायी का अगला तत्व

      • यदि अस्थायी शून्य नहीं है, तो ढेर में अस्थायी डालें

      • रेस के आगे :=शून्य

    • अन्यथा -

      • res_next के आगे:=अस्थायी, अस्थायी:=अस्थायी के आगे, res_next:=res_next के आगे

      • यदि अस्थायी शून्य नहीं है, तो ढेर में अस्थायी डालें

      • res_next के आगे:=शून्य

उदाहरण

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

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')
class Heap:
   def __init__(self):
      self.arr = []
   def print_heap(self):
      res = " "
      for i in self.arr:
         res += str(i.val) + " "
      print(res)
   def getVal(self,i):
      return self.arr[i].val
   def parent(self,i):
      return (i-1)//2
   def left(self,i):
      return (2*i + 1)
   def right(self,i):
      return (2*i + 2)
   def insert(self,value):
      self.arr.append(value)
      n = len(self.arr)-1
      i = n
      while i != 0 and
self.arr[i].val<self.arr[self.parent(i)].val:
         self.arr[i],self.arr[self.parent(i)] = self.arr[self.parent(i)],self.arr[i]
         i = self.parent(i)
   def heapify(self,i):
      left = self.left(i)
      right = self.right(i)
      smallest = i
      n= len(self.arr)
      if left<n and self.getVal(left)<self.getVal(smallest): smallest = left
      if right <n and self.getVal(right)<self.getVal(smallest): smallest = right
      if smallest!=i:
         self.arr[i],self.arr[smallest] = self.arr[smallest],self.arr[i]
         self.heapify(smallest)
   def extractMin(self):
      n = len(self.arr)
      if n==0:
         return '#'
      if n== 1:
         temp =self.arr[0]
         self.arr.pop()
         return temp
      root = self.arr[0]
      self.arr[0] = self.arr[-1]
      self.arr.pop()
      self.heapify(0)
      return root
class Solution(object):
   def mergeKLists(self, lists):
      heap = Heap()
      for i in lists:
         if i:
            heap.insert(i)
      res = None
      res_next = None
      while True:
         temp = heap.extractMin()
         if temp == "#":
            return res
         if not res:
            res = temp
            res_next = temp
            temp = temp.next
            if temp:
               heap.insert(temp)
            res.next = None
      else:
         res_next.next = temp
         temp = temp.next
         res_next=res_next.next
         if temp:
            heap.insert(temp)
         res_next.next = None
ob = Solution()
lists = [[1,4,5],[1,3,4],[2,6]]
lls = []
for ll in lists:
   l = make_list(ll)
   lls.append(l)
print_list(ob.mergeKLists(lls))

इनपुट

[[1,4,5],[1,3,4],[2,6]]

आउटपुट

[1, 1, 2, 3, 4, 4, 5, 6, ]

  1. पायथन में मर्ज सॉर्ट की व्याख्या करें

    मर्ज सॉर्ट एक सॉर्टिंग तकनीक है। यह एक कुशल छँटाई एल्गोरिथ्म है जिसकी समय जटिलता (n logn .) है ) जहां n क्रमबद्ध करने के लिए सरणी की लंबाई है। मर्ज सॉर्ट एक एल्गोरिथम है जो डिवाइड एंड कॉनक्वेर्स प्रतिमान का अनुसरण करता है। यह सरणी को लगातार दो बराबर हिस्सों में विभाजित करता है। बाद में यह प्रत्येक

  1. पायथन में विरासत

    इस लेख में, हम पायथन 3.x में इनहेरिटेंस और एक्सटेंडिंग क्लासेस सीखेंगे। या पहले। वंशानुक्रम वास्तविक दुनिया के संबंधों का अच्छी तरह से प्रतिनिधित्व करता है, पुन:प्रयोज्य प्रदान करता है और पारगमन का समर्थन करता है। यह तेजी से विकास समय, आसान रखरखाव और विस्तार में आसान प्रदान करता है। वंशानुक्रम को

  1. पायथन सूचियाँ

    इस ट्यूटोरियल में हम Python Lists के बारे में सीखेंगे; सूची कैसे बनाएं, आइटम एक्सेस करें, आइटम निकालें, सूची हटाएं आदि। पायथन में, वर्गाकार कोष्ठकों का उपयोग करके सूचियों का निर्माण किया जाता है [] और सूची में प्रत्येक आइटम को अल्पविराम से अलग किया जाता है , । पायथन सूचियों में कई अलग-अलग प्रकार क