【发布时间】:2012-07-31 06:49:37
【问题描述】:
多年来我一直在考虑这个问题,但从未设法实现。我说的是一个快速、高效的 C 函数,它在输入中接受一个整数数值(例如 16 位),并在输出中给出完全不同的相同位大小的数字,但“考虑”所有数字已经给出了,虽然不是通过使用真实记忆,而是通过数学魔法。抱歉,英语不是我的母语,我的意思是函数应该随机一对一映射,但不能有任何重复。
我想象的可能的应用程序之一是像素交叉淡入淡出图形例程之一,您可以将屏幕上的旧图片逐个像素地替换为新图片。坐标应随机选择,一旦像素被替换,就不应再次寻址(无重复)。所有这一切自然而然地通过一个基于数学的小型、快速和高效的函数(使用内存很容易实现,但这不是我想要的)。
显然,“位反转”解决方案行不通,因为它看起来不是随机的。甚至交换例如第 3 位和第 11 位等.. 以创建更多“混乱”,反转一些位等.. 看起来不太好,所以我正在寻找一个纯数学的、真正随机的函数,可能能够至少 16 位,并且使用尽可能少的内存(没有预先计算的表,因为我最终使用的第一个应用程序是在微控制器系统上使用公共域硬件和软件制作老式游戏)。
你能帮忙吗?
【问题讨论】: