Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 类似于反向随机数发生器的东西_Algorithm_Montecarlo_Prng_Lossy Compression - Fatal编程技术网

Algorithm 类似于反向随机数发生器的东西

Algorithm 类似于反向随机数发生器的东西,algorithm,montecarlo,prng,lossy-compression,Algorithm,Montecarlo,Prng,Lossy Compression,我真的不知道这个问题的名字是什么,但它有点像有损压缩,我的英语不好,但我会尽量描述它 假设我有来自未知来源的未排序的唯一数字列表,长度通常在255到512之间,范围从0到512。 我想知道是否有某种算法可以读取数据并返回种子号之类的东西,我可以用它生成一个与原始列表接近但有一定程度错误的列表 比如说 原始列表 {5, 13, 25, 33, 3, 10} 重新生成的列表 {4, 10, 30, 30, 5, 5} or {8, 20, 20, 35, 5, 9} //and so on

我真的不知道这个问题的名字是什么,但它有点像有损压缩,我的英语不好,但我会尽量描述它

假设我有来自未知来源的未排序的唯一数字列表,长度通常在255到512之间,范围从0到512。
我想知道是否有某种算法可以读取数据并返回种子号之类的东西,我可以用它生成一个与原始列表接近但有一定程度错误的列表

比如说

  • 原始列表

    {5, 13, 25, 33, 3, 10}
    
  • 重新生成的列表

    {4, 10, 30, 30, 5, 5} or {8, 20, 20, 35, 5, 9} //and so on
    
这个问题有名字吗?是否有一种算法可以实现我刚才描述的功能?
它是否与蒙特卡罗方法相同,因为据我所知,它不是

有可能使用有损压缩中使用的一些技术来获得这种近似值吗


我试图解决这个问题的方法是使用一个简单的16位RNG并强制执行所有可能的值,将它们与原始列表进行比较,然后选择差异最小的一个,但我认为这种方法相当愚蠢和低效。

这确实是有损压缩

您没有告诉我们列表中的值的范围。根据您提供的样本,我们可以推断它们每个至少有6位(0到63位)。总共有0到3072位要压缩

如果这些序列没有特殊的属性并且看起来是随机的,我怀疑有没有任何方法可以实现显著的压缩。假设从32位种子匹配任意序列的概率为2^32.2^(-3072)=7.10^(-916),即小于无穷小。如果允许每个值都有10%的误差,则匹配的概率为2^32.0.1^512=4.10^(-503)

以12.5%的准确率进行压缩的一个简单方法是去掉每个值的三个LSB,从而节省50%(1536位),但我怀疑这是您想要的


将有助于测量序列的熵和/或值之间可能的相关性。这可以通过绘制所有(V,Vi+1)对或(Vi,Vi+1,Vi+2)三元组并查找模式来完成。

仍然需要更多描述来解决您的问题。我认为您想在原始列表中添加“噪波”对吗?这类似于有损压缩。您可以使用多项式近似此序列。在一个简单的例子中,这将是一个线性函数,它仅以最小距离通过所有点。使用高阶多项式可以获得更好的近似值。试图将整个数字范围压缩成单个16位数字而不造成严重损失(直至完全无法识别)可能是不可能的。我使用16位数字是因为我的方法基于暴力,想象一下255位数字这会很疯狂,但使用255位或更大的数字(当然是以位数组的形式)也可以只要速度快。