在 Python 中查詢解碼 XOR 置換的程式


假設我們有一個數組 enc。有一個數組 perm 是前 n(奇數) 個正整數的排列。此列表將被編碼到長度為 n-1 的陣列 enc 中,其中 enc[i] = perm[i] XOR perm[i+1]。我們必須找到原始陣列 perm。

因此,如果輸入類似 enc = [2,5,6,3],那麼輸出將是 [7, 5, 0, 6, 5],其中 [7 XOR 5 XOR 0 XOR 6 XOR 5] = [2, 5, 6, 3]

為解決此問題,我們將遵循以下步驟 −

  • n := enc 的大小
  • result := 一個大小為 (n+1) 的陣列,並用 0 填充
  • x := 0
  • i 的範圍從 1 到 n+1,執行
    • x := x XOR i
  • result[0] := x
  • i 的範圍從 1 到 n,增加 2,執行
    • result[0] := result[0] XOR enc[i]
  • i 的範圍從 1 到 n,執行
    • result[i] := result[i-1] XOR enc[i-1]
  • 返回 result

示例

讓我們看以下實現以獲得更好的理解 −

def solve(enc):
   n = len(enc)
   result = [0] * (n+1)
   x = 0
   for i in range(1, n+2):
      x ^= i
   result[0] = x
   for i in range(1, n+1, 2):
      result[0] ^= enc[i]
   for i in range(1, n+1):
      result[i] = result[i-1] ^ enc[i-1]
   return result

enc = [2,5,6,3]
print(solve(enc))

輸入

[2,5,6,3]

輸出

[7, 5, 0, 6, 5]

更新於: 07-Oct-2021

172 次瀏覽

開啟你的 職業生涯

完成課程認證

開始
廣告
© . All rights reserved.