You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于直线上点的不可数性及相关双射问题的技术咨询

关于直线上点的不可数性及相关双射问题的技术咨询

嘿,我来给你用最接地气的方式拆解这两个问题,尽量不用太晦涩的专业术语~

先搞懂:为什么稠密的可数集(比如有理数)没法和直线上的点一一对应?

首先得明确两个关键概念:可数集是指能和自然数(1,2,3,...)一一对应的集合,不可数集则是做不到这一点的无穷集。

有理数确实是稠密的——意思是随便找直线上两个不同的点,中间一定能找到有理数,但稠密≠基数大。咱们用康托尔的对角线法就能直观证明实数(直线上的点)是不可数的,而有理数是可数的,所以它们不可能有双射:

  • 假设我们能把[0,1]区间里的所有实数都列出来,每个数写成无限小数(为了避免重复,统一用不以9结尾的写法,比如把1写成1.000...而不是0.999...):

    1: 0.a₁₁a₁₂a₁₃a₁₄...
    2: 0.a₂₁a₂₂a₂₃a₂₄...
    3: 0.a₃₁a₃₂a₃₃a₃₄...
    ...

  • 现在构造一个新的实数:0.b₁b₂b₃b₄...,其中b₁≠a₁₁,b₂≠a₂₂,b₃≠a₃₃,以此类推(比如如果aₙₙ是0就取1,是1-8就取aₙₙ+1,避免取9)。
  • 这个新数肯定不在我们刚才的列表里,因为它和列表里的第n个数在第n位上不一样——这就矛盾了,说明我们一开始“能把所有实数列出来”的假设是错的,所以实数是不可数的。

而有理数是可数的(你可以把有理数按分子分母的和从小到大排列,去掉重复的,就能和自然数一一对应),一个可数集和一个不可数集之间不可能有双射,所以有理数没法对应直线上所有点。

再看:直线上的点和自然数幂集为什么有双射?

先解释下自然数的幂集:就是所有自然数的子集构成的集合,比如空集、{1}、{2,5}、所有偶数的集合等等,每个子集都是幂集里的元素。

要建立双射,核心是找到两者之间的一一对应关系:

  • 先看[0,1]区间里的实数,把它们写成二进制小数(同样避免全1结尾的情况),比如0.1010...(二进制)。每一位的0或1可以对应一个自然数的子集:如果第n位是1,就把自然数n放进这个子集;如果是0,就不放。比如0.101...对应子集{1,3,5,...}(第1、3、5位是1)。
  • 反过来,任何一个自然数的子集,也能对应一个二进制小数:比如子集{2,4},就对应二进制的0.0101000...(第2、4位是1,其他是0)。

这样我们就建立了[0,1]区间实数和自然数幂集的双射。而整个直线上的点,可以通过一个简单的映射(比如用函数f(x) = 1/(1+e^(-x))把整个实数轴映射到(0,1)区间,每个实数对应(0,1)里唯一的点,反过来也一样)和[0,1]的点双射。所以直线上的点和自然数幂集之间自然就存在双射了。

备注:内容来源于stack exchange,提问作者Max Maxman

火山引擎 最新活动