为什么计算机科学中的数据被认为是离散的?


35

我了解数据的“结构”完全取决于布尔代数,但是:

为什么将数据视为离散的数学实体而不是连续的数学实体?

与此相关:

在将数据构造为r维中的连续实体时,有哪些缺点或不变性受到侵犯?

我不是该领域的专家,因为我是本科数学学生,所以如果有人像我五岁时那样向我解释这一点,我将非常感激。


12
真正的计算将具有无理的功能
哈罗德(Harold)

1
如果时间允许,请仔细阅读本章。作者通过模拟信号和二进制信号
Muhammad Sayef

Answers:


44

回答

为什么数据被认为是离散的数学实体而不是连续的实体

这不是一个选择。从理论上和实践上都不可能在数字计算机或任何类型的计算中表示连续的具体值。

请注意,“离散”并不表示“整数”或类似的意思。“离散”与“连续”相反。这意味着,有一台电脑,是真正能够存储非离散的东西,你就需要能够存储两个号码a,并b在那里abs(a-b) < ε对任何任意小的数值ε。当然,您可以根据需要进行任意操作(使用越来越多的存储空间),但是每台(物理)计算机始终具有上限。无论做什么,您都永远无法制造一台(物理)计算机来存储任意精细解析的数字。

即使您能够用数学结构表示数字(例如π),也不会改变任何内容。如果存储图形或表示数学公式的任何内容,则它与其他任何内容一样离散。

附录

剩下的只是计算机科学领域以外的一些观点。正如评论所显示的那样,物理主题并非毫无争议,并且正如您所看到的,我以一种相当不信不疑的方式制定了下一段。将“连续体”的概念视为一个微不足道的动机,可以说是一种动机。上面给出的答案不取决于空间是否离散。

注意,所有这些都不是计算机的问题,而是“连续的”含义的问题。例如,并非所有人甚至过去都同意或曾经同意宇宙是连续的(例如,普朗克尺度是否暗示时空是离散的?)。对于某些事物(例如,电子的能量状态以及量子力学中的许多其他特征),我们甚至知道宇宙不是连续的。对于其他人(例如,职位...),陪审团仍未成立(至少关于研究结果的解释...)。(尽管有一个问题,即使它是连续的,我们也无法测量到任意精度=> Heisenberg等)。

在数学中,研究连续体(即实数)会带来许多引人入胜的方面,例如度量理论,这使得实际上不可能完全存储“连续”种类的数字/数据。


评论不作进一步讨论;此对话已转移至聊天
DW


8

要添加所有这些很好的答案,值得注意的是,Alan Turing在定义他的机器时认为,符号的数量必须是有限的(即使任意大),因为计算机(意思是:人)无法区分否则所有符号。

以下是他在1936年发表的论文“关于可计算数及其在Entscheidungsproblem中的应用”的摘录:

在此处输入图片说明

然后在第9节:

在此处输入图片说明 在此处输入图片说明


1
请将图像转录为可以通过搜索索引的图像。
拉斐尔

7

全部在实施中。

如果您考虑一下,计算机实际上就是连续设备。所有控制它们如何工作的EM方程都是连续的这一事实很容易表明这一点。离散的是我们用来决定如何使用这些计算设备的模型。我们用来描述计算的抽象机器都是离散的。

这样做的巨大实际优势是可以摆脱许多质量控制挑战。如果我们的计算机模型充分利用了晶体管和电容器的全部连续特性,那么我们将不得不关心我们在很大程度上构建每个晶体管的能力。我们可以在音频世界中看到这一点。在世界各地的发烧友居住的地方,在放大器上花费2000 美元是合理的,该放大器可能具有10个经过精心选择和匹配的晶体管,这些晶体管可以准确地完成他们想要的连续工作。与此形成对比的是,Core i7 CPU中有1,400,000,000个晶体管,而成本却高达 400 美元

因为我们的计算模型是离散的,所以我们可以将计算机中看到的所有信号建模为离散信号加上一些连续误差项。然后,我们可以通过观察错误的形状是否不适合作为离散信号的一部分来过滤掉错误。

其中一个主要部分是删除抽象模型中的时间项。我们的许多模型不是根据某些物理过程来衡量时间,而是根据某些称为时钟的“逻辑”信号来衡量时间。如果您中断时钟,系统将停止运行,但不会崩溃。它只是清除所有可能存在的模拟错误,并等待时钟的下一个离散脉冲。删除连续时间项可以极大地简化计算和关于计算的证明。相反,我们的时间概念是离散测量的,如算法的P和NP分类所示。


7

因为:

  • 数字计算机不能存储任意实数。

  • 模拟计算机受到热噪声(如果是电子),摩擦(如果是机械或液压),干扰,对温度变化的敏感性,不可避免的缺陷和老化的困扰。(实验性的)物理学家和工程师就是这样处理这些困难的。大多数计算机科学只是将物理学抽象化。

这是一些关于真实计算的论文:

这是关于模拟计算的论文:


4

在现代术语中,“计算机”一词是指“数字计算机”。数字计算机的本质是它具有有限数量的离散状态。人们可能会对数字计算机胜于模拟计算机的原因主要是工程实用性还是主要是由于理论计算机科学的更好支持而引起了有趣的争论。但是无论出于何种原因,数字计算机都是我们最终的目标,数字计算机的任何有用的数学模型(及其数据)都将是离散的而不是连续的。


2

这个词data源于拉丁词datum,意思是给出的东西。随着时间的流逝,复数形式已经改变了用法,现在通常以单数和复数形式使用。它也已专门与信息相关联。

请注意,信息项(基准)与其表示形式之间存在差异。

信息论处理(除其他事项外)变量代表的离散信息。这些是可数的实体。例如,速度,位置,质量等都是连续量,但彼此是离散的:质量与位置之间没有任何转换。当用数字表示这些数量时,它们的数据项(无论如何表示)也彼此离散。

另一方面,我们目前的绝大多数计算机都使用某种形式的电荷来表示信息。收费存在或不存在;电路中有电流或没有电流。这也是离散的,但不必如此!正是由于我们技术的发展方式,我们使用了二进制表示。量子计算的发展可能会在不久的将来改变这一状况。模拟计算机将再次兴起,而且我们认为数字必须用二进制表示的观念将被淘汰,这也是不可想象的!

概括地说:data由离散的信息项组成,每个信息都是一个基准;每个数据不需要使用离散数学来表示,而是目前仅由当代巧合来表示。


1
信息论也可以处理连续变量。
Yuval Filmus

1
参见例如微分熵
Yuval Filmus

2

我想挑战您的基本前提:

为什么将数据视为离散的数学实体而不是连续的数学实体?

不是。

例如,算法研究是计算机科学的重要子领域,并且有许多算法可以处理连续数据。您可能对计算两个自然数的最大公约数的欧几里得算法很熟悉,但是您知道欧几里得也具有相同算法的几何版本,该算法可以计算两条可比较线的最长公因数吗?这是一个算法(因此也是计算机科学的研究对象)基于实数(即连续数据)的一个示例,即使Euclid并不这样认为。

对算法进行分类的方法有很多,但是一种使用的方法是通过算法的“连续性”对它们进行分类:

  • 数字算法(基于数字数据的离散事件算法):
    • Euclid算法的数值变体
    • 学校所教的长手除法,乘法等
    • 任何计算机程序,λ演算程序,图灵机
  • 非数字数据,离散事件算法(关于连续数据的算法,但是仍然具有“步进”的概念,即连续数据但离散时间):
    • Euclid算法的几何变形
    • 实数算法(例如高斯消除程序)
    • 连续函数的算法(例如二等分算法)
  • 模拟算法(连续时间,连续数据):
    • 电路
    • 机械陀螺仪
  • 混合算法(以上任意组合)
    • 机器人

其他答案已经提到了可计算性理论中的“真正的计算”,这是计算机科学的另一个重要子领域。

r

唯一的实际(非常有意思的缺点)缺点是此类数据无法用普通的数字计算机表示。您可以考虑对连续数据的算法,但不能在我们通常用于运行算法的标准计算机上运行它们。

这就是连续数据不如数字数据“可见”的主要原因。

但是,模拟算法的实现实际上并不需要复杂的想象甚至构建。例如,这是一个模拟算法的实现:凯旋自行车作者:Andrew Dressel  –自己的作品,CC BY-SA 3.0链接

rqrq×rπq×π


“有很多处理连续数据的算法”-如果将这种东西称为“算法”,我们可能会进行很长的讨论,但这将是关于语义的激烈争论,所以不要这样。关键是,这些不是在计算机上运行的“算法”,而是在理论上,形式上定义的超级图灵设备上运行的算法。
拉斐尔

1
我发现自行车比喻具有误导性。计算一个功能的东西不是计算机,我们隐式地认为这些天是通用的
拉斐尔

1

为了采取更为抽象的方法,无论是在计算机上还是在您的头脑中,任何最终会产生结果的可能的计算都只能处理有限数量的数据。这意味着数据可以用一串符号表示。该字符串可以是数字的数字(“ 42”)或用于创建数据的程序的文本(对于 “ 4 * atan(1)” )。字符串必须是有限的,否则无法读取整个内容以运行程序。π

现在,所有可能的有限数据的集合都可以按字典顺序放置,这意味着该集合是可数的。但是,连续实数的集合是不可数的,因此连续体中始终存在无法由给定计算系统存储的数字。由此,我们可以得出结论,存储任意实数需要无限的资源。


1
我认为这是个问题。考虑一台计算机,该计算机从其检查的一张纸上获取输入,然后在其绘制的一张纸上提供输出。如果数据像OP所建议的那样是连续的,那么这种计算机可能只具有有限数量的数据就可以无限精确。
ruakh

@ruakh您是否在谈论类似图灵机之类的东西,例如可以在其中读取绘制的线的确切长度?
Mark H

对,就是这样。据我了解,这就是OP所要问的问题。
ruakh

0

数据并不总是被视为离散的。科学编程通常涉及浮点运算。程序员通常会假装所涉及的变量是连续的,同时要牢记数值稳定性的问题,这是由于数据仅以有限的精度存储而造成的。


12
浮点数离散的……如果程序员假装它是连续的,则意味着结果无关紧要,或者程序员不了解自己在做什么。
AnoE

2
我谨不同意。
Yuval Filmus

6
@YuvalFilmus las,因为浮点是离散的,所以无话可说。每次将东西放入普通计算机时,都会对其离散化。
Jean-BaptisteYunès17年

5
@AnoE表示结果将以一定的精度被信任,这就是Yuval所谓的“假装”。您可以获得一些可用的结果,但是您必须模糊精度。对于大集合,这是有道理的。将此与经典的力学问题进行对比:您知道测量不精确。一个3厘米的物体实际上并没有300亿〜厘米的透镜。您只是在某个合理的点降低了测量的精度。
Mindwin

6
我认为问题不在于我们的思想如何运作。我认为这与实际运作方式有关。浮点数是近似值是因为它们是离散的。即使它们确实不是连续的,您仍然认为它们是连续的,这无助于回答为什么值在计算机中是离散的问题。附带说明,您的思维方式可能很危险。程序员认为浮点数是连续的,导致了许多错误。即使是我们通常认为精确的普通数字,例如十分之一或百分之一,在浮点数中也是近似的。
JimmyJames

-2
  • 为了使计算机能够处理数据,数据必须存在于计算机的可访问内存中
  • 计算机的可访问内存是有限的
  • 计算机的可访问内存中只能存在有限的数据
  • 非离散值是无限的

计算机科学中的数据被认为是离散的。


“非离散值是无限的”是什么意思?例如,是一个无限的非重复小数,但可以通过有限的方式指定为。elimt(1+1/t)t
David Richerby '17

您指定的公式是简写形式-您无法在需要实际“答案”的任何计算中使用该公式,因此计算机无法完成有意义的“工作”。您可以编写一个小型的文本解析程序来接收和吐出非理性数字的文本表示形式,但是这些数字的“值”的实际数字表示形式无法存储在内存中-再者,我可以将“ this is infinity”写成纸,说我手里拿着所有东西。
Repomeister

1
您似乎在假设,对实数进行计算的唯一方法是产生其十进制扩展数。事实并非如此。
David Richerby

2
如果您没有实际值,那么您真的在“计算”吗?绝对。任何计算机代数软件包都始终在执行此操作。通过将实际值抽象成书面的Fourmulas,您最多可以显示实体之间的关系,而不是实体的实际值 在我看来像是实际值。如果计算结果从未解析为实际值,那只是一个近似值。嗯,所以,如果我告诉你半径2的圆的面积是,那是“近似值”,但是如果我告诉你它是50.265 ...那不是近似值吗?eiπ=116π
David Richerby

1
@Repomeister大理石的数量大概是整数,所以这不是一个有趣的例子-您不需要实数来表达它。但是计算机可以对实数进行精确的数学运算,这是Tarski的一个著名结果(由Ben-Or,Kozen和Reif在80年代改进)。特别是,如果您使用整数写出一个表达式,则比较运算符,字段运算符和变量计算机可以确定是否存在使表达式为真的实数。<,,>,,=,+,,×,÷x1,x2,,xnx1,,xn
查尔斯(Charles)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.