我正在开发数据结构,其中每个实体都应该有唯一的标识符。我正在考虑使用 64 位随机数或 Boost UUID http://www.boost.org/doc/libs/1_57_0/libs/uuid/为此。
如果我复制某些实体,我需要为拷贝生成新的 UUID(因为否则某些实体将具有重复的 UUID)。但更新 UUID 需要更新实体之间的链接。所以我正在考虑对所有 UUID 进行统一更改:在复制实体之前,我将生成一些 LoadingUUID 并使用公式更新所有 UUID:
NewEntityID = EntityID xor LoadingUUID
问题是:两个 UUID 的异或会大大增加 UUID 冲突的概率吗?
最佳答案
如果两个 UUID 具有按位相关性,那么是的,将它们异或在一起会增加冲突的可能性。
编辑:两个独立的 UUID 生成器可能没有按位相关性,但很难确定,并且在创建 UUID 生成器时这不会是任何人的设计或测试目标。如果它们没有相关性,那么我预计碰撞概率不会增加。
相比之下,单个 UUID 生成器的 UUID 结果之间可能具有按位相关性。例如。它可能会将某些位分配给时间戳。
关于c++ - 随机数或 UUID 的异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28689631/