কম্পিউটার টিউটোরিয়াল

পাইথনে ম্যাট্রিক্স কলাম ফ্লিপ করে টার্গেট ম্যাট্রিক্সে রূপান্তরের ন্যূনতম অপারেশন খুঁজে বের করার প্রোগ্রাম


মনে করুন M এবং T একই সারি ও কলামের দুটি ম্যাট্রিক্স। একটি অপারেশন: একটি কলাম ফ্লিপ করলে সেটির সব ১ হয় ০, ০ হয় ১। সারি রি-অর্ডার ফ্রি। M কে T-তে রূপান্তরের ন্যূনতম অপারেশন খুঁজে বের করতে হবে। সমাধান না থাকলে -1।

ইনপুট ম্যাট্রিক্স এবং টার্গেট ম্যাট্রিক্সের টেবিল দেওয়া আছে, আউটপুট ১।

সমাধানের ধাপসমূহ

  • nums1, nums2 := নতুন তালিকা
  • প্রতিটি row matrix-এ, বাইনারি থেকে ডেসিমেল কনভার্ট করে nums1-এ যোগ করুন
  • প্রতিটি row target-এ, একইভাবে nums2-এ যোগ করুন
  • ret := infinity
  • প্রতিটি num nums1-এ,
    • cts := nums1-এ ভিন্ন উপাদানların ফ্রিকোয়েন্সি ম্যাপ
    • cts[num]--
    • my_xor := num XOR nums2[0]
    • i = 1 থেকে nums2 আকার পর্যন্ত,
      • needed := my_xor XOR nums2[i]
      • যদি cts[needed] == 0, ব্রেক করুন
      • cts[needed]--
    • ret = min(ret, my_xor-এ সেট বিট সংখ্যা)
  • ret ফেরত দিন যদি ret != infinity, অন্যথায় -1

উদাহরণ

class Solution:
    def solve(self, matrix, target):
        nums1 = []
        nums2 = []
        for row in matrix:
            ths = 0
            while row:
                ths = (ths<<1) + row.pop()
            nums1.append(ths)
        for row in target:
            ths = 0
            while row:
                ths = (ths<<1) + row.pop()
            nums2.append(ths)
        ret=float('inf')
        from collections import Counter
        for num in nums1:
            cts = Counter(nums1)
            cts[num] -= 1
            my_xor = num^nums2[0]
            for i in range(1,len(nums2)):
                needed = my_xor^nums2[i]
                if not cts[needed]:
                    break
                cts[needed]-=1
            else:
                ret=min(ret,bin(my_xor).count('1'))
        return ret if ret!=float('inf') else -1

ob = Solution()
M = [[0, 0],[1, 0],[1, 1]]
T = [[0, 1],[1, 0],[1, 1]]
print(ob.solve(M,T))

ইনপুট

M = [[0, 0],[1, 0],[1, 1]] T = [[0, 1],[1, 0],[1, 1]]

আউটপুট

1
  1. পাইথনে শিকারী না থাকা প্রাণীদের ন্যূনতম সংখ্যা গণনা করার প্রোগ্রাম

  2. পাইথনে স্ট্রিং প্যালিনড্রোম বানাতে ন্যূনতম ক্যারেক্টার ইনসার্ট করার প্রোগ্রাম

  3. পাইথনে একটি সংখ্যাকে অন্য সংখ্যায় রূপান্তর করার ন্যূনতম অপারেশন বের করার প্রোগ্রাম

  4. পাইথনে স্ট্রিং s-কে পরিবর্তন করে t কে সাবস্ট্রিং बनानेয় ন্যূনতম অপারেশন বের করার প্রোগ্রাম