나는이 포스트가 거의 4 살이라는 것을 알고 있지만, 나는 취미적인 암호 분석가이며 카드 암호를 연구하고있다 . 결과적으로, 나는 갑판을 무작위로 키잉하는 엔트로피의 원천으로 갑판 셔플 링을 설명하기 위해이 게시물로 계속 돌아 왔습니다. 마지막으로 나는 갑판을 손으로 섞고 각 셔플 후에 갑판 엔트로피를 추정하여 스타 키라에 의해 답을 확인하기로 결정했습니다.
갑판 엔트로피를 최대화하기위한 TL; DR :
- 리플 셔플의 경우 11-12 셔플이 필요합니다.
- 데크를 먼저 절단 한 다음 리플 셔플 링을하려면 6-7 개의 컷 앤 셔플 만 있으면됩니다.
우선, 스타 키라가 Shannon 엔트로피를 계산하기 위해 언급 한 모든 것이 정확합니다. 이런 식으로 끓일 수 있습니다.
- 덱에있는 52 장의 카드 각각에 고유 한 값을 할당합니다.
- 데크를 섞습니다.
- n = 0 ~ n = 51의 경우 (n-(n + 1) mod 52) mod 52의 각 값을 기록하십시오.
- 0, 1, 2, ..., 49, 50, 51의 발생 횟수를 센다
- 각 레코드를 52로 나누어 해당 레코드를 정규화
- i = 1에서 i = 52 인 경우 -p_i * log (p_i) / log (2)를 계산하십시오.
- 값을 합산
스타 키라가 하나의 미묘한 가정을하는 경우, 컴퓨터 프로그램에서 인간 셔플을 구현하는 데는 약간의 수하물이있을 것입니다. 종이로 된 트럼프 패를 사용하면 손에 묻은 기름이 카드로 옮겨집니다. 오일 축적으로 인해 오랜 시간이 지나면 카드가 서로 붙기 시작하여 셔플로 끝납니다. 데크가 많이 사용 될수록 두 개 이상의 인접한 카드가 서로 붙어서 더 자주 발생합니다.
또한, 두 클럽과 하트 잭이 서로 붙어 있다고 가정합니다. 셔플 링 기간 동안 서로 분리되어 분리되지 않을 수 있습니다. 이것은 컴퓨터 프로그램에서 모방 될 수 있지만, 스타 키라의 R 루틴에서는 그렇지 않습니다.
또한, 스타 키라에는 조작 변수 "mixprob"가 있습니다. 이 변수를 완전히 이해하지 못하면 약간의 블랙 박스입니다. 잘못 설정하여 결과에 영향을 줄 수 있습니다. 그래서 그의 직관이 올바른지 확인하고 싶었습니다. 그래서 손으로 확인했습니다.
나는 두 가지 다른 경우 (총 40 회의 셔플)로 손으로 갑판을 20 회 섞었다. 첫 번째 경우, 나는 오른쪽과 왼쪽 컷을 균일하게 유지하면서 리플을 섞었다. 두 번째 경우, 나는 셔플 셔플을 고르게 절단하기 전에 갑판의 중간 (1/3, 2/5, 1/4 등)에서 의도적으로 갑판을 잘라냅니다. 두 번째 사례에서 내 직감은 셔플 링하기 전에 데크를 자르고 중간에서 멀어지면 리플 셔플 링보다 데크에 빠르게 확산 될 수 있다는 것입니다.
결과는 다음과 같습니다. 첫째, 스트레이트 리플 셔플 링 :
다음은 리플 셔플 링과 결합 된 데크를 절단하는 것입니다.
스타 키라에 의한 주장의 약 1/2 시간에 엔트로피가 최대화되는 것으로 보인다. 또한, 리플 셔플 링이 데크에 더 많이 확산되기 전에 데크를 의도적으로 중간에서 멀어지게 절단하는 직관이 정확했습니다. 그러나 약 5 회의 셔플 후에는 더 이상 중요하지 않습니다. 당신은 약 6-7 셔플 후 엔트로피가 최대화되고, 주장이 내 스타 키라를 만든 10-12에 비해 최대임을 알 수 있습니다. 7 개의 셔플만으로도 충분합니까, 아니면 눈을 멀게합니까?
Google 스프레드 시트에서 내 데이터를 볼 수 있습니다 . 재생 카드를 한두 개 잘못 기록했을 수 있으므로 데이터의 100 % 정확성을 보장 할 수 없습니다.
조사 결과도 독립적으로 확인하는 것이 중요합니다. 하버드 대학교 수학과의 브래드 만 (Brad Mann)은 덱에있는 카드의 예측 가능성을 완전히 예측하기 전에 덱을 섞는 데 몇 번이나 걸리는지 연구했습니다 (샤논 엔트로피가 최대화 됨). 그의 결과는 이 33 페이지 PDF에서 찾을 수 있습니다 .
그의 발견에서 흥미로운 것은, 그는 Persi Diaconis의 1990 New York Times 기사를 실제로 독립적으로 검증 하고 있으며 , 그는 셔플 셔플을 통해 카드 덱을 완전히 혼합하기에 7 개의 셔플이 충분하다고 주장합니다.
Brad Mann은 Markov 체인을 포함하여 셔플 링에서 몇 가지 수학적 모델을 살펴보고 다음과 같은 결론을 얻습니다.
이는 n = 52의 경우 약 11.7이므로이 관점에 따르면 실제 카드 데크를 무작위 화하는 데 평균 11 또는 12 개의 셔플이 필요할 것으로 예상됩니다. 이것은 실질적으로 7보다 큽니다.
브래드만은 스타 키라의 결과를 독립적으로 확인했지만 내 것이 아닙니다. 그래서 나는 내 데이터를 자세히 살펴 보았고 왜 7 개의 셔플이 충분하지 않은지를 발견했습니다. 우선, 데크의 모든 카드에 대한 이론적 인 최대 Shannon 엔트로피는 비트 (log (52) / log (2) ~ = 5.7 비트)입니다. 그러나 내 데이터는 실제로 5 비트 이상을 절대로 나누지 않습니다. 궁금한 점은 파이썬에서 52 요소의 배열을 만들고 해당 배열을 섞었습니다.
>>> import random
>>> r = random.SystemRandom()
>>> d = [x for x in xrange(1,52)]
>>> r.shuffle(d)
>>> print d
[20, 51, 42, 44, 16, 5, 18, 27, 8, 24, 23, 13, 6, 22, 19, 45, 40, 30, 10, 15, 25, 37, 52, 34, 12, 46, 48, 3, 26, 4, 1, 38, 32, 14, 43, 7, 31, 50, 47, 41, 29, 36, 39, 49, 28, 21, 2, 33, 35, 9, 17, 11]
카드 당 엔트로피를 계산하면 약 4.8 비트가됩니다. 이 작업을 수십 번 정도 수행하면 5.2 비트와 4.6 비트 사이에서 비슷한 결과가 나타나며 평균은 4.8 ~ 4.9입니다. 따라서 내 데이터의 원시 엔트로피 값을 보는 것만으로는 충분하지 않습니다. 그렇지 않으면 5 번의 셔플을 잘 수행 할 수 있습니다.
내 데이터를 자세히 살펴보면 "제로 버킷"수가 발견되었습니다. 이들은 해당 번호의 카드 페이스 사이에 델타에 대한 데이터가없는 버킷입니다. 예를 들어, 인접한 두 카드의 값을 빼면 52 개의 델타가 모두 계산 된 후 "15"결과가 없습니다.
나는 그것이 결국 11-12 셔플 주위에 17-18 "제로 버킷"주위에 정착하는 것을 본다. 물론, 파이썬을 통한 셔플 데크는 평균 17-18 "제로 버킷"으로 21이 높고 14가 낮습니다. 17-18이 정착 된 결과 인 이유는 아직 ... 아직 설명 할 수 없습니다. 그러나 ~ 4.8 비트의 엔트로피와 17 개의 "제로 버킷"을 모두 원하는 것으로 보입니다.
내 주식 리플 셔플 링으로 11-12 셔플입니다. 컷 앤 셔플을 사용하면 6-7입니다. 따라서 게임에 관해서는 cut-and-shuffle을 권장합니다. 이렇게하면 상단 및 하단 카드가 각 셔플의 데크에 섞여 있음을 보장 할뿐만 아니라 11-12 셔플보다 평범합니다. 나는 당신에 대해 모른다. 그러나 나는 나의 가족 및 친구들과 카드 게임을 할 때, 나는 12 리플 셔플을 수행하기에 충분히 인내심이 없다.