有多少完美的潘多拉種子?
我一直在看 Gamerpuppy 的潘多拉魔盒種子。該使用者使用一個程序生成,該程序使用給定的 64 位種子快速嘗試 Java 隨機數生成器的輸出,並嘗試在輸出中找到給定數字(以卡片數量為模)的重複次數最多的程序,以及為 Neo 準備的一卷潘多拉魔盒
(1/22)
。在殺戮尖塔中,角色從以下數量的攻擊和防禦開始,並擁有以下數量的可用卡牌:
ironclad: 9 72 silent: 10 71 defect: 8 71 watcher: 8 71
我對存在“完美”潘多拉種子的可能性很感興趣:每張生成的卡片都是相同的。確切地知道將意味著暴力破解整個空間,如果沒有協作努力,這在計算上似乎是不可行的。因此,要簡化;您可以假設生成是完全隨機的,而不僅僅是 PRNG。
結果
對於Ironclad、Defect和Watcher來說,每張牌很可能都存在一個。(事實上,我相信算法已經找到了大部分的 Defect 和 Watcher 種子,並且找到了一些 Ironclad 的)。原因是在起始牌組中再添加一張牌會使種子成功的可能性降低 71 或 72 倍。
對於Silent,
22.7%
任何特定卡都有可能擁有完美的種子。下表詳細說明了至少有一顆種子的可能性、預計存在的種子數量以及您必須嘗試通過純機會找到一顆種子的數量:
+-----------+-----------------+-----------------+----------------------+ | Character | Perfect chance | Number of seeds | Trials | +-----------+-----------------+-----------------+----------------------+ | Ironclad | 0.9999999007... | 1144.8878 | 1143971351913037824 | | Silent | 0.2270808586... | 18.5458 | 71615358122217386422 | | Defect | 0.999999999999+ | 92191.0159 | 14206577687406742 | | Watcher | 0.999999999999+ | 92191.0159 | 14206577687406742 | +-----------+-----------------+-----------------+----------------------+
這意味著種子搜尋程序必須搜尋了總種子空間的很大一部分(1% 左右)才能找到它找到的所有完美種子,這顯示了 GPU 的強大功能(以及為什麼 64 位甚至 80 位密鑰現在不安全)在加密)
推理
讓我們把它分成兩部分;
- 找出所有卡片都相同並且遺物是潘多拉的機率是多少,表示為
P(same)
。- 獲取種子總數
N
。然後,將這兩個步驟與以下證明結合起來:
所有牌都不相同的機率是
1 - P(same)
通過應用逆規則。為了使這種情況發生 N 次,通過應用乘法規則 N 次將自身乘以 N。因此不存在種子的機率為
(1 - P(same))^N
。再次應用逆規則來找出至少存在一個種子的機率:P(one seed) = 1 - (1 - P(same)))^N
推論 1:倒數
1 / P(same)
是平均而言你必須嘗試找到至少一個成功的種子數量(幾何變數的期望值)。推論 2:通過將機率乘以
P(same)
種子N
數量和卡片數量C
(每張卡片是獨立的),您可以得到期望的完美種子總數。1.P(相同)
所有卡都必須是完全相同的特定卡。令 C 為可用的牌數, D 為起始牌組大小,那麼答案是(應用乘法規則):
P(same) = 1/22 * (1/C)^(D)
這會產生以下結果:
Ironclad: 1/1143971351913037824 Silent: 1/71615358122217386422 Defect: 1/14206577687406742 Watcher: 1/14206577687406742
2. 獲得 N
這只是無符號整數的數量 2^64 = 18446744073709551616,因為每個種子都是一個 64 位整數。