数学功底好的高手进!
假设一个数组 a[10,000] ,对任意的 0 <=i <10,000 有 a[i]=i;
有数组b[1,000]属于数组a[10.000],且数组b 在 数组a 中随机分布,
数组c[9,000] 由数组a 中除去数组b 中的其他元素组成。
理论上一定存在一个函数f 使得 对任意的 0 <=i <1,000 有 0 <=f(b[i]) <1,000 ,且 1,000 <=f(c[i]) <10,000。
求,这一函数的构造。
(数学函数,造表的程序方法就不讨论了)
[解决办法]
既然:
“数组b 在 数组a 中随机分布,”
怎么就“理论上一定存在一个函数f使得 对任意的 0 <=i <1,000 有 0 <=f(b[i]) <1,000 ,且 1,000 <=f(c[i]) <10,000。”?
函数f的形式应该是由数组b的元素组成决定的吧,而数组b是随机的,要找函数f的形式,就必须走访一边数组b才能构造出函数f吧?这样岂不更麻烦?
只能对事先知道元素满足特定关系的数组b,才能“用一个函数来判断任给一个n 是否在b中.”
如果数组b是随机的,判断任给一个n 是否在b中,先排序,在二分查找效率应该是很好的了。
[解决办法]
to jiangbin00cn(地方可怕):
应该是无可能的。
如果可能的话,现在的查找算法就都要被淘汰了。
因为如果真存在对随机纪录建立函数的可行性,那么查找的复杂度都是O(1)了,那些O(logn)、O(n)的算法的效率就太可怜了。