9 微积分如何/何时用于计算机科学? 许多计算机科学程序需要两个或三个演算类。 我想知道,计算机科学如何以及何时使用微积分?计算机科学学位的CS内容倾向于侧重于算法,操作系统,数据结构,人工智能,软件工程等。在某些情况下,微积分在计算机科学的这些或其他领域中有用吗? 95 education mathematical-analysis
5 学习用于同一目的的不同算法/数据结构的原因是什么? 自从我是一名本科生以来,我一直在想这个问题。这是一个普遍的问题,但我将在下面详细说明。 我见过很多算法-例如,对于最大流量问题,我知道大约3种算法可以解决该问题:福特-富克森(Ford-Fulkerson),埃德蒙兹-卡普(Edmonds-Karp)和狄尼克斯(Dinic),其中狄尼克斯具有最高的复杂性。 对于数据结构(例如堆),有二进制堆,二项式堆和Fibonacci堆,其中Fibonacci堆具有最佳的整体复杂性。 让我感到困惑的是:我们有什么理由需要全部了解它们吗?为什么不学习并熟悉最好的复杂性呢? 我知道这是最好的,如果我们都了解它们,我只是想知道是否有任何“更有效的”原因,例如某些问题/算法只能通过使用A而不是B来解决,等等。 91 algorithms data-structures education didactics
5 二进制搜索树和二进制堆之间有什么区别? 两者看起来非常相似,并且结构几乎相同。有什么不同?每种不同操作的时间复杂度是多少? 91 data-structures binary-trees heaps
3 如何知道使用哪种时间复杂度分析符号? 在大多数入门算法课中,都引入了(大O)和等符号,并且学生通常会学会使用其中之一来查找时间复杂度。ΘØOOΘΘ\Theta 但是,还有其他符号,例如,和。在任何特定情况下,一种表示法要优于另一种表示法吗?ØooΩΩ\Omegaωω\omega 90 algorithms terminology asymptotics landau-notation reference-question
11 求解或近似数字序列的递归关系 在计算机科学中,我们经常必须解决递归关系,即为递归定义的数字序列找到闭合形式。在考虑运行时时,我们通常主要对序列的渐近增长感兴趣。 例子是 尾递归函数的运行时间从向下逐步降为,的身体花费时间:000nnnf(n)f(n)f(n) T(0)T(n+1)=0=T(n)+f(n)T(0)=0T(n+1)=T(n)+f(n)\qquad \begin{align} T(0) &= 0 \\ T(n+1) &= T(n) + f(n) \end{align} 的斐波那契序列: F0F1Fn+2=0=1=Fn+Fn+1F0=0F1=1Fn+2=Fn+Fn+1\qquad \begin{align} F_0 &= 0 \\ F_1 &= 1 \\ F_{n+2} &= F_n + F_{n+1} \end{align} 具有括号对的Dyck单词数:nnn C0Cn+1=1=∑i=0nCiCn−iC0=1Cn+1=∑i=0nCiCn−i\qquad\begin{align} C_0 &= 1 \\ C_{n+1}&=\sum_{i=0}^{n}C_i\,C_{n-i} \end{align} mergesort运行时重复出现在长度为列表上:nnn T(1)T(n)=T(0)=0=T(⌊n/2⌋)+T(⌈n/2⌉)+n−1T(1)=T(0)=0T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+n−1\qquad \begin{align} T(1) &= T(0) = 0 \\ T(n) … 89 asymptotics proof-techniques combinatorics recurrence-relation reference-question
5 如何证明一种语言不是上下文无关的? 我们了解了无上下文语言Ç ˚F 大号CFL\mathrm{CFL}。它具有无上下文语法和下推自动机的特征,因此很容易显示给定语言是无上下文的。 但是,如何显示相反的内容?我的助教坚称要这样做,我们必须为所有语法(或自动机)证明它们无法描述手头的语言。这似乎是一项艰巨的任务! 我读过一些抽奖式引理,但看起来确实很复杂。 88 formal-languages context-free proof-techniques reference-question
7 为什么尽管VC维度不佳,但深度学习还是大肆宣传? 神经网络的Vapnik–Chervonenkis(VC)维度公式的范围从到,在最坏的情况下为,其中是边的数量和是节点数。拥有强大泛化保证的训练样本数与VC维数成线性关系。Ô (Ë)O(E)O(E)Ô (Ë2)O(E2)O(E^2)Ô (Ë2V2)O(E2V2)O(E^2V^2)ËEEVVV 这意味着对于具有数十亿边缘的网络(如成功的深度学习模型而言),训练数据集在最佳情况下需要数十亿个训练样本,在最坏情况下需要四千万个训练样本。目前最大的训练集大约有1000亿个样本。由于没有足够的训练数据,因此深度学习模型不太可能泛化。相反,他们过度拟合了训练数据。这意味着模型在与训练数据不同的数据上将无法很好地执行,这对于机器学习来说是不希望的特性。 根据VC维度分析,鉴于深度学习无法泛化,为什么深度学习结果如此夸大?仅对某些数据集具有高精度本身并不意味着什么。深度学习架构是否有一些特别之处,可以显着降低VC维度? 如果您认为VC维度分析不相关,请提供证据/解释,表明深度学习是泛化的,并且不适合过度。即它具有良好的召回率和精度,还是仅具有良好的召回率?100%的召回率和100%的精度都是微不足道的。两者都接近100%是非常困难的。 与此相反,这里有证据表明深度学习过于适合。过拟合模型由于包含确定性/随机噪声,因此很容易被愚弄。参见下图,了解过度拟合的示例。 另外,尽管测试数据具有良好的准确性,但请查看该问题的较低答案,以了解过拟合模型的问题。 有人回应说,正则化解决了较大的VC维度的问题。请参阅此问题以进行进一步讨论。 86 machine-learning vc-dimension
2 快速排序分区:Hoare与Lomuto Cormen中提到了两种快速排序分区方法: Hoare-Partition(A, p, r) x = A[p] i = p - 1 j = r + 1 while true repeat j = j - 1 until A[j] <= x repeat i = i + 1 until A[i] >= x if i < j swap( A[i], A[j] ) else return j … 82 algorithms sorting quicksort
5 为什么某些编程语言比其他编程语言“更快”或“更慢”? 我已经注意到,某些基于编程语言(例如C ++ / Rust)构建的应用程序或算法比在同一台机器上运行的基于Java / Node.js的应用程序或算法运行得更快或更灵活。我对此有一些疑问: 为什么会这样? 是什么决定了编程语言的“速度”? 这和内存管理有关系吗? 如果有人为我解决了这个问题,我将不胜感激。 80 programming-languages compilers
12 为什么图像尺寸单位不是Pixel²? 如果计算矩形的面积,则只需将高度和宽度相乘,然后取平方的单位即可。例如:5cm * 10cm =50cm² 相反,如果您计算图像的大小,则还需要将高度和宽度相乘,但是您会获得像素单位-就像乘以之前的高度和宽度单位一样。示例:您实际计算的内容如下:3840像素* 2160像素= 8294400像素 我期望的是:3840像素* 2160像素= 8294400像素² 为什么乘以像素的单位没有平方? 79 terminology
8 图形搜索:广度优先与深度优先 搜索图时,有两种简单的算法:广度优先和深度优先(通常通过将所有邻接图节点添加到队列(广度优先)或堆栈(深度优先)来完成)。 现在,一个相对于另一个有什么优势吗? 我能想到的: 如果您希望数据在图表内很远,那么深度优先可能会更早找到它,因为您可以非常快速地进入图表的较深部分。 相反,如果您希望数据在图表中靠前很远,那么广度优先的结果可能会更早。 我有什么想念的吗?还是主要取决于个人喜好? 78 algorithms graph-theory search-algorithms graph-traversal
5 哥德尔不完备定理,停止问题和通用图灵机之间是否有具体关系? 我一直模糊地认为,对上述问题的回答在以下几方面是肯定的。哥德尔的不完备性定理和停止问题的不可判定性都是关于可判定性的负面结果,并由对角线论证(以及在1930年代)确立,因此它们在某种程度上必须是两种方式来审视同一件事。而且我以为图灵使用了通用的图灵机来表明停止问题是无法解决的。(另请参阅此math.SE问题。) 但是,现在(在学习可计算性课程方面)我更加仔细地研究了这些问题,我对发现的结果感到困惑。因此,我需要一些帮助以理顺我的想法。我意识到,一方面,哥德尔的对角线论点非常微妙:构建一个算术语句需要很多工作,该算术语句可以解释为说出它自己的可导性。另一方面,我在这里发现的停止问题的不确定性证明非常简单,甚至没有明确提到图灵机,更不用说通用图灵机了。 关于通用图灵机的一个实际问题是,通用图灵机的字母与它所模拟的图灵机的字母相同是否重要?我认为这是必要的,以便编造适当的对角线参数(让机器自己模拟),但是我在网上发现的关于通用机器的令人困惑的描述集中,并没有发现对此问题的任何关注。如果不是因为停顿问题,通用的图灵机在任何对角线论点中都有用吗? 最后,我对这进一步的部分感到困惑同一篇WP文章的另一篇文章说,哥德尔不完整的一种较弱形式来自于停顿问题:“无法实现所有关于自然数的陈述的完整,一致和合理的公理化”,其中“声音”应被削弱。我知道,如果一个理论不能得出矛盾,那么该理论是一致的,关于自然数的完整理论似乎意味着可以从中得出关于自然数的所有真实陈述。我知道哥德尔说这样的理论不存在,但是我看不到这样一个假设的野兽怎么可能听起来不对劲,即,也得出对自然数是错误的陈述:否定这样的陈述是正确的,因此从完整性上也可以导出,这会与一致性相矛盾。 我希望您能对其中之一进行澄清。 75 computability logic halting-problem incompleteness
10 如何证明一种语言不是正常语言? 我们了解了常规语言。它的特征在于正则表达式,有限自动机和左线性语法中的任何一种,因此很容易证明给定语言是正则的。ř Ë ģREG\mathrm{REG} 但是,如何显示相反的内容?我的助教坚持要做到这一点,我们必须为所有正则表达式(或所有有限自动机,或所有左线性语法)表明它们无法描述当前的语言。这似乎是一项艰巨的任务! 我读过一些抽奖式引理,但看起来确实很复杂。 这旨在成为收集常规证明方法和应用示例的参考问题。有关上下文无关语言的相同问题,请参见此处。 75 formal-languages regular-languages proof-techniques reference-question
4 哪些重要/重要的现实世界应用程序使用区块链? 作为我目前正在进行的一些与区块链相关的研究的一部分,将区块链用于各种现实世界应用程序的想法松散地提出了。 因此,我提出以下问题: 哪些重要/重要的现实世界应用程序使用区块链? 为了补充第一个问题,更确切地说,哪些实际应用程序实际上需要区块链-谁现在可能使用或可能不使用它? 从评论中,我进一步指出,这无视加密货币的概念。但是,智能合约的使用除了可以给加密货币领域带来的好处外,还可以具有其他潜在的应用程序 74 blockchain
2 “ Lambda演算”中的“ Lambda”代表什么? 我最近一直在阅读有关Lambda演算的信息,但奇怪的是我找不到为什么它被称为“ Lambda”或表达式从何而来的解释。 谁能解释这个词的由来? 73 terminology computation-models lambda-calculus history