Pet*_*ric 5 random algorithm math numbers function
我想要一个函数的算法,它采用n个整数并返回一个整数.对于输入中的微小变化,结果整数应该有很大差异.尽管我已经学了很多数学课程,但我还没有充分利用这些知识,现在我需要一些帮助......
此函数的一个重要属性应该是,如果它与坐标对一起用作输入并且在图像上绘制结果(例如,作为灰度值),则任何重复模式应该仅在图像非常大时才可见.
我已经尝试了各种伪随机数算法,但收效甚微,最后让我觉得md5几乎符合我的标准,除了它不是数字(至少不是我所知道的).这导致类似这样的Python原型(对于n = 2,当然可以很容易地将其更改为采用整数列表):
import hashlib
def uniqnum(x, y):
return int(hashlib.md5(str(x) + ',' + str(y)).hexdigest()[-6:], 16)
Run Code Online (Sandbox Code Playgroud)
但显然,当输入和输出都是整数时,查看字符串会感觉不对.什么是这个实现的良好替代品(伪代码,python或任何语言)?
"哈希"是创建解决解决方案正是你所描述的问题.请参阅维基百科的文章
你使用的任何哈希函数都会很好; 哈希函数倾向于根据以下标准来判断:
(见完美哈希函数)
鉴于创建一个最大化所有这些标准的哈希函数是多么困难,为什么不使用最常用和依赖的现有哈希函数之一呢?
从它看来,将整数转换成字符串几乎就像是另一层加密!(这对你的目的有好处,我假设)
但是,您的问题要求专门处理数字的哈希函数,所以我们继续.
如果您想借用已有的算法,您可能需要涉及伪随机数生成器
一个简单的方法是中间方法:
即
1111 => 01234321 => 2342
Run Code Online (Sandbox Code Playgroud)
因此,在中间方法中,1111将被"哈希"到2342.
这种方式并不是那么有效,但对于少数哈希,它具有非常低的碰撞率,均匀分布和巨大的混沌潜力(小变化=>大的变化).但是,如果你有很多价值观,那么有时间寻找其他东西......
所有可行的高效且简单的随机数生成器的祖父是(Mersenne Twister)[ http://en.wikipedia.org/wiki/Mersenne_twister].事实上,对于每种可以想象的编程语言,可能都有一个实现.您的哈希"输入"在其术语中称为"种子".
结论
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |