计算机科学

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

2
Aho-Corasick算法和Rabin-Karp算法的比较
我正在研究支持多模式搜索的字符串搜索算法。我发现了两种算法,它们在运行时间方面似乎是最强的候选者,分别是Aho-Corasick和Rabin-Karp。但是,我找不到这两种算法之间的任何全面比较。哪种算法更有效?另外,哪一种更适合并行计算和多模式搜索?最后,哪个需要更少的硬件资源? 对于AC算法,搜索阶段需要时间,而对于RK ,搜索阶段则为。但是,RK的运行时间为,这使其类似于AC。我的初步结论是,RK看起来实际上更好,因为它不需要像AC一样多的内存。那是对的吗?O (n + m )Ø(ñ+米)O(n+m)O (n 米)Ø(ñ米)O(nm)O (n + m )Ø(ñ+米)O(n+m)

1
测试语言是否正常的算法
是否有算法/系统程序来测试语言是否正常? 换句话说,在给定的代数形式指定的语言(想到像L={anbn:n∈N}L={anbn:n∈N}L=\{a^n b^n : n \in \mathbb{N}\}),测试语言是否正常。想象一下,我们正在编写一个Web服务,以帮助学生完成所有作业。用户指定语言,然后Web服务将以“常规”,“非常规”或“我不知道”进行响应。(我们希望Web服务尽可能不频繁地回答“我不知道”。)是否有任何好的方法可以自动执行此操作?这容易处理吗?是否可以确定(即是否可以保证我们永远不需要回答“我不知道”)?是否存在合理有效的算法来解决此问题,并且能够针对实际中可能出现的许多大多数语言提供“不知道”以外的答案? 证明语言不规则的经典方法是激进引理。但是,似乎需要在某些时候进行手动洞察(例如,选择要泵送的单词),因此我不清楚是否可以将其转化为算法。 证明一种语言正常的经典方法是使用Myhill-Nerode定理来推导有限状态自动机。这看起来是一种很有前途的方法,但是它确实需要能够以代数形式对语言执行基本操作。对于我来说,目前尚不清楚是否有系统的方法可以对代数形式的语言象征性地执行所有可能需要的操作。 为了使这个问题更好地解决,我们需要确定用户如何指定语言。我愿意提出建议,但我在想这样的事情: L={E:S}L={E:S}L = \{E : S\} 其中是一个单词表达式,S是一个在长度变量上的线性不等式的系统,具有以下定义:EEESSS 每个就是一个字表达。(这些代表可以在∑ ∗中包含任何单词的变量。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* 每个是一个字表达。(此处x r表示字符串x的反方向。)xr,yr,zr,…xr,yr,zr,…x^r,y^r,z^r,\dotsxrxrx^rxxx 中的每一个都是单词表达。(示例性地,Σ = { a ,b ,c ,… },因此a ,b ,c ,…表示基础字母中的单个符号。)a,b,c,…a,b,c,…a,b,c,\dotsΣ={a,b,c,…}Σ={a,b,c,…}\Sigma=\{a,b,c,\dots\}a,b,c,…a,b,c,…a,b,c,\dots 每是一个字表达式中,如果η是一个长度可变。aη,bη,cη,…aη,bη,cη,…a^\eta,b^\eta,c^\eta,\dotsηη\eta 单词表达的串联是单词表达。 每个的是一个长度可变。(这些代表可以采用任何自然数的变量。)m,n,p,q,…m,n,p,q,…m,n,p,q,\dots 每个是长度可变的。(这些代表相应单词的长度。)|x|,|y|,|z|,…|x|,|y|,|z|,…|x|,|y|,|z|,\dots 这似乎足以处理我们在教科书练习中看到的许多情况。当然,如果您有更好的建议,则可以用其他任何以代数形式指定语言的文本方法来代替。

1
为什么FPTAS中的所有问题也都在FPT中?
根据Wikipedia关于多项式时间近似方案的文章: FPTAS中的所有问题都是固定参数可处理的。 这个结果令我惊讶-这些类似乎彼此完全不同。FPTAS通过问题的容易程度来表征问题,而FPT通过问题相对于某些参数的困难来表征问题。不幸的是,维基百科(在我问这个问题时)并未对此进行引用。 是否有此结果的标准证明?还是有我可以查阅的资料来了解有关此连接的更多信息?

1
减少不确定性问题
很抱歉,如果这个问题我没有找到一些简单的答案。每当我研究某个已经证明无法确定的问题时,我就会发现证明依赖于对另一个已经证明无法确定的问题的简化。我了解它会根据问题的难易程度创建某种命令。但是我的问题是-是否已经证明所有无法确定的问题都可以简化为另一个无法确定的问题。是否有可能存在无法证明无法解决任何其他不确定性问题的不确定性问题(因此证明该问题的不确定性,因此无法使用还原性)。如果我们使用归约法来创建可计算程度的订单,那么就无法将此问题分配给这种程度。


3
多集的数量,这样从1到
我的问题。给定,我想计算有效多集S的数量。多重集S在以下情况下有效nnnSSSSSS 的元素之和为n,并且SSSnnn 从到n的每个数字都可以唯一地表示为S的某些元素的总和。111nnnSSS 例。 例如,如果然后{ 1 ,1 ,1 ,1 ,1 } ,{ 1 ,2 ,2 } ,{ 1 ,1 ,3 }是有效的。n=5n=5n=5{1,1,1,1,1},{1,2,2},{1,1,3}{1,1,1,1,1},{1,2,2},{1,1,3}\{1,1,1,1,1\}, \{1,2,2\}, \{1,1,3\} 然而,是无效的,因为2可以通过形成两个{ 1 ,1 }和{ 2 }(即,2可以被表示为两个2 = 1 + 1和2 = 2) ,因此第二个条件不成立。类似地3能够通过形成{ 2 ,1 }和{ 1 ,1 ,1 }。S={1,1,1,2}S={1,1,1,2}S=\{1,1,1,2\}{1,1}{1,1}\{1,1\}{2}{2}\{2\}2=1+12=1+12=1+12=22=22=2{2,1}{2,1}\{2,1\}{1,1,1}{1,1,1}\{1,1,1\} }也无效,因为从所有数字 1至 5都可以被唯一制成,但的元素之和小号不是 5。S={1,2,4S={1,2,4S=\{1,2,4111555SSS555 我试图为这个问题找到一个好的算法已经有一段时间了,但是无法解决。它来自codechef。我已经看到了一些提交的解决方案,但是仍然无法获得解决问题的逻辑。注意:问题的时限为10秒,n&lt;109n&lt;109n<10^9 对于多集,我将使用符号a i …

2
解释其决策的文本分类器
我正在为短句构建文本分类程序。除了告诉用户“您输入的文本的类别为C”之外,我还希望能够以简短易懂的方式解释为什么做出此决定。例如,我不想告诉用户“我将您的句子放入了一个复杂的3层神经网络,这是得分最高的答案”;我想要这样的解释:“由于训练数据中出现了X,Y和Z之类的句子,因此您的句子包含U,V和W这两个类别的特征”。 我的问题是:哪种分类算法最适合此类应用? k近邻似乎是一个很好的候选者,因为我可以告诉用户“您的句子具有类别C,因为它与具有相同类别的句子X,Y和Z相似。但是,它在文本分类问题上的性能众所周知我正在寻找一个可以在表现和解释能力之间取得平衡的分类。 编辑:花了很多时间寻找这样的分类器之后,我开始构建一个名为limdu的机器学习库,该库可以使分类器解释其决策。它仍在开发中,但是,它已经帮助我向自己和我的同事解释了为什么我们的分类器经常失败...

2
两个周期中包含的最长周期
以下问题NP是否完整?(我认为是)。 输入: 一个无向图,其中边集可以分解为两个边不相交的简单循环(这些不是输入的一部分)。ķ ∈ Ñ,G ^ = (V,E)k∈N,G=(V,E)k \in \mathbb{N},G=(V,E) 问题:是否存在长度大于的简单循环?ķGGGķkk 显然,问题出在NP上,的最大是,但这似乎无济于事。≤ 4GGG≤ 4≤4\leq 4

1
河内塔楼,但具有任意初始和最终配置
最近,我遇到了这个问题,河内塔楼的变种。 问题陈述: 考虑一下河内著名问题塔的以下变化: 我们给了塔和m个大小为磁盘堆叠在一些塔上。您的目标是以尽可能少的动作将所有磁盘转移到塔中,但要考虑以下规则:1 ,2 ,3 ,... ,中号ķ 第ññn1 ,2 ,3 ,... ,米1个,2,3,…,米1,2,3,\dots,mķ日ķ日k^{\text{th}} 一次只移动一个磁盘, 永远不要将较大的磁盘移动到较小的磁盘, 只能在最高距离塔之间移动。ddd (原始问题的局限性是: 和。测试用例的数量。您可以假设所有问题都可以通过不超过动作来解决 。)米≤ 100 ≤ 1000 200003 ≤ Ñ ≤ 10003≤ñ≤10003 \le n \le 1000米≤ 100米≤100m \le 100≤ 1000≤1000\le 1000200002000020000 这是一个有趣的。河内问题的经典塔有一个源,目标和临时塔,用于将磁盘从源移动到目标。该站点上提出的问题基本上具有初始和最终配置。 一个人如何解决这个问题?

2
细胞自动机的1 / r吸引力
是否存在一个模拟二维粒子之间力的元胞自动机(二维)?1 / [R1个/[R1/r 更具体地说,我想知道是否可以使用严格的局部更新规则使两个对象(在模型内定义)以力相互吸引,其中是分隔对象的距离。特别地,这将导致物体(粒子)靠近时加速。[R1 / [R1个/[R1/r[R[Rr 更一般而言,是否可以在具有严格本地规则的元胞自动机设置中模拟对象(气泡)之间的远距离吸引力?


4
FSA可以计数吗?
这可能是一个愚蠢的问题。显然,FSA由于是有限的,因此只能对输入字符串中的符号数进行计数,最多不能超过其状态数所限制的数字。但是现在假设我们为FSA配备了输出(例如打印)功能。这样,构造一台能够为每个读取的符号打印一个符号的机器将非常容易。那算作计数吗?如果没有,为什么不呢? 用FST代替:我认为不可能构造能够将任意长度的字符串映射到其长度的二进制表示形式(即,以2为底的数字系统中的数字)的FST。但是,构造一个FST能够将任意长度的字符串映射到相同长度的零(或一个)字符串的过程当然是微不足道的。但这可以算作计数,是否可以算,因为FST所做的是建立其输入长度的表示。有点古怪的表示,但仍然是表示,不是吗?

1
如何检测照片上的阳光
拍摄照片时,您如何通过算法检测给定的照片,太阳是否在照耀? 例子 来自此摄像头的山顶示例: 显然,阳光明媚。 在另一个示例中,它远不那么明显: 通过尝试识别中心小教堂上的小教堂尖顶,可能很容易就能发现是否有雾。但是,对图像处理了解甚少,如果有一种(组合的)算法可以可靠地判断是否有阳光,我会感到惊讶。

2
玩家迟到时公平地切蛋糕
通常来说,公平的切蛋糕问题是假设所有参与者同时获得其份额。但是,在许多情况下,玩家会逐渐到达。例如,我们可以将蛋糕分配给玩家,但随后有一位新玩家到达并想要分享。nnnnnn 通常,公平蛋糕的划分需要付出很多努力(例如,要求玩家回答许多查询),尤其是当玩家人数众多时。 是否可以在播放器上使用蛋糕的现有划分,以便以最少的额外工作(即,与从头开始重新分配蛋糕相比要少的精力)将蛋糕划分为播放器?n + 1nnnn+1n+1n+1

2
存在瓶颈问题的作业调度
给定个作业,每个作业需要次才能完成。nnnJ1,J2,...,JnJ1,J2,...,JnJ_1,J_2,...,J_nTi&gt;0,Ti∈NTi&gt;0,Ti∈NT_i > 0, T_i \in N 每个作业必须由一台机器M进行预处理和后处理,该机器一次只能处理1个作业,并且两个阶段都需要1个单位时间。在经过预处理之后,作业被发送到具有无限功率的机器(该机器可以并行处理无限数量的作业),并且它将在时间准备就绪,然后必须再次将其立即(立即)发送到机器M后期处理。JiJiJ_iTiTiT_i 相关的决策问题是: 输入:处理时间的作业,整数问题:我们可以处理在时间的所有作业使用上述的“瓶颈”模式?Ti&gt;0,Ti∈NTi&gt;0,Ti∈NT_i >0, T_i \in \mathbb{N}NNNK≥2NK≥2NK\geq 2N ≤K≤K\leq K 这个问题有名字吗? 它的复杂性是什么?(是还是 -complete?) PP\sf{P}NPNP\sf{NP} 3月29日更新: 正如M.Cafaro在他的回答中正确指出的那样,该问题类似于无 约束最小完成时间问题(UMFT)(请参阅《调度算法手册》的第17章 ),是 -hard(已证明) W. Kern和W. Nawijn撰写的“在单个机器上有时间滞后地安排多操作作业”,特温特大学,1993年。如我所见,存在一些差异,因为在我的模型中:NPNP\sf{NP} 前/后处理时间是恒定的(1个时间单位) 作业完成后,必须立即进行后处理(UMFT模型允许延迟) 我没有在网上找到Kern&Nawijn证明,所以我仍然不知道上述限制是否改变了问题的难度。 最后,您可以将整个过程想像成一个带大烤箱的烹饪机器人。机器人可以一次准备一种不同类型的食物(所有食物都需要相同的准备时间),将它们放入烤箱,一旦煮熟就必须将其从烤箱中取出并加入一些冷食... “ 烹饪机器人问题 ” :-)

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.