2010-11-29 3 views
6

내가 사용하는 경우 다음과 같은, 내가 궁금했는데 등 통계 수학,과 큰 아니에요 더 독특한? 또한, 이와 같은 일을 할 때 (생일 문제 상황과 같은) 부정적인 의미가 있습니까? 이것은 무식하게 들릴지 모르지만, 나는 단순히 수학 대수학 2를 잘 알고 있지 않습니다.수학 문제는

+0

고유성은 연속체입니까? "더 독특한"은 의미가 무엇인지 이해할 수있을 때도 항상 혼란 스럽습니다. –

+0

@Fred -'uuid4'는 충돌을 발생시키지 않는다고 보장하지 않습니다. 만약 그렇다면, 나는 이것을하는 것에 대해 걱정하지 않을 것입니다. – orokusaki

답변

18

uuid4 기능은 16 난수 바이트에서 만든 UUID를 반환 참조 그것은 입니다 매우 당신은 아마 그것에 대해 걱정하지해야하는 점에 충돌을 생산할 가능성.

어떤 이유로 uuid4에 대한 생산 않는 경우가 그러한 제대로 정품 불운보다 난수 생성기를 초기화 실패로 훨씬 더 프로그래밍 오류 일 가능성이 중복. 어떤 경우에는 사용하는 접근 방식이 이 아닌이 될 것입니다. 잘못 초기화 된 난수 생성기는 접근 방식에도 불구하고 여전히 중복을 생성 할 수 있습니다.

기본 구현 random.seed(None)을 사용하는 경우 source에서 난수 생성기를 초기화하는 데 16 바이트의 임의성 만 사용되므로이 문제는 먼저 해결해야 할 문제입니다. 또한 OS가 임의성의 소스를 제공하지 않으면 시스템 시간이 전혀 사용되지 않습니다.

그러나 이러한 실질적인 문제를 무시하고 기본적으로 올바른 줄을 따라 가고 있습니다. 수학적 접근법을 사용하려면 먼저 "독창성"이 의미하는 것을 정의해야합니다. 합리적인 정의는 중복을 생성 할 확률이 약간의 확률을 초과하기 전에 생성해야하는 ID의 수라고 생각합니다. p. 이에 대한 approcimate 공식은 다음과 같습니다 d이 하나의 임의로 생성 된 UUID에 대한 2**(16*8)하고 제안 된 접근 방식 2**(16*2*8)입니다

alt text

. 수식의 제곱근은 실제로 Birthday Paradox 때문입니다. 그러나 만약 당신이 그것을 밖으로 작동한다면 값 d을 유지하면서 p을 일정하게 유지한다면 사각형도 n이 될 것입니다.

+0

난수 생성기를 올바르지 않게 초기화하면 걱정할 필요가 없으며 충돌이 거의 발생하지 않습니다. –

+0

이해가 안됩니다. 파이썬이 난수 생성기를 잘못 초기화하는 것에 대해 언급하고 있습니까? 'uuid4'는 난수 생성기를 제공 할 필요가 없습니다. 내가 놓친 게 있니? – orokusaki

+2

@orokusaki : 난수 생성기를 초기화하지 않으면 기본 동작이 사용되며 이는 시스템 시간을 시드로 사용할 수 있음을 의미 할 수 있습니다. 시스템 시간은 전혀 무작위가 아닙니다. 두 개의 서로 다른 컴퓨터가 동일한 "임의의"숫자를 생성합니다. 다음을보십시오 : http://docs.python.org/library/random.html#random.seed –

-1

이것은 난수 생성기에 따라 다르지만 거의 제곱의 독창성을 갖습니다.

+0

다른 UUID를 사용하지 않아도 PRNG의 기간을 줄이지 않습니까? 귀하의 독창성은 중복 임의의 nubmers을하는 데 걸리는 시간을 줄이면 제곱되지 않습니다. – bot403

+0

@ bot403 - 우주는 무한 8D (내 음영을 체크 아웃) – orokusaki

+0

@ bot403입니다. 예, 당신은 기간을 줄이지 만, 중요한지 여부에 따라 PRNG의 엔트로피의 양에 따라 달라집니다. –