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

โปรแกรมหาจำนวนคอลัมน์ที่พลิกเพื่อให้ได้จำนวนแถวที่เท่ากันใน Python สูงสุด?


สมมติว่าเรามีเมทริกซ์ไบนารี เราสามารถเลือกคอลัมน์จำนวนเท่าใดก็ได้ในเมทริกซ์ที่กำหนด และพลิกทุกเซลล์ในคอลัมน์นั้น การแปลงเซลล์หมายถึงการกลับค่าของเซลล์ เราต้องหาจำนวนแถวสูงสุดที่มีค่าทั้งหมดเท่ากันหลังจากการพลิกบางจำนวน ดังนั้นถ้าเมทริกซ์เป็นแบบนี้

0 0 0
0 0 1
1 1 0

ผลลัพธ์จะเป็น 2 เนื่องจากหลังจากแปลงค่าในสองคอลัมน์แรก สองแถวสุดท้ายมีค่าเท่ากัน

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

  • x :=เมทริกซ์, m :=จำนวนแถว และ n :=จำนวนคอลัมน์และ r :=0

  • สำหรับแต่ละองค์ประกอบ i ใน x

    • ค :=0

    • a :=รายการองค์ประกอบทั้งหมด l ใน i แทรก l XOR i

    • สำหรับแต่ละองค์ประกอบ j ใน x

      • ถ้า j =i หรือ j =a ให้เพิ่ม c ขึ้น 1

    • r :=สูงสุดของ c และ r

  • กลับ r

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

ตัวอย่าง

class Solution(object):
   def solve(self, matrix):
      x = matrix
      m = len(matrix)
      n = len(matrix[0] )
      r =0
      for i in x:
         c=0
         a=[l ^ 1 for l in i]
         for j in x:
            if j== i or j ==a:
               c+=1
         r=max(c, r)
      return r

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

อินพุต

[[0,0,0],
[0,0,1],
[1,1,0]]

ผลลัพธ์

2