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

পাইথনে স্কোয়ার সাব-ম্যাট্রিক্স ট্রান্সপোজ করে একটি ম্যাট্রিক্স অন্য ম্যাট্রিক্সে রূপান্তর করা সম্ভব কিনা তা যাচাই করা

মান লিজিয়ে আমাদের দুটি N X M ম্যাট্রিক্স আছে যাদের নাম mat1 এবং mat2। একটি অপারেশনে, আমরা mat1-এ যেকোনো স্কোয়ার সাব-ম্যাট্রিক্স ট্রান্সপোজ করতে পারি। আমাদের যাচাই করতে হবে দেওয়া অপারেশনগুলো করলে mat1 থেকে mat2 পাওয়া যায় কিনা।

যেমন, ইনপুট যদি:

567
123
689


562
173
689

তবে আউটপুট হবে True, কারণ mat1-এর উপরের ডানপাশের 2x2 সাইজের সাব-ম্যাট্রিক্স ট্রান্সপোজ করলে mat2 পাওয়া যাবে।

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

  • row := ম্যাট্রিক্সের রো কাউন্ট
  • column := ম্যাট্রিক্সের কলাম কাউন্ট
  • i ০ থেকে row - 1 পর্যন্ত, করুন:
    • temp1 := একটি নতুন লিস্ট, temp2 := একটি নতুন লিস্ট
    • r := i, col := 0
    • যখন r >= 0 এবং col < column, করুন:
      • mat1[r, col] temp1-এ ইনসার্ট করুন
      • mat2[r, col] temp2-এ ইনসার্ট করুন
      • r := r - 1, col := col + 1
    • temp1 এবং temp2 সর্ট করুন
    • i ০ থেকে temp1-এর সাইজ - ১ পর্যন্ত, করুন:
      • যদি temp1[i] temp2[i] সমান না হয়, তবে:
        • False রিটার্ন করুন
  • j ১ থেকে column - 1 পর্যন্ত, করুন:
    • temp1 := একটি নতুন লিস্ট, temp2 := একটি নতুন লিস্ট
    • r := row - 1, col := j
    • যখন r >= 0 এবং col < column, করুন:
      • mat1[r, col] temp1-এ ইনসার্ট করুন
      • mat2[r, col] temp2-এ ইনসার্ট করুন
      • r := r - 1, col := col + 1
    • temp1 এবং temp2 সর্ট করুন
    • i ০ থেকে temp1-এর সাইজ - ১ পর্যন্ত, করুন:
      • যদি temp1[i] temp2[i] সমান না হয়, তবে:
        • False রিটার্ন করুন
  • True রিটার্ন করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:

def solve(mat1, mat2):
    row = len(mat1)
    column = len(mat1[0])
    for i in range(row):
        temp1 = []
        temp2 = []
        r = i
        col = 0
        while r >= 0 and col < column:
            temp1.append(mat1[r][col])
            temp2.append(mat2[r][col])
            r -= 1
            col += 1
        temp1.sort()
        temp2.sort()
        for i in range(len(temp1)):
            if temp1[i] != temp2[i]:
                return False
    for j in range(1, column):
        temp1 = []
        temp2 = []
        r = row - 1
        col = j
        while r >= 0 and col < column:
            temp1.append(mat1[r][col])
            temp2.append(mat2[r][col])
            r -= 1
            col += 1
        temp1.sort()
        temp2.sort()
        for i in range(len(temp1)):
            if temp1[i] != temp2[i]:
                return False
    return True

mat1 = [
    [5, 6, 7],
    [1, 2, 3],
    [6, 8, 9]]
mat2 = [
    [5, 6, 2],
    [1, 7, 3],
    [6, 8, 9]]
print(solve(mat1, mat2))

ইনপুট

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

আউটপুট

True
  1. পাইথনে ম্যাট্রিক্সের খালি সেল N টি বেছে নেওয়ার কতভাবে আছে তা চেক করার প্রোগ্রাম

  2. পাইথনে চেক করা: একটি লিস্ট অন্য লিস্টের মধ্যে আছে কিনা (Sublist Check)

  3. পাইথনে A কি B-র সুপারক্লাস তা কীভাবে চেক করবেন?

  4. পাইথনে স্ট্রিং ফ্লোট-এ কনভার্ট করা যায় কিনা যাচাই করা