使用基于 "seed" 的数学重新创建应用程序实例

Using "seed" based math to recreate application instances

好的,所以我今天在想 Minecraft 一款你们中许多人都非常熟悉的游戏,我敢肯定,虽然我的问题与游戏 我觉得以游戏为例来描述我的问题很简单。

我的问题是,有没有什么方法可以通过存储代码来使用 "seed" 类型或字符串来重新创建程序实例(不是字面编程意义上的) -在 运行 时作为字符串输入该程序,可以重新创建它曾经保存的数据,例如,在字段、文本框、画布中,完全原样。

据我了解,Minecraft 获取您输入的 ASCII 字符串,所有这些字符串都是真正的数字,并对其执行一系列操作,这些操作计算出某种类型的哈希或有限的数字...这数字(同样是我所理解的)是您输入的字符串的表示。所以这是有道理的,因为这个算法解析的字符串将始终评估为相同的哈希值。 1 + 1 将始终 = 2,因此种子值最终必须始终等于该种子值。在这样做的过程中,您可以通过输入这种在每台机器上评估相同的密钥来精确复制世界。

现在,如果我们可以像这样精确地复制世界,是否有可能将它带入一个更抽象的概念,如下所示?...

假设您有一个应用程序,例如 Microsoft Word。 Word 将您输入的数据作为文件保存在硬盘驱动器上,它包含格式化数据、您输入的字符串、文件格式……所有这些都在一个物理文件上……现在想象一下,如果当您输入您的将论文写入 Word,而不是将其保存并将笔记本电脑带到学校,而是单击 parse,而不是创建文件,而是给你一个哈希码......现在你去学校了,你知道的你必须打印它。所以你登录到计算机并打开 Word... 现在而不是打开有一个选项现在称为 evaluate 你单击它并输入你的另一台计算机制定的哈希值,它会创建准确的文章你写了。

这可能吗?如果有的话,是否有明显的实现,我根本没有想到,或者只是看似日常生活的一部分,我认为我不认识它?最后...如果可能的话,什么样的方法和算法会进入这样的事情?

[编辑]

我不得不对种子的解剖结构进行一些研究,我认为这很好地解释了它

The limit is 32 characters or for a numeric seed, 19 digits plus the minus sign.

Numeric seeds can range from -9223372036854775808 to 9223372036854775807 which is a total of 18446744073709551616 Text strings entered will be "hashed" to one of the numeric seeds in the above range. The "Seed for the World Generator" window only allows 32 characters to be entered and will not show or use any more than that."

但回想起来,无损压缩正是我曾经的样子 在重新阅读维基页面并记住之后描述(你 非常正确)种子只参与一代,最后 数据在 HDD 上存储为 "physical" 文件(同样,你是对的)是文件中的原始未压缩数据

所以现在回想起来,我相信我在描述无损压缩,试图在脑海中弄清楚种子是如何复制完全相同的世界的,忘记了种子只负责生成代码,而不负责保存或对其进行压缩。

非常感谢你们的帮助!真的很感激我相信我们可以把这个问题解决了!

有几种方法可以实现 "string" 恢复您​​的数据。然而,它们并不都适用,具体取决于上下文。

  1. 一个实际种子,它初始化了一个peudo-random number generator, then allows to recreate the same sequence of pseudo-random numbers ().

    这可能与Minecraft所依赖的类似,因为如何根据一些选择(可能是伪随机选择)创建世界的整个过程是预先知道的。即使我们假装我们有随机数,计算机实际上是确定性的,这使得这成为可能。

    如果您的文档是随机生成的,那么这将适用:使用相同的种子,相同的 gibberish comes out

  2. 一些键值字典,或者哈希映射。然后值必须可以被双方访问,字符串是允许检索值的键。

    例如将您的 word 文件存储在在线服务器上,那么您的密钥就是 URL 链接到您的文件。

  3. 将数据中的所有信息压缩到字符串中。这要难得多,并且由于 the entropy of the data. See Shannon's source coding theorem 的原因而有很大的限制。

    你最好(因为这样会更容易)只使用常用算法(zip 或 7z 或其他算法)压缩你的文件,而不是自己重新实现它,尤其是当你的文档开始时有花哨的东西(不同的风格,表格,图片,不寻常的人物......)

    基于 27 个可能字符(26 个字母和 space)的简单假设,Shannon 本人在 印刷英语的预测和熵(Bell System Technical Journal)中展示, 30: 1. January 1951 pp 50-64, online version) 英语中每个字母大约有 2.14 比特的熵。那是用 32 个字符串编码的大约 550 个字符。

    虽然这比我们为每个 ASCII 字符使用的 8 位要好得多,但它也表明很可能 不可能将英文文档编码为不到其四分之一的大小。那你还得加上标点符号,剩下的都是大惊小怪。