计算机科学

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

5
如何证明问题不是NP完成的?
有什么通用的技术可以证明问题不是NP完全的吗? 我在考试中遇到这个问题,要求我证明是否有一些问题(参见下文)是NP-Complete。我想不出任何真正的解决方案,只是证明它在P中。显然,这不是一个真正的答案。 NP-Complete被定义为NP中的一组问题,所有NP问题都可以简化为它。因此,任何证据都应至少与这两个条件之一相矛盾。这个特定的问题确实存在于P中(因此也存在于NP中)。因此,我坚持证明NP中存在一些无法解决的问题。在地球上如何证明这一点? 这是我在考试中遇到的具体问题: 设为析取范式的弦集。令D N F S A T是来自D N F的字符串的语言,可以通过某些变量分配来满足该语言。显示是否D N F S A TDNFDNFDNFDNFSATDNFSATDNFSATDNFDNFDNFDNFSATDNFSATDNFSAT是否在NP-Complete中。


2
抽象数据结构和具体数据结构有什么区别?
我以为关联数组(即地图或字典)和哈希表是相同的概念,直到我在Wikipedia中看到 对于绑定数量很少的字典,使用关联列表(绑定的链接列表)来实现字典可能是有意义的。... 关联数组最常用的通用实现是使用哈希表:绑定数组,以及将每个可能的键映射到数组索引的哈希函数。... 字典也可以存储在二进制搜索树中或专用于特定类型键的数据结构中,例如基数树,try,Judy数组或van Emde Boas树。... 因此,我想,我的问题在于我不知道关联数组(即地图或字典)是一种抽象数据类型,而哈希表是一种具体的数据结构,并且可以使用不同的具体数据结构来实现相同的抽象数据类型。 我的问题是 抽象数据结构和具体数据结构之间有什么区别和关系? 每个示例都有哪些示例(抽象和具体的数据结构)?越多越好。 有哪些具体数据结构可用于实现哪些抽象数据结构的列表?拥有一个会很好。

2
将整数分解问题简化为NP完全问题
我正在努力理解NP-Intermediate和NP-Complete之间的关系。我知道,如果根据拉德纳定理P!= NP,则存在一类NP语言,但不存在P或NP-Complete语言。NP中的每个问题都可以简化为NP完全问题,但是我还没有看到任何将可疑的NPI问题(例如整数分解)简化为NP完全问题的示例。有谁知道这个或其他NPI-> NPC减少的任何示例吗?


3
常规语言的字数
根据维基百科,对于任何正则语言存在常数和多项式,使得对于每数长度的字的在满足方程LLLλ1,…,λkλ1,…,λk\lambda_1,\ldots,\lambda_kp1(x),…,pk(x)p1(x),…,pk(x)p_1(x),\ldots,p_k(x)nnnsL(n)sL(n)s_L(n)nnnLLL sL(n)=p1(n)λn1+⋯+pk(n)λnksL(n)=p1(n)λ1n+⋯+pk(n)λkn\qquad \displaystyle s_L(n)=p_1(n)\lambda_1^n+\dots+p_k(n)\lambda_k^n。 语言是常规语言(与之匹配)。如果n为偶数,则,否则为。L={02n∣n∈N}L={02n∣n∈N}L =\{ 0^{2n} \mid n \in\mathbb{N} \}(00)∗(00)∗(00)^*sL(n)=1sL(n)=1s_L(n) = 1sL(n)=0sL(n)=0s_L(n) = 0 但是,我找不到和(上面已经存在)。由于必须是可微的并且不是常数,所以它必须以某种方式像波浪一样,而且我看不到如何用多项式和指数函数来做到这一点,而不必以无穷大的求和数结束,例如泰勒展开式 谁能启发我?λiλi\lambda_ipipip_isL(n)sL(n)s_L(n)

5
交互比算法更强大吗?
我听说过的格言相互作用比算法更强大的彼得·韦格纳。该思想的基础是(经典的)图灵机无法处理与外界/环境的交互(即通信(输入/输出))。 怎么会这样呢?有什么东西比图灵机更强大?这个故事的本质是什么?为什么它不那么知名?

4
这个有限图问题可以判定吗?哪些因素可以决定问题?
我想知道以下问题是否可以确定以及如何找出。我看到的每个问题都可以对它说“是”或“否”,因此,除了少数几个问题(此处提供)以外,大多数问题和算法是否可以确定? 输入:有向图和有限图,其中v和u为顶点 问:G中是否存在以u为初始顶点和v为最终顶点的路径?GGGvvvuuuGGGuuuvvv

3
SAT编码的食谱书?
SAT求解器在解决大型实例方面越来越有效,并在各种情况下用作后端。每当有人想要使用它们来解决特定领域中的问题时,他/她都必须提出一种即席编码,该编码不仅具有正确的解决方案集,而且可以将约束(甚至是冗余的)形式化这有助于求解器的启发式算法更快地找到解决方案。 在我看来,许多这样的编码将是非常常见的,例如:断言将一组有限的节点链接为树或DAG,或者对列表进行排序... 是否有针对优化解决方案中常见问题的通用编码的存储库/食谱书?


7
如何仅使用4个NAND门构造XOR门?
xor门,现在我只需要使用4个nand门来构造此门 a b out 0 0 0 0 1 1 1 0 1 1 1 0 的xor = (a and not b) or (not a and b),这是 A¯¯¯¯B+AB¯¯¯¯A¯B+AB¯\begin{split}\overline{A}{B}+{A}\overline{B}\end{split} 我知道答案,但是如何从公式中获得门图? 编辑 我的直觉是,对我来说,如果我逐步进行定义,然后再进行定义,则应该理解这一点xor = (a and not b) or (not a and b)。 A¯¯¯¯B¯¯¯¯¯¯¯¯⋅AB¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯A¯B¯⋅AB¯¯¯\begin{split}\overline{\overline{\overline{A}{B}}\cdot\overline{{A}\overline{B}}}\end{split} 并且xor将与5个构成nand栅极(第一#1下图) 我的问题更像是:想象历史上第一个人想出这个公式,他或她(思考过程)如何nand逐步地从这个公式中得到4个答案。 一种¯¯¯¯B + A B¯¯¯¯A¯乙+一种B¯\begin{split}\overline{A}{B}+{A}\overline{B}\end{split}

1
内存一致性与缓存一致性
确实,顺序一致性是比缓存一致性更强的属性吗? 根据 索林,丹尼尔·J;希尔,马克D;Wood,David A:关于内存一致性和缓存一致性的入门,Morgan和Claypool,2011年 顺序一致性可以描述为(非正式): 顺序一致性内存模型指定系统必须执行所有线程的加载,并以尊重每个线程程序顺序的总顺序存储到所有内存位置。每次加载将按该总顺序获取最新存储的值。 换句话说,系统是顺序一致的,如果给定每个线程的内存事件(加载和存储),我们可以对所有这些事件进行排序,使得:1)对于每个线程,其事件的顺序得以保留; 2)全局顺序为串行(任何加载都返回存储的最新值)。 现在他们继续并描述连贯性: 的定义的一致性是类似于顺序一致性的定义是一致的系统必须出现来执行所有螺纹的加载和存储到单个存储器位置在共有以便方面每个线程的程序顺序。 换句话说,系统是一致的,如果给定每个位置的每个线程的内存事件,我们可以对该位置的事件进行排序,这样:1)对于每个线程,其事件在该位置的顺序被保留,以及2)对于每个线程位置订单是连续的。 最后,他们指出了区别: 此定义突出了一致性和一致性之间的重要区别:一致性是基于每个内存位置指定的,而一致性是针对所有内存位置指定的。 因此似乎不同之处在于,对于相干系统,我们需要每个位置的所有事件的总顺序(因此,特定位置的事件之间的顺序),而对于一致的系统,应该在所有事件上定义总顺序(因此在不同位置的事件之间也进行排序)? 这是否意味着一致性不如一致性那么严格?(这似乎很有趣!)是否存在连贯但不一致的痕迹?

4
为什么不对链接列表使用快速排序?
快速排序算法可以分为以下步骤 确定枢纽。 根据数据透视表对链接列表进行分区。 将链表递归分为两部分。 现在,如果我始终选择最后一个元素作为枢轴,那么识别枢轴元素(第一步)将花费时间。O(n)O(n)\mathcal O(n) 识别枢轴元素之后,我们可以存储其数据并将其与所有其他元素进行比较以识别正确的分区点(第二步)。当我们存储数据透视表数据时,每个比较将花费时间,而每个交换将花费O(1 )时间。因此,总共需要n 个元素的O(n )时间。O(1)O(1)\mathcal O(1)O(1)O(1)\mathcal O(1)O(n)O(n)\mathcal O(n)nnn 因此,递归关系为: 是 O(n log n ),它与带有链接列表的合并排序中的相同。T(n)=2T(n/2)+nT(n)=2T(n/2)+nT(n) = 2T(n/2) + nO(nlogn)O(nlog⁡n)\mathcal O(n \log n) 那么,为什么对链表而言合并排序比快速排序更受青睐?

4
为什么RSA加密在密钥交换中变得很流行?
这是一个软问题。我对密码学或其历史不太了解,但RSA的一种常见用法是通过加密对称密钥以发送更长的消息来进行密钥交换(例如,此处的iMessage描述)。难道这不是Diffie-Hellman密钥交换的功能吗?它更旧(对我而言似乎更简单)是为了?在Wikipedia上,它们也都获得了专利,因此对选择不承担任何责任。 明确地说,我并不是在问公钥加密技术在理论上是否重要。我在问为什么它实际上成为进行密钥交换的标准方法。(对于非密码学家来说,DH看起来更易于实现,并且也与所使用组的细节无关。)

3
可被n整除的最大和
我在StackOverflow上问了这个问题,但我认为这是一个更合适的地方。 这是算法概论课程中的一个问题: 您有aaa包含nnn正整数的数组a(该数组无需排序或元素唯一)。建议使用O(n)O(n)O(n)算法查找可被整除的元素的最大和nnn。 例如: a=[6,1,13,4,9,8,25],n=7a=[6,1,13,4,9,8,25],n=7a = [6, 1, 13, 4, 9, 8, 25], n = 7。答案是565656(与元件6,13,4,8,256,13,4,8,256, 13, 4, 8, 25) 这是比较容易找到它O(n2)O(n2)O(n^2)使用动态编程和存储与余最大的一笔0,1,2,...,n−10,1,2,...,n−10, 1, 2,..., n - 1。 另外,如果我们将注意力集中在元素的连续序列上,则可以通过存储部分和以n为模的总和来轻松地在O(n)O(n)O(n)时间内找到最佳的此类序列:让S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + 一个[ 我],对于每个剩余ř记住最大索引Ĵ使得小号[ Ĵ ] ≡ řnnnS[i]=a[0]+a[1]+⋯+a[i]S[i]=a[0]+a[1]+⋯+a[i]S[i]=a[0]+a[1]+\dots + …

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.