Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 XOR 순열 디코딩을 찾는 프로그램

<시간/>

배열 enc가 있다고 가정합니다. 첫 번째 n(홀수) 양의 정수의 순열인 배열 perm이 있습니다. 이 목록은 길이가 n-1인 배열 enc로 인코딩되어 enc[i] =perm[i] XOR perm[i+1]이 됩니다. 원래 어레이 파마를 찾아야 합니다.

따라서 입력이 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
  • 1에서 n+1 범위의 i에 대해 다음을 수행합니다.
    • x :=x XOR i
  • 결과[0] :=x
  • 1~n 범위의 i에 대해 2만큼 증가, do
    • 결과[0] :=결과[0] XOR 인코딩[i]
  • 1~n 범위의 i에 대해
    • 결과[i] :=결과[i-1] XOR enc[i-1]
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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]