কম্পিউটার

আমরা পাইথনে অন্য বাক্সের মধ্যে ফিট করতে পারি এমন সর্বাধিক সংখ্যক বাক্স খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে বাক্সগুলির একটি তালিকা রয়েছে যেখানে প্রতিটি সারি প্রদত্ত বাক্সগুলির উচ্চতা এবং প্রস্থকে প্রতিনিধিত্ব করে। প্রথম বক্সটি দ্বিতীয়টির চেয়ে ছোট হলে আমরা অন্য একটি বাক্সে একটি বাক্স রাখতে পারি (যখন এটির প্রস্থ এবং উচ্চতা উভয়ই অন্য বক্সের চেয়ে ছোট), আমাদের একটি বাক্সে ফিট করা সর্বোচ্চ সংখ্যক বাক্স খুঁজে বের করতে হবে৷

সুতরাং, যদি ইনপুট মত হয়

প্রস্থ
উচ্চতা
12
12
10
10
6
6
5
10

তাহলে আউটপুট হবে 3, যেহেতু আমরা বক্সটি [6, 6] ভিতরে [10, 10] ফিট করতে পারি যা আমাদের [12, 12] বক্সে রাখা যেতে পারে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সংজ্ঞায়িত করুন insert_index()। এটি arr, this_h
  • লাগবে
  • l :=0
  • r :=arr এর আকার - 1
  • res :=0
  • যখন l <=r, do
    • m :=l +(r - l) // 2
    • cur_h :=arr[m]
    • যদি cur_h
    • res :=m
    • l :=m + 1
  • অন্যথায়,
    • r :=m - 1
  • রিটার্ন রিটার্ন + 1
  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন:
  • প্রস্থের উপর ভিত্তি করে ম্যাট্রিক্স সাজান, যদি প্রস্থ একই হয় তাহলে উচ্চতার উপর ভিত্তি করে সাজান
  • n :=ম্যাট্রিক্সে আইটেমের সংখ্যা
  • উচ্চতা :=আকারের একটি তালিকা (n + 1) এবং এটি inf দিয়ে পূরণ করুন
  • উচ্চতা[0] :=-inf
  • res :=0
  • ম্যাট্রিক্সের প্রতিটি বাক্সের জন্য, করুন
    • [cur_w, cur_h] :=বক্স
    • সূচক :=insert_index(উচ্চতা, cur_h)
    • যদি উচ্চতা[সূচক]>=cur_h, তারপর
      • উচ্চতা[সূচক] :=cur_h
    • res :=সর্বাধিক রেস এবং সূচক
  • রিটার্ন রিটার্ন
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    class Solution:
       def solve(self, matrix):
          matrix = sorted(matrix, key=lambda x: (x[0], -x[1]))
          n = len(matrix)
    
          heights = [float("inf")] * (n + 1)
          heights[0] = float("-inf")
          res = 0
    
          for box in matrix:
             cur_w, cur_h = box
             index = self.insert_index(heights, cur_h)
    
             if heights[index] >= cur_h:
                heights[index] = cur_h
             res = max(res, index)
          return res
    
       def insert_index(self, arr, this_h):
          l = 0
          r = len(arr) - 1
          res = 0
          while l <= r:
             m = l + (r - l) // 2
             cur_h = arr[m]
             if cur_h < this_h:
                res = m
                l = m + 1
             else:
                r = m - 1
          return res + 1
    
    ob = Solution()
    matrix = [
       [12, 12],
       [10, 10],
       [6, 6],
       [5, 10]
    ]
    print(ob.solve(matrix))

    ইনপুট

    matrix = [  
    [12, 12],  
    [10, 10],  
    [6, 6],  
    [5, 10] ]

    আউটপুট

    3

    1. আমরা পাইথনে একটি বার্তা ডিকোড করতে পারি এমন কয়েকটি উপায় খুঁজে বের করার প্রোগ্রাম

    2. পাইথনে সর্বোচ্চ সংখ্যক বন্ধনীর ভারসাম্যপূর্ণ গোষ্ঠী খুঁজে বের করার প্রোগ্রাম

    3. পাইথনে আমরা সর্বাধিক সংখ্যক কয়েন সংগ্রহ করতে পারি তা খুঁজে বের করার প্রোগ্রাম

    4. পাইথন প্রোগ্রাম সর্বোচ্চ তিনটি।