使用基于“种子”的数学来重新创建应用程序实例

时间:2015-02-13 04:49:37

标签: string algorithm math hash seed

好的,所以我今天想到的是 Minecraft 这么多人都非常熟悉的游戏,我确定并且我的问题与游戏没有直接关系我觉得用游戏作为例子来描述我的问题非常简单。

我的问题是,是否有任何类型的种子"或者字符串可以用来重新创建一个程序的实例(不是在文字编程意义上),通过存储一个代码,该代码在运行时作为字符串重新输入到该程序中,可以重新创建它曾经再次保存的数据,例如,在字段,文本框,画布中,就像它一样。

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

现在,如果我们可以完全复制这样的世界,那么有可能将它带入一个更抽象的概念,如下所示吗?...

假设您有一个应用程序,例如Microsoft Word。 Word将您输入的数据保存为硬盘驱动器上的文件,它保存格式化数据,您输入的字符串,文件格式......物理文件上的所有内容......现在想象一下,当您在将你的论文输入Word而不是保存它并将你的笔记本电脑带到学校而不是点击解析而不是创建一个文件,你会得到一个哈希码...现在你转到学校你知道你必须打印它。因此,您登录到计算机并打开Word ...现在而不是打开有一个选项,现在称为评估您单击它并输入您的其他计算机制定的哈希值,它会创建您写的确切文章

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

[编辑]

我必须对种子的解剖学做一些研究,我认为这很好地解释了

  

限制为32个字符或a   数字种子,19位加上减号。

     

数值种子的范围可以从-9223372036854775808到   9223372036854775807这是一个总共18446744073709551616文本   输入的字符串将是"哈希"到了其中一个数字种子   超出范围。 "世界发电机种子"窗口只允许32   要输入的字符,不会显示或使用任何字符。"

但回顾它无损压缩完全是我的意思 在重新阅读维基页面并记住之后进行描述(你 是非常正确的)种子只参与一代,最后 数据存储为"物理" HDD上的文件(同样,你是正确的)是文件中的原始未压缩数据

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

谢谢你的帮助!非常感谢我相信我们可以称之为解决了这个问题!

1 个答案:

答案 0 :(得分:0)

实现这一目标有几种可能性" string"恢复你的数据。但是,根据具体情况,它们并非全部适用。

  1. 实际种子,初始化例如peudo-random number generator,然后允许重新创建相同的伪随机数序列(see this question)。

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

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

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

    想想将word文件存储在在线服务器上的例子,然后你的密钥就是链接到你文件的URL。

  3. 将数据中的所有信息压缩到字符串中。这要困难得多,而the entropy of the data会有很大的限制。例如,请参阅Shannon's source coding theorem

    使用通常的算法(zip或7z或其他)压缩文件,而不是自己重新实现,尤其是一旦文档开始出现,你会更好(例如,更容易)事物(不同的风格,表格,图片,不寻常的人物......)

    通过27个可能的字符(26个字母和空格)的简单假设,Shannon自己在印刷英语的预测和熵中显示(贝尔系统技术期刊,30:1。1951年1月第50页-64,online version)每个字母的英文熵约为2.14位。那是用你的32个字符串编码的大约550个字符。

    虽然这明显优于我们为每个ASCII字符使用的8位,但它也表明很可能无法用英语编码文档,其大小不到四分之一 。然后你仍然需要添加标点符号,以及所有其他的大惊小怪。