任何一组数字都可以用函数表示吗?

时间:2014-05-18 03:07:39

标签: math set theory

是否可以通过函数表达任意随机数组?

问题澄清:

例如: 如果需要,结果集= {1,2,3,4,5}

所以我的意思不是这样的:

function getSet(){
   return {1,2,3,4,5};
}

但更像是这样:

function genSet(){
   result = {}
   for(i=0;i<5;i++){
     result.push(i);
   }
   return result;
}

换句话说,是否有逻辑来计算任何所需的集合?

2 个答案:

答案 0 :(得分:1)

表示法

编程时有两种常用的表示形式。假设集合S是某些项目U的子集。

会员谓词

表示集合S的一种方法是从S到{true,false}的函数member。对于U中的所有x:

  • member(x) = true如果x在S
  • member(x) = false如果x不在S

伪代码

bool member(int n)
   return 1 <= n <= 5

枚举

表示S的另一种方法是将其所有成员存储在数据结构中,例如列表,哈希表或二叉树。

伪代码

enumerable<int> S()
    for int i = 1 to 5
        yield return i

操作

使用这些表示中的任何一个,都可以定义大多数设置操作。例如,对于两个表示中的每一个,两个集合的并集看起来如下。

会员谓词

func<int, bool> union(func<int, bool> s, func<int, bool> t)
    return x => s(x) || t(x)

枚举

enumrable<int> union(enumerable<int> s, enumerable<int> t)
    hashset<int> r
    foreach x in s
        r.add(x)
    foreach x in t
        if x not in r
            r.add(x)
    return r

比较

成员谓词表示可以是非常通用的,因为可以非常容易地表达来自数学的各种集合运算(补充,笛卡尔积等)。缺点是没有通用的方法来枚举以这种方式表示的集合的所有成员。例如,所有正实数的集合甚至无法枚举。

枚举表示通常涉及更昂贵的集合操作,并且甚至不能表示某些操作(例如整数集{1,2,3,4,5}的补集)。如果您需要能够枚举集合的成员,而不仅仅是测试成员资格,则应该选择它。

答案 1 :(得分:1)

这个问题背后有很多数学。有一些有趣的结果。

任何一组(实数)都可以通过多项式函数f(x)= a + bx + cx ^ 2 + ... 定义,这样如果f中有一个数字在集合中(X)= 0。从技术上讲,这是1D中的代数曲线。虽然这似乎是乐观的结果,但多项式的复杂程度并没有限制,5级以上的多项式没有明确的结果。

Computable numbers上有一个完整的研究领域,实数可以通过有限的终止算法在任何所需的精度内计算,并且它们相反:不可计算的数字,这不可能。坏消息是,与可计算的数字相比,有更多不可计算的数字。

以上是基于实数的,这些实数比整数或甚至是有限的整数集更加棘手,我们可以通过intlong数据类型来表示这些整数。这里有一个很大的研究领域,见Computability theory (computer science)。我认为Turings暂停问题可以发挥作用,这是关于你是否可以确定算法是否会终止。不幸的是,这不能确定,结果是&#34;并非每一组自然数都是可计算的。&#34;证明这确实需要无限大小的自然因此我不确定有限集。