计算机科学

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

1
产品类型的类型推断
我正在为连接语言开发编译器,并希望添加类型推断支持。我了解Hindley–Milner,但是我一直在学习类型理论,所以我不确定如何适应它。以下系统是否合理,可以推断? 术语是文字,术语的组合,术语的引用或基元。 e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots 所有术语表示功能。对于两个函数和,,即,并置表示反向组合。文字表示尼拉德功能。e 2 e 1e1e1e_1e2e2e_2e1e2=e2∘e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 除组合以外的其他术语具有基本的类型规则: x:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γx:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γ \dfrac{}{x : \iota}\text{[Lit]} \\ \dfrac{\Gamma\vdash e : \sigma}{\Gamma\vdash [e] : \forall\alpha.\:\alpha\to\sigma\times\alpha}\text{[Quot]}, \alpha \text{ not free in } \Gamma 值得注意的是缺少应用规则,因为连接语言缺少它。 类型可以是文字,类型变量,也可以是堆栈之间的函数,其中堆栈被定义为右嵌套元组。相对于“堆栈其余部分”,所有函数都是隐式多态的。 …

4
函数是否总是渐近可比的?
当我们比较两种算法的复杂度时,通常是f(n)=O(g(n))f(n)=O(g(n))f(n) = O(g(n))或g(n)=O(f(n))g(n)=O(f(n))g(n) = O(f(n))(可能两者)的情况,其中fff和ggg是两种算法的运行时间(例如)。 总是这样吗?也就是说,是否始终保持关系f(n)=O(g(n))f(n)=O(g(n))f(n) = O(g(n))和中的至少一个g(n)=O(f(n))g(n)=O(f(n))g(n) = O(f(n)),即对于通用函数fff,ggg?如果不是,我们必须做出哪些假设?(为什么)我们谈论算法的运行时间?


1
所有士兵应同时射击
当我还是一名学生时,我在数字系统/逻辑设计教科书中看到一个问题,关于N名士兵连续站立并想同时射击。问题的一个更困难的版本是士兵们站在一个通用的网络中而不是排成一排。我确定这是一个经典问题,但我不记得它的名字了。你能提醒我吗?

3
求解包含两个递归调用的递归方程
我试图为以下递归方程找到一个约束:ΘΘ\Theta T(n)=2T(n/2)+T(n/3)+2n2+5n+42T(n)=2T(n/2)+T(n/3)+2n2+5n+42 T(n) = 2 T(n/2) + T(n/3) + 2n^2+ 5n + 42 我认为,由于子问题和除法数量的不同,Master Theorem是不合适的。由于没有或T(0),因此递归树也不起作用。T (0 )T(1)T(1)T(1)T(0)T(0)T(0)

1
在树中找到从根到叶的最长路径
我有一棵树(在图论的意义上),例如以下示例: 这是一棵有向树,有一个开始节点(根)和许多结束节点(叶)。每个边都有指定的长度。 我的问题是,如何找到从根到叶的最长路径?蛮力方法是检查所有的根叶路径,并采用最大长度的路径,但是如果有的话,我更喜欢一种更高效的算法。

4
程序语言是否具有足够的延展性以允许程序扩展语言语义
关于诸如ruby(和javascript)之类的语言的功能,允许程序员在定义类后随时扩展/覆盖类(包括诸如String之类的类),从理论上讲,设计一种允许程序在以后扩展的语言是否可行?它的语义。 例如:Ruby不允许多重继承,但是我可以扩展/覆盖默认语言行为以允许多重继承的实现。 是否有其他语言允许这样做?这实际上是语言设计师关注的主题吗?在选择使用ruby构建用于Web应用程序开发的Rails框架的选择时,此类语言可能非常强大,可以允许为各种应用程序设计框架(或DSL)。

2
具有扫描线算法的圆交集
不幸的是,我对扫描线算法的理解还不是很强。关于该主题的所有论文和教科书均已阅读,但理解距离还很远。为了更清楚一点,我尝试解决尽可能多的练习。但是,真正有趣和重要的任务仍然对我构成挑战。 我在万能杰夫·埃里克森(Jeff Erickson)的《线段相交》的讲义中发现了以下练习。 练习2。描述并分析扫掠线算法,以在给定平面中的圆的情况下确定在时间内是否有两个相交。每个圆都由其中心和半径指定,因此输入由三个数组和。注意正确实现低级原语。ññnØ (ñ 日志n )Ø(ñ日志⁡ñ)O(n \log n)X[ 1 .. n ] ,Y[ 1 .. n ]X[1 ..ñ],ÿ[1 ..ñ]X[1.. n], Y [1.. n]R [ 1 .. n ][R[1 ..ñ]R[1.. n] 让我们尝试使复杂的事情变得容易。我们对圆的交点了解多少?用线的交点可以找到什么类似物。如果两条线相邻,两条线可能会相交,两条圆应该具有哪个属性才能相交?令为圆心,和圆心之间的距离。考虑几种情况:ddd[R0[R0r_{0}[R1[R1r_{1} 情况1:如果,则没有解,圆是分开的。d&gt; r0+ r1d&gt;[R0+[R1d > r_{0} + r_{1} 情况2:如果那么就没有解决方案,因为一个圆包含在另一个圆内。d&lt; |[R0- - [R1|d&lt;|[R0-[R1|d < |r_{0} - r_{1}| 情况3:如果且则圆是重合的,并且解的数量是无限的。d= 0d=0d = …

3
如何解决动态图相关问题
我在通用stackoverflow上问了这个问题,我被引导到这里。 如果有人可以解释通常如何解决部分或完全动态图问题,那将是很好的。 例如: 当在每个实例上删除一条边时,在实例的无向加权图中的两个顶点之间找到最短路径。n(u ,v )(ü,v)(u,v)ññn 当在每个实例上移除一条边等时,找到n个实例在无向图中的连接组件数。 我最近在编程竞赛中遇到了这类问题。我在网上搜索,发现了很多有关动态图的研究论文[1,2]。我读了其中的几本书,却找不到直接的东西(聚类,稀疏化等)。很抱歉含糊。 如果有人可以提供一些指针来更好地理解这些概念,我将非常感谢。 D.Eppstein,Z.Galil,GF Italiano(1999)的动态图算法 G. Nannicini,L。Liberti(2008)在动态图上的最短路径

3
日常材料的逻辑门
逻辑门是一种抽象设备,可以用电磁继电器,真空管或晶体管来实现。这些实现已在计算中取得成功,部分原因是其可链接性,耐用性和大小超出了其基本的二进制稳定性,具有各种特性。它们也很好地工作,因为电力是能源,可以很容易地运送到周围。 我见过用木材,大理石和重力建造的加法器。我看过“芯片实验室”毛细管作用驱动的原型。我见过各种专业机械计算器(Curta,计算尺)。我已经将多米诺路径视为一次性逻辑门。 我对其他说明性的计算设备感兴趣,这些计算设备不一定方便,耐用或快速,但可以利用日常材料的属性进行计算并且可以直接看到。多米诺骨牌小径很近,但是有点太复杂以至于无法重置。 磁机械布置?管道/槽中有水?更一般的大理石装置? PS。这是一个新的。 机械CPU时钟

1
确定性堆与非确定性最小堆自动机的计算能力
这是一个后续问题这一个。 在先前关于奇异状态机的问题中,亚历克斯·十·布林克和拉斐尔谈到了一种特殊的状态机的计算能力:最小堆自动机。他们能够证明此类机器()接受的语言集既不是上下文无关语言集的子集也不是其超集。鉴于已成功解决该问题并对该问题有明显的兴趣,我继续提出几个后续问题。H一个大号H一种大号HAL 众所周知,确定性和非确定性有限自动机以及确定性和非确定性图灵机具有相同的计算能力。但是,确定性下推自动机的计算能力小于非确定性下推自动机的计算能力。 确定性最小堆自动机的计算能力是否小于或等于非确定性最小堆自动机的计算能力?


2
哪种方法更适合在四叉树中存储大型几何对象?
在四叉树(或八叉树)中放置几何对象时,可以通过以下几种方式放置比单个节点大的对象: 将对象的引用放置在包含该对象的每个叶子中 将对象的引用放置在完全包含对象的最深节点中 #1和#2 例如: 在此图像中,您可以将圆放置在所有四个叶节点(方法1)中,或者仅放置在根节点(方法2)中,或同时放置在两个节点中(方法3)。 为了查询四叉树,哪种方法更常见?为什么?

2
常规语言中给定长度的单词数
正常语言中给定长度的单词数量是否有代数表征? 维基百科指出的结果有些不精确: 对于任何正则语言存在常数和多项式 ,使得对于每数的长度的话在满足方程式 。λ 1,LLLp 1(X ),λ1,…,λkλ1,…,λk\lambda_1,\,\ldots,\,\lambda_kñ 小号大号(Ñ )ñ 大号小号大号(Ñ )= p 1(Ñ )λ Ñ 1 + ⋯ + p ķ(Ñ )λ Ñ ķp1(x),…,pk(x)p1(x),…,pk(x)p_1(x),\,\ldots,\,p_k(x)nnnsL(n)sL(n)s_L(n)nnnLLLs大号(n )= p1(n )λñ1+ ⋯ + pķ(n )λñķs大号(ñ)=p1(ñ)λ1ñ+⋯+pķ(ñ)λķñs_L(n)=p_1(n)\lambda_1^n+\dotsb+p_k(n)\lambda_k^n 没有说明λλ\lambda居住在哪个空间中(我认为是CC\mathbb{C}),以及是否要求该函数在所有上都具有非负整数值ññ\mathbb{N}。我想要一个精确的陈述,并提供草图或证明作为参考。 额外的问题:是否相反,即给定这种形式的功能,是否总是存在一种普通语言,其每字长度的单词数等于该功能? 这个问题概括了普通语言的字数(00 )∗(00)∗(00)^*

3
是否有任何不可计算的可数集合?
如果集合具有自然数的双射数,则该集合是可计数的;如果存在枚举其成员的算法,则该集合是可计算的(ce)。 由于我们可以从枚举构造双射,因此任何非有限的可计算枚举集都必须是可数的。 是否有一些不可计算的可数集示例?也就是说,存在该集合与自然数之间的双射,但是没有算法可以计算该双射。

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.