计算机科学

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

1
服用mod的复杂性
这似乎是一个应该简单回答的问题,但我没有明确的答案: nnna,pa,pa, pamodpamodpa\bmod p 仅将除以将花费时间,其中是乘法的复杂度。但是可以更快地执行吗?aaappp O(M(n))O(M(n))O(M(n))M(n)M(n)M(n)modmod\bmod

1
区分决策程序vs SMT求解器vs定理证明器vs约束求解器
这些术语使我感到困惑。我认为 SAT求解器:确定命题逻辑的可满足性(使用DPLL或本地搜索)。 决策程序是确定某个可确定的一阶理论的可满足性的过程。 SMT求解器是SAT求解器+决策程序。 定理证明者表示类似动态逻辑的东西,例如KeY工具 约束求解器:我不知道。 但是我看到有人称Z3为定理证明者。因此,我不知道该如何区分这些术语。对所有这些人来说,最通用的术语是什么?谢谢。

10
是否可以为所有计算机提供通用汇编语言?
我想问一些关于汇编语言的问题。我的理解是,它与机器语言非常接近,从而使其更快,更高效。 由于我们存在不同的计算机体系结构,这是否意味着我必须在Assembly中针对不同的体系结构编写不同的代码?如果是这样,为什么汇编不写一次-到处运行类型的语言?简单地使其具有通用性,只编写一次就可以在几乎任何具有不同配置的机器上运行,难道不是一件容易的事吗?(我认为这是不可能的,但是我想提出一些具体,深入的答案) 有人可能会说C是我要寻找的语言。我以前没有使用过C,但是我认为它仍然是一种高级语言,尽管可能比Java快。我可能在这里错了。


4
为什么可计算函数也称为递归函数?
在可计算性理论中,可计算函数也称为递归函数。至少乍一看,它们与您在日常编程中所谓的“递归”(即调用自身的函数)没有任何共同之处。 在可计算性方面,递归的实际含义是什么?为什么将这些函数称为“递归”? 换句话说:“递归”的两种含义之间有什么联系?

4
垃圾收集器如何避免堆栈溢出?
因此,我在考虑垃圾收集器的工作方式,并想到了一个有趣的问题。大概垃圾收集器必须以相同的方式遍历所有结构。他们不知道正在遍历链表或平衡树之类的天气。他们也不会在搜索中消耗过多的内存。我想到遍历所有结构的一种可能方法,也是唯一的方法,可能就是像使用二叉树那样递归遍历所有结构。但是,这会在链表甚至平衡差的二叉树上产生堆栈溢出。但是我曾经使用过的所有垃圾收集语言似乎都没有问题的处理能力。 在龙书中,它使用各种“未扫描”队列。基本上,而不是递归遍历结构,它只是将需要标记的内容添加到队列中,然后针对未标记的所有内容将其删除。但是这个队列不会很大吗? 那么,垃圾收集器如何遍历任意结构?这种遍历技术如何避免溢出?

2
为什么C ++向量中的push_back会被摊销?
我正在学习C ++,注意到向量的push_back函数的运行时间是恒定的“摊销”。该文档进一步指出:“如果发生重新分配,则重新分配本身在整个大小上都是线性的。” 这不应该意味着push_back函数是,其中是向量的长度吗?毕竟,我们对最坏情况分析感兴趣,对吧?O(n)O(n)O(n)nnn 我想至关重要的是,我不知道形容词“摊销”如何改变运行时间。

8
真正的随机性是什么
我是计算机科学专业的学生,​​目前正在参加系统仿真与建模课程。它涉及处理我们周围的日常系统,并通过在不同的分布曲线(例如IID,高斯等)中生成随机数来模拟不同情况下的日常系统。我一直在从事boids项目,一个问题让我惊讶的是,“随机”到底是什么?我的意思是,例如,我们生成的每个随机数,即使是通过Math.random()Java中的方法(例如通过Java中的方法)在编程语言中,本质上都是按照“算法”生成的。 我们如何真正知道我们产生的数字序列实际上是随机的,这对我们尽可能准确地模拟某个模型有帮助吗?


2
集体支付账单问题
一张桌子有个人。第个人必须支付美元。我p 我ñnn一世iip一世pip_i 有些人没有正确的账单来支付,因此他们提出了以下算法。p一世pip_i 首先,每个人都把一些钱放在桌子上。然后,每个人都收回他们多付的钱。 钞票有固定的面额集(不是输入的一部分)。 一个例子:假设有两个人,爱丽丝和鲍勃。爱丽丝欠5 美元,有5张1 美元的钞票。鲍勃欠2 美元,有一张5 美元的钞票。爱丽丝和鲍勃把所有的钱都放在桌子上之后,鲍勃收回了 3 美元,每个人都很高兴。 当然,有时候人们不必把所有的钱都放在桌子上。例如,如果爱丽丝有上千元的1 美元钞票,那么她就不必将它们全部放到桌子上,然后再将其中的大部分拿回来。 我想找到一种具有以下属性的算法: 输入指定人数,每个人欠多少钱以及每个人拥有多少种面额的钞票。 该算法告诉每个人第一轮要把哪些钞票放在桌子上。 该算法告诉每个人第二轮要从表中删除哪些账单。 放在桌子上的钞票数+从桌子上取出的钞票数被最小化。 如果没有可行的解决方案,该算法将返回错误。

1
歌曲的聚类(乔·沃尔什问题)
老鹰乐队是70年代和80年代的摇滚超人团体,负责加利福尼亚饭店等经典活动。它们有两种非常独特的声音,一种是吉他手Joe Walsh所在的声音(例如,在Fast Lane中的Life中),另一种则是他缺席的声音。后面的歌曲明显更沉闷/无聊。 我很好奇地了解(无监督的)学习算法能够检测到两种声音之间的差异的程度。可以想象,很容易分辨出速度金属和古典音乐之间的区别,但是同一乐队的声音又如何呢? 我将如何进行这样的实验?假设我已经具有某种标准格式的相关音频文件。 请注意,这也应适用于其他摇滚乐队,例如在1980年更换主唱的AC / DC,甚至可能适用于其他流派,甚至更现代的音乐。

5
带有反射的
我在寻找一个简单的演算,支持推理反射,即内省和正在运行的程序的操作。 是否存在未类型化的微积分扩展,从而使人们可以将λ-项转换为可以在语法上进行处理然后进行评估的形式?λλ\lambdaλλ\lambda 我认为微积分有两个主要附加术语: :取 v和产生的表示 v易于进行句法操纵。reflect vreflect v\mathtt{reflect}\ vvvvvvv :对一个术语进行句法表示并对其进行评估。eval veval v\mathtt{eval}\ v 为了支持反思,需要术语的句法表示。它看起来像: 将被表示为术语(大号阿中号 - [R (ë )),其中 [R (é )是的反射版本 ë,λx.eλx.e\lambda x.e(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee 将被表示为项(A P P R (e )R (e ')),并且e e′e e′e\ e'(APP R(e) R(e′))(APP R(e) R(e′))(\mathsf{APP}\ R(e)\ R(e')) 将被表示为(V A R x )。xxx(VAR x)(VAR …

1
绳索上有相当于范·埃姆德·博阿斯的树木吗?
我认识的某个人正在计划在不久的将来实现文本编辑器,这促使我思考一下哪种类型的数据结构对于文本编辑器来说是最快的。最常用的结构显然是绳索或间隙缓冲器。 Van Emde Boas树大约是最快的优先级队列,如果您不介意可放入其中的项目数上限和较大的初始化成本。我的问题是,是否存在某些数据结构与van Emde Boas树一样快,但是支持文本编辑器操作。 我们只需要在数据结构中支持最多字符(因此,如果,则我们最多支持4GB的ASCII字符)。我们有时间来初始化新的数据结构。我们希望支持以下操作:mmmlogm=32log⁡m=32\log m = 32m−−√m\sqrt{m} 在中的位置处插入一个字符(从而将每个后续字符的位置增加1)。iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 在位置删除一个字符在。iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 在位置返回字符在。iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 因此,insert(0,'a')后接insert(0,'b')会得出“ ba”。 更好的是: 返回一个“指针”一些索引在。iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 给定一个“指针”,返回中此位置的字符。O(1)O(1)O(1) 给定一个“指针”,删除中此位置的字符。O(1)O(1)O(1) 给定“指针”,在此位置添加一个字符,然后将指针返回到以下位置。O(1)O(1)O(1) (可选)给定“指针”,将“指针”返回到的下一个/上一个字符。O(1)O(1)O(1)

1
拟阵和贪婪在算法设计中有多重要?
最初,引入拟阵来概括子集在某个地面集合的线性独立性的概念。包含此结构的某些问题允许贪婪算法找到最佳解决方案。后来引入了贪婪的概念来概括这种结构,以捕获更多的问题,以便通过贪婪的方法找到最佳的解决方案。EEEIII 这些结构在算法设计中多久出现一次? 此外,贪婪算法通常不能完全捕获找到最佳解的必要条件,但仍然可以找到非常好的近似解(例如Bin Packing)。鉴于此,有没有一种方法可以衡量问题与贪婪或类人动物有多“接近”?

3
类型系统的分类(强/弱,动态/静态)
简而言之:如何在学术环境中对类型系统进行分类;尤其是在哪里可以找到使不同类型的类型系统之间的区别清晰的信誉良好的来源? 从某种意义上说,这个问题的难点不是我找不到答案,而是我可以找到太多答案,而且没有一个能脱颖而出。背景是我正在尝试改进Has​​kell Wiki上有关输入的文章,该文章目前具有以下区别: 没有类型:语言没有类型的概念,或者从类型的角度来看:语言中只有一种类型。汇编语言只有“位模式”类型,Rexx和Tk只有“文本”类型,核心MatLab只有“复杂值矩阵”类型。 弱类型输入:只有很少的可分辨类型,可能还有几种类型的类型同义词。例如,C使用整数表示布尔值,整数,字符,位集和枚举。 强类型:细粒度的类型集,例如Ada,Wirthian语言(Pascal,Modula-2),Eiffel 这完全与我的个人看法相反,后者更像是: 弱类型输入:对象具有类型,但是在上下文需要时会隐式转换为其他类型。例如,Perl,PHP和JavaScript都是"1"可以在或多或少可以使用的任何上下文中使用的语言1。 强类型化:对象具有类型,并且没有隐式转换(尽管可以使用重载来模拟它们),因此在错误的上下文中使用对象是错误的。在Python中,用字符串或浮点数索引数组会引发TypeError异常;在Haskell中,它将在编译时失败。 我从其他比我更富有经验的人那里征求意见,有人对此进行了描述: 弱类型输入:对数据执行无效操作不会受到控制或拒绝,而只会产生无效/任意结果。 强类型:仅当数据与操作兼容时才允许对数据进行操作。 据我了解,第一个和最后一个特征将称为C弱类型,第二个将其称为强类型。第一个和第二个将Perl和PHP称为弱类型,第三个将它们称为强类型。这三个都将Python描述为强类型。 我认为大多数人会告诉我“嗯,没有共识,没有公认的条款含义”。如果这些人都错了,我很高兴听到这个消息,但如果他们是对的,那么如何做 CS的研究人员描述和比较类型的系统?我可以使用哪种问题较少的术语? 作为一个相关的问题,我觉得动态/静态区别通常是用“编译时间”和“运行时间”来表示的,考虑到是否编译语言并不是该语言的本质,我发现这并不令人满意。作为其实现。我觉得应该对动态类型和静态类型进行纯粹的语义描述。类似于“静态语言是可以在其中键入每个子表达式的语言”。我希望您能提出任何使这种概念更加清楚的想法,特别是参考文献。

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.