【哈希算法】如何将一个整数集合与另个一整数集合间的元素用一个初等数学函数对应起来
从标题看这属于哈希算法,我对仅仅了解;现在我想把它作为一个纯数学问题讨论下:
比如,随机给出两组数据A,B
A组数据为500个随机整数(各不相同)
B组数据也为500个随机整数(各不相同)
问题,求一个初等数学函数f,使得它:
对任意的 x∈A,ヨ唯一的y∈B,使得f(x)=y;
============================
现在我把它抽象为一个数学问题:
定义1 初等运算(我自己定的):
对一个或者两个整数可以用有限的 +,*,/,%(算术运算),&,|,^,!(计算机里面的几个逻辑运算),以及有限次的复合所做的运算,我们称它为初等运算。
如x & (x/7) % x + !x (x为整数)就是一个对x做初等运算的操作
定义2 初等映射
用初等运算建立起来的映射,称为初等映射;
那么,我要问,从理论上能否证明存在一个算法:
对于任意的集合A,B(A,B元素个数相等),可以找到一个初等映射f,可以在他们的元素之间建立一个双射,即f(A)=B;
倘若能——给出这个算法;在满足要求的映射f中,如何找到运算量尽量少的映射f?
倘若不能——给出当A,B两个集合的元素在何种情况下,不能建立初等双射?
如果允许从A,B集合中去除尽量少的元素后,能不能建立初等双射?
能的话,这个“尽量少的元素”最少是多少? 与A,B集合有什么关系?
==============================================
随便给出两组数据:
2 3 9 11 19 20 27 30 31 32 47 54 55 56 57 69
-8 5 7 8 o 23 67 -2 87 100 44 31 9 13 34 19
大家可以试试找一下他们之间的初等映射; 说明一下,假定计算机逻辑运算&,|,^,!的操作数是在32位字长的机器下进行;
(大家可以打开命令提示符,用 set/a "数字&数字" 试验) f(Ai)=Bi
令f(x)=a*x^499+b*x^498+...,列方程组求解
不过在32位字长里能不能算是个问题...
话说计算机里直接用下标对应了,谁还管那个值是多少... 3# 仙剑魔
:lol
页:
[1]