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

โปรแกรมหา XOR Sum ของ Bitwise AND ทุกคู่ใน Python

ปัญหา

กำหนดอาร์เรย์ arr1, arr2 ต้องการ XOR Sum ของลิสต์ที่ประกอบด้วย arr1[i] AND arr2[j] สำหรับทุกคู่ (i, j) XOR Sum = XOR ของทุกค่าในลิสต์

ตัวอย่าง

arr1 = [5,3,4], arr2 = [2,6]

Pairs: [5&2, 5&6, 3&2, 3&6, 4&2, 4&6] = [0,4,2,2,0,4]

XOR Sum = 0⊕4⊕2⊕2⊕0⊕4 = 0

ข้อสังเกตสำคัญ (Bitwise Property)

XOR Sum ของ (a_i AND b_j) ทุกคู่ = (XOR ของ arr1 ทั้งหมด) AND (XOR ของ arr2 ทั้งหมด)

พิสูจน์: พิจารณาแต่ละบิตแยกกัน บิต k จะเป็น 1 ในผลลัพธ์ก็ต่อเมื่อมีคู่ (i,j) คี่คู่ที่ทั้ง a_i และ b_j มีบิต k = 1 ซึ่งเทียบเท่ากับ (XOR arr1 มีบิต k=1) AND (XOR arr2 มีบิต k=1)

ตัวอย่างโค้ด

def solve(arr1, arr2):
    xor1 = 0
    xor2 = 0
    for a in arr1:
        xor1 ^= a
    for a in arr2:
        xor2 ^= a
    return xor1 & xor2

arr1 = [5,3,4]
arr2 = [2,6]
print(solve(arr1, arr2))  # 0

ความซับซ้อน

  • Time: O(n + m)
  • Space: O(1)

ดีกว่าวิธี Brute Force O(n×m) มาก