作者yauhh (喲)
看板Master_D
標題Re: [問題] XOR 運算回復
時間Thu Mar 11 02:13:41 2010
※ 引述《answer012103 ( )》之銘言:
: 假設我今天有很多筆資料,但是我因為儲存空間有限,
: 所以我想用XOR運算把他們做連結,例如
: 0000 ⊕ 0110 ⊕ 1001⊕ 1100 = 0110
: 所以我今天得到最後一筆資料為 0110
: 但是如果我想回復回去的話,變成我需要有1100才能往下回復,
: 在不使用另外的如資料庫之類的東西儲存這些資訊的話,
: 我有辦法在有限的記憶體空間達到這樣的作用嗎??
: 就是比如 在0110時會有1100這筆資訊,
: 而回復下去的話會有1001這筆資訊,以此類推,
: 請問有什麼方法嗎? 想了好久都缺少了一些東西而無法繼續回復下去,
: 感謝
也許一開始不要局限在一定要找固定空間成本的方法.
基本要做回復是把一列計算過程存起來:
[D, C, B, A]
where D = C ⊕ 1100 = 0011
C = B ⊕ 1001
B = A ⊕ 0110
A = 0000
可以改成拉指標帶到重複值的堆疊:
[D, C, B, A]
where D = (*P1, *V2 ⊕ *P2)
C = (*V2, *V1 ⊕ *P3)
B = (*V1, *P5 ⊕ *P4)
A = (*P5, null)
P1 = addr(0110) = P4
P2 = addr(1100)
P3 = addr(1001)
P4 = addr(0110)
P5 = addr(0000)
V1 = addr(0110) = P4
V2 = addr(1111)
以4位數二進位值來說,根據鴿舍原理,
當你的計算過程超過十六步驟時,至少會有二個指標指向同一份資料.
另外,儲存值和儲存指標的方法互相比較,
比較的是前者一筆資料空間與後者二筆指標空間的總和哪個比較少,
以及前者總空間數對資料數比值與後者總空間數對資料數比值的多少.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.70.222
1F:推 boeshan:專業推 03/11 12:58
2F:推 answer012103:感謝你的回答!! 03/11 14:10