纸牌:便宜地存储有保证的胜利
Solitaire: storing guaranteed wins cheaply
给定 已知 获胜的克朗代克纸牌交易列表,是否有一种方法可以将合理数量的交易(比如 10,000+)存储在合理数量的space(比如 5MB)根据命令检索? (这些数字是任意的)
我想到了使用伪随机生成器,其中给定的种子会生成十进制数字字符串,其中每两位数字代表一张牌,索引代表交易的位置。在这种情况下,您只需存储种子和 PRG 代码。
我能想到的唯一缺点是 A) 可能的交易数量为 52!,因此可能的种子数量至少为 52!范围,和 B) 生成的数字不能重复两位数字(尽管在牌组构造中可以忽略它们)
如果您是假设性提问,我会说您至少需要 3.12 MB 才能存储 10,000 笔可能的交易。您需要 6 位来表示每张牌(假设您将它们编号为 1-52),然后您需要将它们排序为 6 * 52 = 312。将其乘以交易数量 312 * 10,000,您将得到 3,120,000 位或 3.12 MB。
在没有先验信息的情况下,表示一副有序纸牌的紧凑程度的理论限制是 226 位。即使是最简单的每张卡 6 位也只有 312 位,所以你可能不会聪明地获得太多。
如果您愿意牺牲大部分状态-space,您可以使用 32 位或 64 位 PRNG 生成套牌,然后您可以从 32 位重现它们- 或 64 位初始 PRNG 状态。但这限制了你在可能的 2^225+ 中只能使用 2^64 个不同的套牌。
给定 已知 获胜的克朗代克纸牌交易列表,是否有一种方法可以将合理数量的交易(比如 10,000+)存储在合理数量的space(比如 5MB)根据命令检索? (这些数字是任意的)
我想到了使用伪随机生成器,其中给定的种子会生成十进制数字字符串,其中每两位数字代表一张牌,索引代表交易的位置。在这种情况下,您只需存储种子和 PRG 代码。
我能想到的唯一缺点是 A) 可能的交易数量为 52!,因此可能的种子数量至少为 52!范围,和 B) 生成的数字不能重复两位数字(尽管在牌组构造中可以忽略它们)
如果您是假设性提问,我会说您至少需要 3.12 MB 才能存储 10,000 笔可能的交易。您需要 6 位来表示每张牌(假设您将它们编号为 1-52),然后您需要将它们排序为 6 * 52 = 312。将其乘以交易数量 312 * 10,000,您将得到 3,120,000 位或 3.12 MB。
在没有先验信息的情况下,表示一副有序纸牌的紧凑程度的理论限制是 226 位。即使是最简单的每张卡 6 位也只有 312 位,所以你可能不会聪明地获得太多。
如果您愿意牺牲大部分状态-space,您可以使用 32 位或 64 位 PRNG 生成套牌,然后您可以从 32 位重现它们- 或 64 位初始 PRNG 状态。但这限制了你在可能的 2^225+ 中只能使用 2^64 个不同的套牌。