Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าเมทริกซ์ A สามารถแปลงเป็น B ได้โดยการเปลี่ยนพาริตีขององค์ประกอบมุมของเมทริกซ์ย่อยใดๆ ใน Python


สมมติว่าเรามีเมทริกซ์ไบนารี N X M สองตัว A และ B ในการดำเนินการเดียว เราสามารถเลือกเมทริกซ์ย่อย (อย่างน้อย 2x2) และแปลงความเท่าเทียมกันขององค์ประกอบมุม (flip bits) สุดท้ายเราต้องตรวจสอบว่าเมทริกซ์ A สามารถแปลงเป็น B ได้หรือไม่ด้วยการดำเนินการจำนวนเท่าใดก็ได้

ดังนั้นหากอินพุตเป็นแบบ

1 0 0
1 0 1
1 0 0


ตรวจสอบว่าเมทริกซ์ A สามารถแปลงเป็น B ได้โดยการเปลี่ยนพาริตีขององค์ประกอบมุมของเมทริกซ์ย่อยใดๆ ใน Python

จากนั้นผลลัพธ์จะเป็น True เนื่องจากเราสามารถดำเนินการกับเมทริกซ์ย่อยสี่เหลี่ยมด้านซ้ายบนของขนาด (2x2) บน mat1 เพื่อรับ mat2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • row :=จำนวนแถวของ mat1
  • column :=จำนวนคอลัมน์ของ mat1
  • สำหรับฉันในช่วง 1 ถึงแถว - 1 ทำ
    • สำหรับ j ในช่วง 1 ถึงคอลัมน์ - 1 ทำ
      • ถ้า mat1[i, j] ไม่เหมือนกับ mat2[i, j] แล้ว
        • mat1[i, j] :=mat1[i, j] XOR 1
        • mat1[0, 0] :=mat1[0, 0] XOR 1
        • mat1[0, j] :=mat1[0, j] XOR 1
        • mat1[i, 0] :=mat1[i, 0] XOR 1
  • สำหรับฉันในช่วง 0 ถึงแถว - 1 ทำ
    • สำหรับ j ในช่วง 0 ถึงคอลัมน์ - 1 ทำ
      • ถ้า mat1[i, j] ไม่เหมือนกับ mat2[i, j] แล้ว
        • คืนค่าเท็จ
  • คืนค่า True

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def dissolve(mat1, mat2):row =len(mat1) column =len(mat1[0]) for i in range(1, row):for j in range(1, column):if mat1[i] ][j] !=mat2[i][j]:mat1[i][j] ^=1 mat1[0][0] ^=1 mat1[0][j] ^=1 mat1[i][0 ] ^=1 สำหรับฉันในช่วง (แถว):สำหรับ j ในช่วง (คอลัมน์):ถ้า mat1[i][j] !=mat2[i][j]:ส่งคืนค่าเท็จ Truemat1 =[ [1, 0, 0 ], [1, 0, 1], [1, 0, 0]]mat2 =[ [0, 1, 0], [0, 1, 1], [1, 0, 0]]พิมพ์(แก้ไข(mat1 , mat2))

อินพุต

<ก่อนหน้า>[ [1, 0, 0], [1, 0, 1], [1, 0, 0]],[ [0, 1, 0], [0, 1, 1], [1, 0 , 0]]

ผลลัพธ์

จริง