计算机科学

为学生,研究人员和计算机科学从业者提供的问答

2
经二分模型在O(n)中是否可以进行整数排序?
据我所知,不存在可以解决以下问题的最坏情况算法:O (n )O(n)O(n) 给定长度为的序列,该序列由有限整数组成,请找到每个元素小于或等于其后继元素的排列。ñnn 但是在跨二分法的计算模型中是否存在不存在的证据? 请注意,我并没有限制整数的范围。我也不将解决方案限制为比较排序。

2
一字长的一元语言的规则性为两个或两个。三个正方形
我考虑一元语言,其中是所有单词的集合,其长度是平方的总和。形式上: 很容易证明是不规则的(例如,使用Pumping-Lemma)。 此外,我们知道每个自然数都是四个平方的和,这意味着对于所有语言都是规则的,因为。大号ķ ķ 大号ķ = { 一个Ñ | Ñ = ķ Σ我= 1 Ñ 我 2,LkLkL_kLkLkL_kkkk大号1 = { 一个Ñ 2 | Ñ ∈ Ñ 0 } ķ ≥ 4 大号ķ 大号ķ = 大号(一*)Lk={an∣n=∑i=1kni2,ni∈N0(1≤i≤k)}Lk={an∣n=∑i=1kni2,ni∈N0(1≤i≤k)}L_k=\{a^n\mid n=\sum_{i=1}^k {n_i}^2,\;\;n_i\in\mathbb{N_0}\;(1\le i\le k)\} L1={an2∣n∈N0}L1={an2∣n∈N0}L_1=\{a^{n^2}\mid n\in\mathbb{N_0}\}k≥4k≥4k\ge 4LkLkL_kLk=L(a∗)Lk=L(a∗)L_k=L(a^*) 现在,我对和的情况感兴趣:k = 3k=2k=2k=2k=3k=3k=3 L2={an12+n22∣n1,n2∈N0}L2={an12+n22∣n1,n2∈N0}L_2=\{a^{{n_1}^2+{n_2}^2}\mid n_1,n_2\in\mathbb{N_0}\},。L3={an12+n22+n32∣n1,n2,n3∈N0}L3={an12+n22+n32∣n1,n2,n3∈N0}L_3=\{a^{{n_1}^2+{n_2}^2+{n_3}^2}\mid n_1,n_2,n_3\in\mathbb{N_0}\} 不幸的是,我无法显示这种语言是否正常(即使借助勒让德的三平方定理或费马定理的两个平方之和)。 我很确定至少不是规则的,但不幸的是这并不是证明。有什么帮助吗?L2L2L_2

4
为什么将二进制搜索称为二进制搜索?
我听到了几种可能的解释,所以我希望得到一些值得信赖的参考。 更新05.19:我对这个问题感兴趣,因为我的一位学生在论文中写道,该名称来自以下解释(1)。到目前为止,我认为/听说过它来自解释(2)。我既不愿在论文中提出错误的观点,又告诉他如果可能是正确的话,则将其删除,这将令我感到不快。 (1)考虑在区间搜索整数。我们可以通过找到它在步骤发问的二进制数的位数。Ñ 我我吨ħ[ 0 ,2n − 1][0,2n−1][0,2^{n-1}]ñnn一世ii一世Ť ^ hithi^{th} (2)如果我们有一个搜索空间元素,我们可以通过在多次分开的空间的剩余部分问题找到一个未知元素2。2ñ2n2^n 是的,我知道(2)可以提供与(1)相同的算法,但这不是重点。(2)也可以适用于更一般的问题。

2
什么是马尔可夫链?
我目前正在阅读一些有关马尔可夫链集总的文章,但我看不到马尔可夫链与普通有向加权图之间的区别。 例如,在文章“ 马尔可夫链中的最佳状态空间集总”中,它们提供了CTMC(连续时间马尔可夫链)的以下定义: 我们通过转换率矩阵考虑状态空间为的有限CTMC, 其转换速率矩阵为 。(S,Q)(S,Q)(\mathcal{S}, Q)S={x1,x2,…,xn}S={x1,x2,…,xn}\mathcal{S} = \{x_1, x_2, \ldots, x_n\}Q:S×S→R+Q:S×S→R+Q: \mathcal{S} \times \mathcal{S} \to \mathbb{R}^+ 他们根本没有提到马尔可夫特性,实际上,如果边缘的权重代表概率,那么我相信马尔可夫特性微不足道,因为该概率仅取决于链的当前状态,而不取决于导致链的路径。对它。 在关于集总性的关系属性的另一篇文章中,马尔可夫链的定义类似: 马尔可夫链将表示为三元组 ,其中是的有限状态集,是表示从一种状态到另一种状态的概率的转移概率矩阵,而是代表系统在特定状态下启动的可能性的初始概率分布。MMM(S,P,π)(S,P,π)(S, P, \pi)SSSMMMPPPππ\pi 同样,没有提及过去或未来或独立。 第三篇论文《简单O(m logn)时间马尔可夫链集总法》中,他们不仅从未声明边缘的权重是概率,而且甚至说: 在许多应用中,值是非负的。但是,我们不做这个假设,因为在某些应用中故意将选择为,这通常使其为负数。W(s,s′)W(s,s′)W(s, s')W(s,s)W(s,s)W(s, s)−W(s,S∖{s})−W(s,S∖{s})-W(s, S \setminus \{s\}) 而且,有人指出,集总应该是减少状态数量同时保持Markov属性的一种方法(通过将“等效”状态聚合为更大的状态)。但是,对我来说,这似乎只是在简单地对概率求和,甚至不保证从聚合状态到聚合状态的跃迁的概率在范围内。那么,集总实际上保留了什么?[0,1][0,1][0,1] 因此,我看到两种可能性: 我不明白什么是马尔可夫链,或者 在这些论文中使用术语马尔可夫链是伪造的 有人可以澄清情况吗? 看起来确实有不同的社区在使用该术语,它们的含义千差万别。从我认为的这3篇文章看来,马尔可夫特性显得微不足道或毫无用处,而在另一类论文中,它看起来却很基础。

2
对于尚未完全完成的计算模型,是否有“可计算”的明确定义?
这是这里另一个问题的跟进,我希望它不要太哲学。正如Raphael在对我的上一个问题的评论中指出的那样,我并没有真正理解“可计算”的定义,但是根据我读过的一些论文,当涉及到比图灵弱的计算模型时,该定义也不是很清楚。机器,因为输入和输出的编码。 图灵可计算的典型定义如下: 定义1:函数称为图灵可计算函数,前提是有一台图灵机M使用自然数的适当编码作为字符串来计算f。F:Nķ→ Nf:Nk→Nf : \mathbb{N}^k \to \mathbb{N}中号MMFff 定义的确切区别在于确切的编码是什么,但是大多数将二进制编码,一元编码或十进制编码称为固定和合适的编码。还可能显示出,为定义可计算性需要固定一种编码。但是,是什么使自然数的二进制编码如此特殊,以便我们可以将其公理化为一种合适的编码呢?可能是因为它符合可计算性巧合的直观概念。 现在,如果我们看比图灵机更弱的计算模型怎么办?例如,让我们考虑集合 “残废”图灵机与字母表{ 0 ,1 }这可能只向右移动,和的定义残废图灵可计算这与图灵可计算性是一致的:中号CMcM_c{ 0 ,1 }{0,1}\{0,1\} 定义2:一函数称为残废图灵可计算或可计算中号Ç当且仅当有一个残缺图灵机中号,其计算˚F使用自然数作为字符串的一个合适的编码。F:Nķ→ Nf:Nk→Nf : \mathbb{N}^k \to \mathbb{N}中号CMcM_c中号MMfff 如果我们定义“合适的编码”为“二进制编码”,则该函数是不可计算中号Ç。如果将“合适的编码”公理化为“一元编码”,则f可在M c中计算。考虑到每个人都可以随意修复无限多种直观编码之一的事实,这似乎很尴尬。应该清楚的是,计算模型是否可以计算ff:N→N,n↦n+1f:N→N,n↦n+1f : \mathbb{N} \to \mathbb{N}, n \mapsto n+1McMcM_cfff McMcM_cfff 还是不提及某些特定的编码-至少我从未见过有人提到“循环程序比图灵机弱”时使用什么编码。 引言之后,我终于可以提出我的问题:如何为与直观的可计算性概念不一致的任意计算模型定义“合适的编码”和“可计算性” ?在可计算性框架内是否有可能? 编辑:我简化了介绍,但没有增加问题。

1
静态类型检查过于保守的无人为例是什么?
在程序设计语言的概念,约翰米切尔写道,静态类型检查是必要的保守(过于严格的),因为停机问题。他举了一个例子: if (complicated-expression-that-could-run-forever) then (expression-with-type-error) else (expression-with-type-error) 有人可以提供一个确实会引起实际关注的非故意答案吗? 我了解到Java允许针对以下情况进行动态检查的类型转换: if (foo instanceof Person) { Person p = (Person) foo; : } 但我认为这是Java语言/编译器缺陷的必要,而不是跨语言问题。

1
regexp何时不是正则表达式?
自从我学习我的正式语言大学课程,我偶然发现了这些迷人的职位(一 两),它描述了如何使用一个找到一个素数的正则表达式。正如我所说的,是regexp而不是正则表达式。由于正则表达式可以匹配有限状态自动机计算的字符串,而FSA不能找到素数,因此博客文章中显示的regexp并不完全是正则表达式,因为它会回溯以匹配字符串。 由于我从未真正使用过任何正则表达式,因此,我的问题是: 我如何仅通过查看就可以从“真正的”正则表达式中立即识别出一个正则表达式? 定义:通过正则表达式,我指的是形式语言中定义的概念。regexp是指现代编程语言支持的概念。regexp语法通常包含其他功能,例如反向引用。在编程语言中看到的正则表达式严格比形式语言样式的正则表达式更强大。

2
向高中理科老师讲解SAT
我是一名对计算机科学感兴趣的高二学生。我为#SAT开发了一个很酷的算法,并且正在实施和进行一个科学展览项目。我的顾问是我学校最好的科学老师,也是AP Comp Sci老师,她告诉我,她完全不知道我的项目是什么,我需要简要向她解释为什么#SAT是在5分钟内很重要。我告诉她SAT简化为#SAT,并试图解释SAT为什么重要的原因:我给了她一些NP问题的例子,解释了她NP中的问题如何归结为SAT,并解释了如何通过二分搜索将某些优化问题归结为SAT ,它使您可以折叠蛋白质并建立强大的AI模型。不幸的是,她根本不了解我。你能给我一些建议吗? PS我的顾问问我,哪些有用的问题减少到#SAT,哪些没有减少到SAT(假设#P中的某些问题比相应的NP版本难一些)。我所能想到的就是找到给定数据集比给定模型更好的模型(假设模型的每个参数小于给定位数)。我在网上寻找其他人,但找不到任何我能理解的东西。还有其他好的应用程序吗?

4
元素唯一性可以在确定的线性时间内解决吗?
考虑以下问题: 输入:列出整数的X,YX,ÿX,Y 目标:确定两个列表中是否都存在整数。XXx 假设两个列表的大小均为n。是否存在确定性的线性时间算法来解决此问题?换句话说,您可以在不使用随机性的情况下确定地在O (n )时间内解决此问题吗?X,YX,ÿX,YññnO (n )Ø(ñ)O(n) 不幸的是,您不能假定列表元素都很小。 我可以看到如何使用随机算法在预期时间内求解它:随机选择一个2通用哈希函数h,将X的元素存储到哈希表中(使用h作为哈希函数),然后查找Y的每个元素以查看其是否在哈希表中。预期的运行时间为O (n )。但是,我看不到如何找到运行时间为O (n )的确定性算法。如果您尝试对此进行非随机化并修复单个特定的哈希函数,则将存在最坏情况的输入,导致此过程在O (n )Ø(ñ)O(n)HHhXXXHHhÿÿYO (n )Ø(ñ)O(n)O (n )Ø(ñ)O(n)时间。我能找到的最好的确定性算法涉及对值进行排序,但这不是线性时间。我们可以达到线性运行时间吗?Θ (n2)Θ(ñ2)\Theta(n^2) 另外,如果您假设所有列表元素都是范围内的整数(基本上,进行计数排序),我可以看到如何在线性时间内解决它-但我对一般情况会感兴趣我们无法假设的情况。[ 1 ,n ][1个,ñ][1,n] 如果答案取决于计算模型,那么您会想到RAM模型,但对于任何合理的计算模型,我都会对结果感兴趣。我知道用于元素唯一性的决策树算法的下界,但这不是确定的,因为有时即使在Ω (n log n )界中也可以找到线性时间算法决策树模型。Ω (n 对数n )Ω(ñ日志⁡ñ)\Omega(n \log n) Ω (n 对数n )Ω(ñ日志⁡ñ)\Omega(n \log n)

4
尽快找到五个小整数中的最大两个
我在小型嵌入式系统上对图像数据使用5交叉中值滤波器,即 x x x x x 该算法非常简单:读取5个无符号整数值,获得最大的2个值,对这些值进行一些计算,然后写回无符号整数结果。 好的是5个整数输入值都在0-20的范围内。计算出的整数值也在0-20范围内! 通过分析,我发现获得最大的两个数字是瓶颈,因此我想加快这一步。什么是执行此选择最快的方法? 当前算法使用由5个数字指定的位置中的1位的32位掩码和HW支持的CLZ函数。 我应该说CPU是专有的,在我公司之外无法使用。我的编译器是GCC,但为此CPU量身定制。 我试图弄清楚是否可以使用查找表,但未能生成可以使用的密钥。 我有输入组合,但顺序并不重要,即与相同。21521521^5[5,0,0,0,5][5,5,0,0,0] 碰巧下面的哈希函数会产生完美的哈希而不会发生冲突! def hash(x): h = 0 for i in x: h = 33*h+i return h 但是散列是巨大的,并且根本没有足够的内存来使用它。 我可以使用更好的算法吗?是否可以使用查找表并生成密钥来解决我的问题?

3
为什么键盘回声会涉及CPU?
我目前正在学习计算机科学考试,并且遇到了一个让我有些困惑的概念。 当您在键盘上键入一个键时,一个ASCII字符将被发送到CPU。接收到此字符后,CPU将相同的字符输出到屏幕。此过程称为回声。为什么不让CPU参与其中,为什么我们不简单地在键盘/屏幕单元内完成此回显过程,以便CPU可以自由地做其他有用的工作? 现在,凭直觉,我觉得这是因为没有定义的键盘/屏幕单元,而CPU是负责通过互连网络在屏幕和键盘之间进行通信的设备。但是,我感觉提到键盘/屏幕单元这一事实可能意味着我错过了一个重要的概念。是这样吗 为什么我们将CPU包含在回声过程中?

2
模拟计算机与教会图灵理论
我想引用Nielsen&Chuang的《量子计算和量子信息》,十周年纪念版,第5页(重点是我的文章): 强大的Church-Turing论文面临的一类挑战来自模拟计算领域。自图灵以来的许多年中,许多不同的研究人员团队注意到,某些类型的模拟计算机可以有效地解决人们认为在图灵机上没有有效解决方案的问题。乍一看,这些模拟计算机似乎违反了Church-Turing论文的强形式。不幸的是,对于模拟计算,事实证明,当对模拟计算机中存在噪声做出现实的假设时,其功率在所有已知情况下都会消失。他们无法有效解决在图灵机上无法有效解决的问题。本课(在评估计算模型的效率时必须考虑现实噪声的影响)是量子计算和量子信息的早期重大挑战之一,这一挑战是通过量子误差理论的发展而成功解决的纠错码和容错量子计算。因此,与模拟计算不同,量子计算原则上可以容忍有限量的噪声,并且仍然保留其计算优势。 这是一个说明,噪声的扩展速度要比问题大小的影响力更快,还是有人可以向我指出正确的方向,以便使我更多地了解这些扩展限制是根本的还是仅仅是“工程问题”? 需要明确的是,我要问模拟计算机是否由于噪声而无法在效率上击败图灵机。

2
任意精度整数平方根算法?
是否有已知的次二次算法来计算n位整数的平方根的下限? 天真的算法是这样的 def sqrt(x): r = 0 i = x.bit_length() // 2 while i >= 0: inc = (r << (i+1)) + (1 << (i*2)) if inc <= x: x -= inc r += 1 << i i -= 1 return r 这需要O(n)迭代,每个迭代都涉及O(n)时间的增加,因此O(n^2)总的来说是时间。有什么更快的方法吗?我知道对于乘法来说,有一些特殊的算法比二次时间要好,但是对于平方根我找不到任何东西。

2
oracle图灵机的使用如何不会导致矛盾?
当使用oracle Turing Machines时,如何确保我们继续就复杂性类做出合理而有效的声明?根据我的理解(基于该主题的入门教科书中给出的定义),oracle Turing机器可以在一个计算步骤中确定相对于oracle语言的字符串的成员身份。但是,证明经常使用的oracle语言无法在恒定时间内解决(例如,使用EXPTIME完整的oracle)。对我来说,这似乎是为矛盾“打开大门”,毕竟,矛盾产生了任何后果。

3
函数编程中的不变性真的存在吗?
尽管我在日常生活中是一名程序员,并且使用所有流行的语言(Python,Java,C等),但对于什么是函数式编程,我仍然不清楚。根据我的阅读,功能语言的一个特性是数据结构是不可变的。对我来说,这本身就引发了很多问题。但是首先,我会写一些我对不变性的理解,如果我错了,请随时纠正我。 我对不变性的理解: 程序启动时具有固定的数据结构和固定的数据 无法将新数据添加到这些结构 代码中没有变量 您只能从已经存在的数据或当前计算出的数据中“复制” 由于以上原因,不变性给程序增加了巨大的空间复杂性 我的问题: 如果数据结构应该保持不变(不可变),那么有人怎么在列表中添加新项目呢? 拥有无法获取新数据的程序有什么意义?假设您有一个连接到计算机的传感器,该传感器想将数据提供给程序。那是否意味着我们无法在任何地方存储传入的数据? 在这种情况下,函数式编程对机器学习有什么好处?由于机器学习是基于更新程序对事物的“感知”的假设而建立的,因此可以存储新数据。

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.