计算机科学

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

1
如何证明PDA中不需要ε环?
在我们对堆自动机的调查中,我想证明一个特定的变体不能接受非上下文敏感的语言。由于我们没有等效的语法模型,因此我需要一个仅使用自动机的证明。因此,我必须证明可以通过LBA(或等效模型)来模拟堆自动机。 我希望证明的工作原理类似于显示下推自动机接受上下文相关语言的子集。但是,我知道的所有证据都是通过 使用语法-根据定义,这里的事实很明显-或 令人难以置信的含糊不清(例如here)。 我的问题是PDA(res.HA)可能包含周期,可能会将符号写入堆栈(resp.heap)。LBA无法模拟此类循环的任意迭代。从语法获得的乔姆斯基层次结构中,我们知道εε\varepsilon 每种与上下文无关的语言都有一个循环PDA或εε\varepsilon 模拟LBA可以防止太频繁地迭代周期。εε\varepsilon 直观地讲,这很清楚:这样的周期与输入无关地写入符号,因此堆栈(堆)内容仅在周期长度内保持线性的信息量(暂时不考虑重叠周期)。另外,除了使用另一个循环之外,您没有办法(如果需要)再次清除这些内容。从本质上讲,如果重复多次,则此类循环不会有助于处理输入,因此它们不是必需的。εε\varepsilon 如何严格/正式地提出这一论点,尤其是考虑到重叠的循环?εε\varepsilon

1
图灵可识别=>可枚举
我得到了从枚举器转到图灵机的证明(继续运行枚举器,看看它是否与输入匹配),但是我看不到另一种方式。 根据我的笔记和这本书(计算理论简介-Sipser),要从图灵机中获取图灵枚举器,我们基本上会写出所有字母组合。然后,您可以在此输入上运行TM,如果它接受将其打印出来,则用无限的新字符串重复广告替换。 我遇到的问题肯定是这要求语言是可决定的。否则,它可能会陷入某个无限循环中的第三个单词,注定永远不会接受或拒绝,当然也绝不会打印出整个语言。 我想念什么?


3
用浮桥NP-连接岛屿是否完整?
我脑子里有一个问题,我认为这是一个NPC问题,但我不知道如何证明。 这是问题所在: 在一个非常大的湖泊中有k个岛,并且有n 个扇形浮桥。这些浮桥大小相同,但初始方向不同,在湖中的原始位置也不同。浮桥可以绕其质心自由旋转,并且没有旋转的成本。 现在我们需要移动那些浮桥,以便可以连接湖中的所有岛屿。我们可以保证浮桥的数量足以连接所有岛屿。 [注意]:我们不能重复使用浮筒!! 任务是找到具有最小移动浮桥总距离的解决方案,以使所有孤岛相连。移动一个浮桥的距离可以计算为质心的原始位置与其展开位置之间的距离。 为了清楚起见,我画了一个这样的数字。假设我们有3个岛A,B和C。它们位于湖中某处。我有几个扇形的卡通漫画。现在的解决方案是找到连接图A,B和C的最小移动距离总和,如图底部所示。希望它有助于理解问题。:) 看来问题出在NPC上,但我不知道要证明这一点。谁可以帮我这个事?

2
图着色问题的NP完全性
替代配方 我想出了以下问题的替代方案。替代公式实际上是问题的一种特殊情况,它使用二部图描述问题。但是,我相信替代性的表达方式仍然对NP不利。替代方法使用不相交的传入和传出节点集,从而简化了问题定义。 给定传出和n个传入节点(分别为图中的红色和蓝色节点),以及传出和传入顶点之间的边权重大小为n × n的集合w i j。该问题的目的是为图中的粗边着色,以便对每个传入节点都满足条件。nnnnnnwijwijw_{ij}n×nn×nn \times n 给定一组输出顶点,一组 { I i{Oi|i=1…n}{Oi|i=1…n}\{ O_i \; | \; i=1 \dots n \}输入顶点, Ñ × Ñ权重 瓦特我Ĵ ≥ 0之间 ö 我的和我Ĵ的用于我,Ĵ = 1 ... Ñ,和一个正的常数 β,找到的颜色的最小数目对于边缘 e i i(上图中的厚边缘),使得对于所有 j = 1 … n,{Ii|i=1…n}{Ii|i=1…n}\{ I_i\; | \; i=1 \dots n \}n×nn×nn \times …

2
最佳近视迷宫求解器
我当时在鬼混Google Blocky的Maze演示,并想起了一条旧规则,那就是如果您想解决迷宫问题,只需左手紧握墙壁即可。这适用于任何简单连接的迷宫,并且可以通过有限的传感器实现。 让我们的机器人由具有以下动作和可观察值的传感器来表示: 动作:前进(),左转(),右转()← →↑↑\uparrow←←\leftarrow→→\rightarrow 可观察到的:前方墙(),无前方墙()⊤⊥⊥\bot⊤⊤\top 然后,我们可以将左侧迷宫求解器构建为(请原谅我的懒惰绘图): 在看到可观察物的地方,将使我们在执行与该边缘关联的动作时跟随状态的适当边缘。这个自动机将解决所有简单的迷宫,尽管它可能需要花费很多时间才能走到尽头。如果满足以下条件,我们称另一个自动机优于:一BBB AAA BBB仅对有限数量的迷宫采取严格的更多步骤,并且 BBB在无限数量的迷宫上严格采取更少的步骤(平均;对于概率变体)。 我的两个问题: 有没有比上面绘制的更好的有限自动机?如果我们允许概率传感器怎么办? 是否有一个有限的自动机来解决不一定简单连接的迷宫?

3
重新审视朗道条款
我问了一下朗多的术语和的(种子)的问题之前,想判断滥用渐近性符号在算术,成败参半的危险。 现在,在这里,我们的循环专家JeffE基本上是这样的: ∑i=1nΘ(1i)=Θ(Hn)∑i=1nΘ(1i)=Θ(Hn)\qquad \displaystyle \sum_{i=1}^n \Theta\left(\frac{1}{i}\right) = \Theta(H_n) 尽管最终结果是正确的,但我认为这是错误的。为什么?如果我们加上所有隐含的常数(只有上限),我们有 ∑i=1nci⋅1i≤c⋅Hn∑i=1nci⋅1i≤c⋅Hn\qquad \displaystyle \sum_{i=1}^n c_i \cdot \frac{1}{i} \leq c \cdot H_n。 现在我们如何从c_1,\ dots,c_n计算?我相信答案是,我们不能:c必须绑定所有n,但是随着n的增长,我们会得到更多的c_i。我们对它们一无所知。c_i可能非常依赖于i,所以我们不能假设一个界限:有限的c可能不存在。cccc1,…,cnc1,…,cnc_1, \dots, c_ncccnnn cicic_innncicic_iiiiccc 此外,还有一个微妙的问题,即哪个变量在左侧变为无穷大iii或nnn?都?如果nnn(出于兼容性考虑),知道1 \ leq i \ leq n,则\ Theta(1 / i)是什么意思?它不仅意味着\ Theta(1)吗?如果是这样,我们就不能比\ Theta(n)更好地约束和。Θ(1/i)Θ(1/i)\Theta(1/i)1≤i≤n1≤i≤n1 \leq i \leq nΘ(1)Θ(1)\Theta(1)Θ(n)Θ(n)\Theta(n) 那么,那把我们留在哪里呢?这是公然的错误吗?一个微妙的?还是仅仅是惯常使用符号,我们不应该在上下文中查看===符号?我们是否可以制定(严格)正确的规则来评估(确定)Landau项的总和? 我认为主要的问题是:什么是?如果我们认为这是不变(因为它是和的范围内),我们可以轻松地构建反例。如果不是恒定的,我不知道如何阅读。iii

1
如何证明在多项式时间内可求解的3SAT约束版本(其中没有一个文字可以出现多次)是可解决的?
我正在尝试制定一项任务(取材于算法-S. Dasgupta,CH Papadimitriou和UV Vazirani撰写,第8章,问题8.6a),而我的解释是: 鉴于即使限制在每个文字最多出现两次的公式中,3SAT仍然是NP完全的,这表明如果每个文字最多出现一次,那么该问题可以在多项式时间内解决。 我试图通过将子句分成多个组来解决此问题: 与其余条款没有任何共同点的条款 仅有1个共同变量的子句 有两个共同变量的条款 具有所有三个变量的子句 我的推理是按照这样的思路进行的:此类组的数量是有限的(由于没有文字出现的限制超过一次),我们可以尝试首先满足最严格的组(第4组),然后替换会产生较少的受限制的组(3、2,然后是1),但是我意识到这并不能带我去任何地方,因为这与3SAT受约束版本的情况并没有太大不同,在受约束版本中,每个文字都可以出现最多两次,这已被证明是NP完全的。 我尝试在网上搜索任何提示/解决方案,但我只能获得此链接,其中的提示对我来说没有足够的意义,我在这里逐字复制: 提示:由于每个文字出现最多一次,转换这个问题2SAT问题-因此多项式时间内,如果一个文字显示在条款Ç Ĵ和的补体X 我(即,¯ X 我在子句)Ç ķ,构建体的新子句子句ç Ĵ ∨ ¯ ç ķ。xixix_iCjCjC_jxixix_ixi¯¯¯¯¯xi¯\overline{x_i}CkCkC_kCj∨Ck¯¯¯¯¯¯Cj∨Ck¯C_j \lor \overline{C_k} 无论和ç ķ有每次三个文字-我没有得到我应该如何去这样做将其转换为2SAT Ç Ĵ ∨ ¯ ç ķ(或¯ ç Ĵ ∨ Ç ķ如果我读错的话)。CĴCĴC_jCķCķC_kCĴ∨ ç흝¯¯¯¯CĴ∨Cķ¯C_j \lor \overline{C_k}CĴ∨ ç흝¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯CĴ∨Cķ¯\overline{C_j \lor C_k} 在解密提示或提供我可以探索的路径方面的任何帮助将不胜感激。

4
有限词是否存在不确定的有限语言?
是否有必要为是无限是不可判定?L⊆Σ∗L⊆Σ∗L\subseteq \Sigma^* 我的意思是,如果我们选择一种语言作为有限有限版本,即,(),而。是否有可能为是一个不可判定的语言? 大号⊆ Σ * | L ' | ≤ Ñ Ñ ∈ Ñ 大号' ⊂ 大号大号'L′L′L' L⊆Σ∗L⊆Σ∗L\subseteq \Sigma^*|L′|≤N|L′|≤N|L'|\leq NN∈NN∈NN \in \mathbb{N}L′⊂LL′⊂LL' \subset LL′L′L' 我看到有一个问题,“如何选择词 L””为此,我们必须建立一个规则选择这将是第一ñ元素L' ,是一种‘有限的’克林星操作。目的是在不需要无限集的情况下找到不确定性语言,但我看不到它。NNN∈∈\in L′"L′"L' "L 'NNNL′L′L' 编辑注意: 尽管我选择了一个答案,但许多答案和所有评论都很重要。


2
如何测试多边形相对于线是否为单调?
众所周知,单调多边形在多边形三角剖分中起着至关重要的作用。 定义:多边形的平面被称为相对于直线单调,如果每线正交相交最多两次。大号大号PPPPLLLLLLPPP 给定直线和多边形,是否有一种有效的算法来确定多边形相对于是否为单调?P P LLLLPPPPPPLLL

1
如何为Appel的隐藏线去除算法找到轮廓线
为了好玩,我尝试为DCPU-16制作线框查看器。我了解如何做所有事情,除了如何隐藏线框中隐藏的线。因此,这里所有的问题都假设您可以使用OpenGL,但是不幸的是,我无法使用DCPU-16之类的东西(或任何类型的硬件加速)。 我在Google图书上找到了关于Appel算法的相当不错的描述。但是,有一个问题我很难弄清楚。 Appel将轮廓线定义为由正面和背面多边形共享的边,或不是封闭多面体一部分的正面多边形的未共享边。由两个正面多边形共享的边不会改变可见性,因此不是轮廓线。在图8.4中,边缘AB,EF,PC,GK和CH是轮廓线,而边缘ED,DC和GI不是轮廓线。 我了解算法的规则及其轮廓线后的工作方式,但是我不知道我该怎么做才能确定一条边是否被正面和背面多边形共享,或者从编码的角度来看,它不是封闭多面体的一部分的正面多边形的未共享边。我可以看一下形状,也可以知道脑海中的轮廓线是什么,但是我不知道如何将“理解”转换为编码算法。 更新资料 我在确定轮廓线方面取得了一些进展。我从布法罗大学计算机图形学课上找到了这 两个讲义。 考虑边缘。这些分为三类。 连接两个不可见面的边本身就是不可见的。这将从列表中删除并忽略。 连接两个潜在可见面的边缘称为“材料边缘”,需要进一步处理。 连接潜在可见面和不可见面的边缘是“材料边缘”的特殊情况,也称为“轮廓边缘”。 使用以上两条信息,我可以更接近将其编写为代码,但是还有很长的路要走。

1
使用对抗参数找到第k个最小元素的下界
在许多文本中,使用中位数的自变量得出了找到第个最小元素的下限。如何使用敌对参数找到一个?kkk 维基百科说锦标赛算法运行在,并且被给定为下限。O(n+klogn)O(n+klog⁡n)O(n+k\log n)n−k+∑nj=n+2−k⌈lgj⌉n−k+∑j=n+2−kn⌈lgj⌉n - k + \sum_{j = n+2-k}^{n} \lceil{\operatorname{lg}\, j}\rceil

2
如何对仿真器输入优化问题进行分类,应该使用哪种算法进行处理?
由于问题的性质,我必须包括许多背景信息(因为我的问题是:如何缩小此范围?)也就是说,据我所知,可以总结为: 有哪些方法可以在极大的组合搜索空间中找到局部最优值? 背景 在工具辅助的超级游戏社区中,我们希望为视频游戏机或仿真器提供特制的(不是实时生成的)输入,以最大程度地减少成本(通常是完成时间)。这是目前做的方法是通过玩游戏帧一帧,并确定各帧的输入,经常重做多次运行的部分(例如,最近公布的运行塞尔达传说:时之笛有总共198,590次重试)。 使这些运行达到其目标通常可以归结为两个主要因素:路线规划和遍历。前者比后者更具“创造力”。 路线规划是确定玩家应该整体导航以完成游戏的方式,并且通常是奔跑过程中最重要的部分。例如,这类似于选择使用哪种排序方法。世界上最好的气泡排序根本不会胜过100万个元素的快速排序。 然而,在追求完美的过程中,遍历(路线的执行方式)也是一个巨大的因素。继续类推,这就是实现排序算法的方式。如果没有非常具体的输入帧,甚至无法执行某些路由。这是最繁琐的工具辅助过程,因此完成完整生产的过程要花费数月甚至数年。对于人类而言,这不是一个困难的过程,因为它可以尝试对同一想法进行不同的变体,直到被认为是最好的,但是人类只能在注意力范围上尝试如此多的变体。在这里,将计算机应用于此任务似乎是正确的。 我现在的目标是尝试使Nintendo 64系统的遍历过程自动化。对于这个问题的搜索空间是远远太大用蛮力的方法来攻击。N64运行的n帧段具有2个30n可能的输入,这意味着仅30帧输入(每秒30FPS)就有2 900个可能的输入;测试这些潜在的解决方案是不可能的,更不用说整整运行两个小时了。 但是,我对尝试(或者甚至不想尝试)完整的全局全局优化没有兴趣。相反,在给定初始输入的情况下,我想近似某个运行特定段的局部最优值(对于某种半全局优化,则近似为n个局部最优值)。也就是说,给定一条路线和该路线的初始遍历:搜索该遍历的邻居以最大程度地降低成本,但不要退化为尝试所有可以解决问题的情况。 因此,我的程序应采用启动状态,输入流,评估函数,并通过使评估结果最小化来输出局部最优值。 当前状态 目前,我已经处理了所有框架。这包括通过仿真器的操作,设置和拆卸,配置等评估输入流。作为各种占位符,优化器是一种非常基本的遗传算法。它只是评估输入流的总数,存储/替换获胜者,并通过更改获胜者流来生成新的总数。这个过程一直持续到满足一些任意标准,例如时间或世代号。 注意,到目前为止,该程序最慢的部分将是对输入流的评估。这是因为这涉及到模拟n帧游戏。(如果有时间,我要编写自己的仿真器来提供此类功能的钩子,但是现在,我剩下的工作是合成消息并为来自另一个进程的现有仿真器修改内存。)在我的主计算机上,相当现代,评估200帧大约需要14秒。因此,我更喜欢一种算法(给定的选择),该算法可以最大程度地减少函数求值的次数。 我在框架中创建了一个同时管理模拟器的系统。这样,我可以立即以线性性能尺度评估多个流,但是实际上,在系统性能下降之前,正在运行的仿真器的数量只能是8到32(并且实际上是在推动它)。这意味着(根据选择),可以在进行评估时执行处理的算法将非常有益,因为优化器可以在等待评估时进行一些繁重的工作。 作为测试,我的评估功能(对于游戏Banjo Kazooie)是每帧求出从玩家到目标点的距离之和。这意味着最佳解决方案是尽可能快地接近该点。仅将突变限制在模拟摇杆上,就花了一天的时间才得到一个好的解决方案。(这是在我实现并发之前。) 添加并发之后,我启用了A按钮按下的突变,并在需要跳转的区域执行了相同的评估功能。在运行24个仿真器的过程中,从最初空白的输入流中花费了大约1个小时才能达到目标,但可能要花几天时间才能达到接近最佳的水平。 问题 我面临的问题是,我对数学优化领域的了解不足,无法知道如何正确地对我的优化问题建模!例如,我可以大致遵循Wikipedia上描述的许多算法的概念,但是我不知道如何对问题进行分类或如何为该类别选择最新的算法。 据我所知,我在一个非常大的邻里中遇到一个组合问题。最重要的是,评估功能非常不连续,没有梯度,并且有很多平稳状态。而且,约束不多,但如果可以解决问题,我很乐意添加表达约束的能力;我想允许指定例如不应使用“开始”按钮,但这不是一般情况。 题 所以我的问题是:如何建模?我要解决哪种优化问题?我应该使用哪种算法?我不害怕阅读研究论文,所以让我知道我应该阅读什么! 直觉上,遗传算法不可能是最好的,因为它似乎并没有真正学习。例如,如果按Start(开始)似乎总是使评估变得更糟(因为它使游戏暂停),那么应该有一些设计师或大脑可以学习:“在任何时候按Start都是没有用的。” 但是,即使达到这个目标也不是那么简单,因为有时按启动是最佳选择,例如在Super Mario 64中所谓的“暂停向后跳远” !在这里,大脑必须学习一个更为复杂的模式:“按下开始是没有用的,除非玩家处于这种非常特定的状态,并且会继续进行某些按键组合。” 似乎我应该(或机器可以学习)以更适合修改的其他方式表示输入。每帧输入似乎太细粒度了,因为真正需要的是“动作”,它可能跨越多个帧...但是许多发现是逐帧进行的,因此我不能完全排除它(上述暂停向后长跳需要帧级精度)。似乎也可以串行处理输入,这是可以利用的事实,但我不确定如何使用。 目前,我正在阅读(反应式)禁忌搜索,超大规模邻域搜索,基于教学的优化以及蚁群优化。 除了随机遗传算法,这个问题是否真的很难解决?还是实际上是一个很久以前解决的琐碎问题?感谢您的阅读,并预先感谢您的任何答复。


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.