计算机科学

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

1
随机数独生成器
我想生成一个完全随机的数独。 将Sudoku网格定义为的1到9之间整数的网格,其中一些元素可以省略。如果有一种独特的方法可以完成网格以匹配Sudoku约束(每行,每列和对齐的3 × 3正方形都没有重复的元素),并且在这方面是最小的(即,如果您省略了更多的话),则网格是一个有效的难题。元素拼图有多种解决方案)。9×99×99\times91119993×33×33\times3 如何生成随机数独谜题,以使所有数独谜题都具有等价性?


1
一致性如何暗示试探法也是可以接受的?
启发式函数是...h (n )h(n)h (n) 一致的,如果从节点的估计成本的目标是不大于步骤成本其继任者ñ “加上从后继目标的估计成本。nnnn′n′n' 容许的,如果从来没有高估了真实成本的目标状态。h(n)h(n)h(n) 我的人工智能课程的教科书指出,一致性比可接纳性要强,但并不能证明这一点,因此我很难提出数学解释。

1
POSIX BRE可以表达所有常规语言吗?
似乎POSIX.1-2008定义的“基本正则表达式” 不支持替换a|b(尽管某些grep实现可以识别转义的版本\|)。 由于按定义,常规语言是根据联合来封闭的,这是否意味着POSIX BRE的表达能力不及有限自动机?还是有某种方法可以使用其他构造来模拟交替?

2
CPU体系结构是否偏向于程序运行时?
是否可以对CPU进行任何更改,以使它们在诸如Rust的并行运行时性能更好?例如,是否对分支预测实现或缓存大小进行了更改,以帮助并发运行时? 我的印象是,当前的CPU设计可能会针对诸如C之类的过程运行时进行更多优化。如果我们改为针对并发运行时进行优化,那么CPU看起来会有什么不同? 出于重要性,分支预测是基于分析过程代码的研究论文中得出的概括来实现的。我想知道并发抽象是否会给运行时添加一个重要的工作集,从而对现有分支预测算法产生不利影响。例如,在for循环中进行预测是一回事,但是当分支的目标始终是内存的某些新部分(图形,文本等)时,它将始终是缓存未命中,并且永远不会存在分支它的历史-因为还没有人碰过它。 这可能是一个愚蠢的问题,因为尽管内容可能始终位于RAM中,但其内容将被分支到比将要使用的数量级小(一旦被加载到缓存中)...但是仍然在过程运行时中,它应该是存储在缓存和分支预测变量中的上下文的可观察时间边界,这在更加并行化的环境中将表现为抽象边界。所以我想知道...是否遵守了这些界限?有研究论文对此进行分析吗? CPU体系结构是否偏向于过程代码而不是并发代码?还是现代的CPU具有足够的通用性而不会遭受高并发语言的困扰?

2
通过拥有“依赖类型”,我们可以获得什么?
我以为我正确理解了依赖类型(DT),但是这个问题的答案是:https : //cstheory.stackexchange.com/questions/30651/why-was-there-a-need-for-martin-l%C3% B6f要创建直觉型的理论使我产生了其他想法。 在阅读了DT并试图理解它们之后,我想知道,从DT的概念中我们可以得到什么?它们似乎比简单的lambda演算(STLC)更灵活,功能更强大,尽管我无法确切地理解“如何/为什么”。 用STLC无法完成的DT可以做什么?似乎增加DT会使理论变得更加复杂,但是有什么好处呢? 从以上问题的答案: 依赖类型由de Bruijn和Howard提出,他们希望将Curry-Howard对应关系从命题逻辑扩展到一阶逻辑。 从某种程度上讲,这似乎是有道理的,但我仍然无法掌握“如何/为什么”的全局图?也许一个例子明确表明了将CH对应关系扩展到FO逻辑可以帮助理解DT有什么大不了的地方?我不确定我也应该理解这一点。

2
证明DOUBLE-SAT是NP完全的
为便于参考,此处定义了众所周知的SAT问题。 DOUBLE-SAT问题定义为 DOUBLE-SAT={⟨ϕ⟩∣ϕ has at least two satisfying assignments}DOUBLE-SAT={⟨ϕ⟩∣ϕ has at least two satisfying assignments}\qquad \mathsf{DOUBLE\text{-}SAT} = \{\langle\phi\rangle \mid \phi \text{ has at least two satisfying assignments}\} 我们如何证明它是NP完全的? 不胜枚举的证明方法将不胜感激。


4
Dijsktra算法应用于旅行商问题
我是新手(计算复杂度理论的新手),我有一个问题。 假设我们有“旅行推销员问题”,Dijkstra算法的以下应用程序能否解决? 从起点开始,我们计算两点之间的最短距离。我们到了重点。我们删除源点。然后我们计算距当前点的下一个最短距离点,依此类推... 在移动下一个可用的最短距离点时,每一步都会使图形变小。直到我们访问所有要点。 这将解决旅行商的问题。

3
是否有可以捕获功耗的抽象机?
当报告一种算法的算法复杂性时,人们假定底层计算是在某种近似现代CPU的抽象机器(例如RAM)上执行的。这种模型使我们能够报告算法的时间和空间复杂性。现在,随着GPGPU的普及,人们想知道是否存在众所周知的模型,其中也可以考虑功耗。 众所周知,GPU会消耗大量功率,并且某些指令会根据其复杂性和在复杂芯片上的位置而分为不同的功耗类别。因此,从能量的角度来看,指令不是单位(甚至是固定的)成本。一个简单的扩展将为操作成本分配权重,但是我正在寻找一个功能强大的模型,其中操作/指令可能会消耗非恒定单位的能量,例如多项式量(或更复杂的例如:自开始以来经过的时间的函数)的算法;或考虑到冷却系统发生故障的可能性,这将使芯片发热,并降低时钟频率等。) 是否存在可以纳入非平凡成本和错误的模型?

1
Coq中的Set和Type有什么区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为Computer Science Stack Exchange 的主题。 2年前关闭。 AFAIU类型可以是Set其元素为程序或其proposition元素为证明的类型。因此,基于这种理解: Inductive prod (X Y: Type) : Set := | pair: X -> Y -> prod X Y. 以下代码应编译,但不是由于以下错误。如果我Set用Type或Type与Set它一起更改,则可以正常编译。有人可以帮助我了解以下错误的含义吗?我正在尝试使用Software Foundations书籍自学Coq。 错误: Error: Large non-propositional inductive types must be in Type.

2
矩阵链乘法和求幂
如果我有两个矩阵AAA和BBB,分别为维度1000×21000×21000\times2和2×10002×10002\times1000,并且要计算(AB)5000(AB)5000(AB)^{5000},则将表达式重写为A(BA)^ {4999}效率更高BA(BA)4999BA(BA)4999BA(BA)^{4999}B,然后才进行数字评估,因为ABABAB的尺寸为1000×10001000×10001000\times1000而BABABA的尺寸为2×22×22\times2。 我想解决此问题的广义版本。是否有合理有效的算法(不是蛮力)来优化包含以下内容的表达式: 已知尺寸的自由矩阵变量 任意子表达式的乘积 任意子表达式提升为自然幂 ...这样,用自由矩阵变量替换为具体的矩阵值之后,进行数字评估所需的工作最少。 该矩阵链乘积问题是我的问题的一个特例。 编辑: 这是一个暂定答案。直觉上对我来说似乎正确,但是我没有证据证明它是正确的。如果事实证明是正确的,我仍然对证明感兴趣。(当然,如果不正确,请纠正我。) 对于每个乘幂的乘积,例如(A_1 A_2 \ ldots A_k)^ n(A1A2…Ak)n(A1A2…Ak)n(A_1 A_2 \ldots A_k)^n,请考虑因子的每个循环排列: (A1A2…Ak)n(A1A2…Ak)n(A_1 A_2 \ldots A_k)^n A1(A2…AkA1)n−1A2…AkA1(A2…AkA1)n−1A2…AkA_1 (A_2 \ldots A_k A_1)^{n-1} A_2 \ldots A_k A1A2(A3…AkA1A2)n−1A3…AkA1A2(A3…AkA1A2)n−1A3…AkA_1 A_2 (A_3 \ldots A_k A_1 A_2)^{n-1} A_3 \ldots A_k ... A1A2…Ak−1(AkA1A2…Ak−1)n−1AkA1A2…Ak−1(AkA1A2…Ak−1)n−1AkA_1 A_2 \ldots A_{k-1} (A_k A_1 A_2 \ldots …

2
PTAS定义与FPTAS
从我在 preliminary version of a chapter of the book “Lectures on Scheduling” edited by R.H. M¨ohring, C.N. Potts, A.S. Schulz, G.J. Woeginger, L.A. Wolsey, to appear around 2011 A.D. 这是PTAS定义: 问题X的多项式时间近似方案(PTAS)是一种近似方案,其时间复杂度是输入大小的多项式。XXX 和FPTAS定义 问题X的完全多项式时间近似方案(FPTAS) 是一种近似方案,其时间复杂度在输入大小上是多项式,在1 / ϵ中也是多项式。XXXϵϵ\epsilon 然后作者说: 因此,对于PTAS,时间复杂度与成正比是可以接受的。我| 1 / ϵ|I|1/ϵ|I|1/ϵ|I|^{1/\epsilon}其中|I||I||I|是输入大小;尽管这次的复杂度是指数级1/ϵ1/ϵ1/\epsilon。一个FPTAS不能在呈指数级增长一个时间复杂度1/ϵ1/ϵ1/\epsilon但时间复杂度成正比|I|8/ϵ3|I|8/ϵ3|I|^8/\epsilon^3会很好。对于最坏情况的近似,FPTAS是我们可以为NP-hard问题得出的最强结果。 然后,他建议使用下图说明问题类别之间的关系: 这是我的问题: 从PTAS和FPTAS的定义来看,作者如何得出FPTAS的时间复杂度不能以指数增长的结论?如果可以具有这样的时间复杂度,那会有什么区别呢?1/ϵ1/ϵ1/\epsilon 像甲时间复杂度是可以接受的FPTAS但它不是用于PTAS,那么为什么FPTAS被认为是一个子集PTAS?(n+1/ϵ)3(n+1/ϵ)3(n+1/\epsilon)^3 他的意思是:FPTAS是我们可以解决NP难题的最强结果。 总的来说,我想知道这些概念到底意味着什么,以及它们的独特属性是什么。 提前致谢。

1
如果我们有GPGPU,为什么还要使用SIMD?
我认为这个问题最好在Stack Exchange的CS部分中解决。既然我们已经拥有使用CUDA和OpenCL等语言的GPGPU,那么多媒体SIMD扩展(SSE / AVX / NEON)是否仍然可以满足目的? 最近,我阅读了一篇有关SSE指令如何用于加速分类网络的文章。我以为这很整洁,但是当我告诉我的首席教授时,他笑了,并说在GPU上运行类似的代码会破坏SIMD版本。我毫不怀疑,因为SSE非常简单,GPU是大型的高度复杂的加速器,具有更多的并行性,但是让我思考的是,在许多情况下,多媒体SIMD扩展比使用GPU更有用吗? 如果GPGPU使SIMD冗余,为什么英特尔会增加对SIMD的支持?SSE是128位,现在是AVX的256位,明年将是512位。如果GPGPU可以更好地处理具有数据并行性的代码,为什么英特尔要推出这些SIMD扩展?他们可能能够将等效资源(研究和区域)放入更大的缓存和分支预测器中,从而提高串行性能。 为什么使用SIMD代替GPGPU?

5
未来的量子计算机会使用二进制,三进制或四进制数字系统吗?
我们当前的计算机使用位,因此它们使用二进制数字系统。但是我听说未来的量子计算机将使用量子位而不是简单位。 因为在“ qubit”一词中有“ bi”一词,所以我首先认为这意味着量子计算机将使用二进制(基数2)。 但是后来我听说,量子位具有三个可能的状态:0、1或0和1的叠加。于是我以为这必须表示它们将使用三进制(基数为3)。 但是后来我看到一个qubit最多可以容纳两位信息。因此,我认为这可能意味着他们将使用四元(基数4)。 那么未来的量子计算机将使用哪种数字系统:二进制,三元或四元?

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.