计算机科学

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

2
包含相同数量的001和100的单词的语言是否正常?
我想知道包含两个子字符串的相同数量实例的语言何时会是常规的。我知道包含相等的1和0的语言不是常规语言,而是诸如的语言,其中 =子字符串“ 001”的实例数等于“” 100英寸普通?注意,将接受字符串“ 00100”。L { w ∣ }LLLLLL{w∣{w∣\{ w \mid}}\} 我的直觉告诉我不是,但我无法证明这一点。我无法将其转换为可以通过抽运引理抽运的形式,那么我怎么证明呢?另一方面,我尝试构建DFA,NFA或正则表达式,但在这些方面也都失败了,那么我应该如何进行?我想大致了解这一点,而不仅仅是针对所建议的语言。


7
为什么负数组索引有意义?
我在C编程方面遇到了奇怪的经历。考虑以下代码: int main(){ int array1[6] = {0, 1, 2, 3, 4, 5}; int array2[6] = {6, 7, 8, 9, 10, 11}; printf("%d\n", array1[-1]); return 0; } 编译并运行此程序时,没有任何错误或警告。正如我的讲师所说,数组索引-1访问另一个变量。我仍然很困惑,为什么编程语言具有这种能力?我的意思是,为什么要允许使用负数组索引?

4
计算机科学自学
我是16岁的男性,最近被我的一个朋友赠送给计算机科学大百科全书。我通常对计算机和技术不那么感兴趣,但是计算机科学开始让我着迷。但是,我确实打算学习物理和/或数学而不是CS,所以我的问题是,进行计算机科学自学会有用吗?我当然不是在学BSc,而是CS的基础知识(这是一本约600页的百科全书)。

5
学习命题和谓词逻辑的原因
我能理解计算机科学家或任何与软件开发相关的工程师应该理解基础逻辑研究的重要性。 但是,除了需要使用任何形式的知识表示的任务之外,是否有任何任务/工作明确需要有关这些知识的知识Knowledge Base?我想听听任务的类型,而不是概念上的回应。 我问这个的原因仅仅是出于好奇。虽然CS学生必须在该主题上花费一定的时间,但一些实用性强的课程(例如AI类)完全跳过了该主题。而且我只是想知道,例如了解predicate logic可能有助于绘画,ER diagram但可能不是必需的。 更新5/27/2012)感谢您的回答。现在我想我完全理解并同意logicCS在其大量应用中的重要性。从Windows“蓝屏问题” 解决方案中获得的深刻印象中,我才真正选择了最佳答案。
14 logic 

1
用于假人的Monadic二阶逻辑
我是一个对自动机有所了解的程序员,但对逻辑并不了解。 我在论文中读到,两者之间有着密切的联系。确定性有限自动机(DFA),树自动机和可见下推自动机都与Monadic二阶逻辑(MSO)相关。尽管我了解自动机,人们(在论文中)试图向我解释与MSO的关系,但他们始终假设自己具有强大的逻辑背景和对MSO的理解。 当我阅读有关逻辑的书籍和课程时,它们大多只处理一阶逻辑,这看起来很简单,并且仅包含以下几个概念:变量,或者(并非暗示)全部存在,等等。 有人可以向我解释或指向可以解释以下内容的资源: 与一阶逻辑相比,二阶逻辑是什么? 什么是单子逻辑与非单子逻辑? 可判定二阶逻辑为什么单调很重要,或者为什么这是错误的问题? 为什么一元二阶逻辑是可确定的? 与至少DFA的关系? 如果它是一种资源,并且假设我是程序员而不是逻辑学家,那将很好。这意味着我想了解如何将其实现为代码,因为在那之前数学对我来说就像是魔力;) 谢谢您能给我的任何帮助。我真的很感激。

3
仍然可以将此算法视为二进制搜索算法吗?
在执行第二个代码kata(要求您执行五次二进制搜索算法,每次使用不同的方法)时,我提出了一个略有不同的解决方案,其工作方式如下: 如果我有一个长度为100的排序数组,并且看到它的起始字段包含数字200而其终止字段包含数字400,那么作为数学研究人员,我可能会在搜索字段35周围开始搜索编号270,而不是普通二进制搜索算法中的字段50。 然后,如果数组的字段35上的数字是270,则35是我正在搜索的索引。 如果不是这种情况,我可以比较得到的数字(例如280),并重复执行数组下部的操作(所以我有35个字段,起始字段包含200,结束字段包含280),如果我找到的数字大于我要搜索的数字,或者大于数组的上部(例如,我有260个:现在我有65个索引,第一个包含260,最后一个包含400。定向,我会转向如果我得到的数字小于我要搜索的数字,则此子数组的索引4,即整个数组的索引39)。 问题是:可以将此算法视为二进制搜索算法吗?如果没有,它有自己的名字吗?

6
n * log n和n / log n对多项式运行时间
我知道比Θ (n log n )快,但比Θ (n / log n )慢。我很难理解的是如何将Θ (n log n )和Θ (n / log n )与Θ (n f)进行比较,其中0 &lt; f &lt; 1。Θ (n )Θ(n)\Theta(n)Θ (n 对数n )Θ(nlog⁡n)\Theta(n\log n)Θ (n /对数n )Θ(n/log⁡n)\Theta(n/\log n)Θ (n 对数n )Θ(nlog⁡n)\Theta(n \log n)Θ (n /对数n )Θ(n/log⁡n)\Theta(n/\log n)Θ (nF)Θ(nf)\Theta(n^f)0 &lt; f&lt; 10&lt;f&lt;10 < f …

1
用大O表示形式的代字号是什么意思?
我正在阅读一篇论文,它在时间复杂度描述中说时间复杂度是。Ø〜(22 n)Ø〜(22ñ)\tilde{O}(2^{2n}) 我已经搜索了互联网和Wikipedia,但是找不到波浪号(big-O / Landau)表示的代字号。在论文本身中,我也没有发现任何线索。什么是什么意思?Ø〜(⋅ )Ø〜(⋅)\tilde{O}(\cdot)

1
浮点舍入
是否可以将IEEE-754浮点数&lt;1(即由随机数生成器生成,该随机数生成器生成大于等于0.0且小于1.0的数字)乘以某个整数(以浮点形式)是否等于或大于一个整数舍入该整数? 即 double r = random() ; // generates a floating point number in [0, 1) double n = some_int ; if (n * r &gt;= n) { print 'Rounding Happened' ; } 这可能等同于说是否存在N和R,使得如果R是小于1的最大数字(可以在IEEE-754中表示),则N * R&gt; = N(其中*和&gt; =是合适的IEEE- 754个运营商) 这来自于这个问题,基于此文档和PostgreSQL的随机函数

1
Kruskal和Prim是否可以达到所有MST最小生成树?
我相信这是对的,但都未能获得正式证明。但是,通过应用Kruskal算法,是否可以达到任何最小生成树?同样,Prim算法是否正确? 编辑:更准确地说,我想知道是否为一个已连接的,无向的,加权的图指定了MST,是否可以保证使用Kruskal或Prim生成该MST的步骤是连续的。例如,当多个边缘具有相同的权重时,Kruskal有不同的选择。对于Prim也是如此。

1
仅具有加法,乘法,等式的随机存取机
文献很清楚,具有原始乘法的单价RAM是不合理的,因为它们 图灵机无法在多项式时间内模拟 可以在多项式时间内解决PSPACE完全问题 但是,我可以在该主题上找到的所有参考文献(Simon 1974,Shonhage 1979)也涉及布尔运算,整数除法等。 对于仅具有加法,乘法和相等性的RAM的“合理性”是否存在任何结果?换句话说,哪些没有布尔运算,截断的整数除法,截断的减法等? 有人会认为这样的RAM仍然相当“不合理”。主要的危险信号是它们使能够在线性时间内生成指数较大的整数,并且由于乘法的卷积效应,这会变得特别复杂。但是,我实际上找不到任何表明这允许任何“不合理”结果的结果(图灵机的指数级加速,与PSPACE的不合理关系等)。 文献对此主题有什么结果吗?

2
是否可以避免合并排序中的“除法”步骤?
因此,合并排序是一种分而治之的算法。在查看上图时,我在考虑是否有可能基本上绕过所有划分步骤。 如果您在原始数组上跳两次时迭代原始数组,则可以在索引i和i + 1处获取元素,然后将它们放入自己的排序数组中。一旦拥有所有这些子数组(如图所示,[[7,14],[3,12],[9,11]和[2,6]),您就可以简单地进行常规合并例程来获取排序数组。 遍历数组并立即生成所需的子数组是否比整体执行除法步骤效率低?

3
微积分和编程语言之间有什么区别?
我对所谓的微积分和编程语言感到很困惑。 我倾向于认为并且可能已经被告知,微积分是用于推理程序等效性的正式系统。程序具有机器指定的操作语义,(我认为?)应该是确定性的。以此方式,针对语言的(正确)演算是用于程序等效的证明方法。大号LL 对我来说,这似乎是合理的划分,但这是否是普遍接受的含义?也许这是错误的? 相关的,为什么某些操作语义是不确定的(假设它们是融合的)?保持战略选择开放会带来什么好处? 我真的很感谢这些澄清。和具体参考!谢谢!

3
如果将参数添加到上下文无关文法中,将会得到什么?
我当时在考虑对倾向性敏感的语言的语法,如果将CF语法与参数结合使用,它似乎可以解决问题。例如,考虑以下片段,以类似于ANTLR的格式简化Python语法: // on top-level the statements have empty indent program : statement('')+ ; // let's consider only one compound statement and one simple statement for now statement(indent) : ifStatement(indent) | passStatement(indent) ; passStatement(indent) : indent 'pass' NEWLINE ; // statements under if must have current indent plus 4 spaces ifStatement(indent) …

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.