计算机科学

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

3
一个高效的数据结构,支持Insert,Delete和MostFrequent
假设我们有一组DDD和的每个成员DDD是数据和密钥对。我们需要一个支持以下操作的数据结构: 将(d,k)(d,k)(d,k)插入DDD, 删除成员eee,(无需搜索以找到eee,例如eee指向的成员DDD), MostFrequent,它返回一个构件e∈De∈De \in D使得e.keye.keye.key是最常用的键之一DDD(请注意,最常用的键不需要唯一)。 什么是该数据结构的有效实现? 我的解决方案是为键及其频率按频率分配优先级的堆,再加上一个哈希表,在哈希表中,哈希函数将具有相同键的成员映射到哈希表中的同一插槽(指针从每个部分指向另一个部分)。 这可以使Θ(lgn)Θ(lg⁡n)\Theta(\lg n)对于前两个操作和Θ(1)Θ(1)\Theta(1)用于第三(最坏情况的运行时间)。 我想知道是否有更有效的解决方案?(或具有相同效率的更简单解决方案?)

2
有关并行计算和NC类的一些问题
关于这两个主题,我有很多相关问题。 首先,大多数复杂文本仅覆盖。有没有很好的资源可以更深入地涵盖研究?例如,下面讨论我所有问题的内容。另外,我假设由于与并行化的联系仍然有大量研究,但我可能是错的。复杂性动物园中的部分并没有太大帮助。NCNC\mathbb{NC}NCNC\mathbb{NC} 其次,如果我们假设半组运算需要恒定的时间,则在半组上的计算将在进行。但是,如果运算不占用固定时间(无界整数就是这种情况)怎么办?是否存在任何已知的问题?NC1NC1\mathbb{NC}^1NCiNCi\mathbb{NC}^i 第三,由于,是否有一种算法可以将任何logspace算法转换为并行版本?L⊆NC2L⊆NC2\mathbb{L} \subseteq \mathbb{NC}^2 第四,听起来大多数人都以相同的方式假设。这背后的直觉是什么?NC≠PNC≠P\mathbb{NC} \ne \mathbb{P}P≠NPP≠NP\mathbb{P} \ne \mathbb{NP} 第五,我读过的每一篇文章都提到了但没有给出其中所包含问题的示例。有吗RNCRNC\mathbb{RNC} 最后,该答案提到了存在亚线性并行执行时间的问题。这些问题有哪些例子?是否还有其他复杂性类包含未知的并行算法?PP\mathbb{P}NCNC\mathbb{NC}

1
计算反转对
分而治之的经典应用是解决以下问题: 给定不同的可比较元素的数组,计算数组中的反转对的数量:对,使得和。a[1…n]a[1…n]a[1\dots n](i,j)(i,j)(i,j)a[i]>a[j]a[i]>a[j]a[i] \gt a[j]i<ji<ji \lt j 一种解决方法是进行合并排序,但还要计算子问题中反转对的数量。在合并步骤中,我们计算跨越(两个)子问题的反转对的数量,并将其添加到子问题的计数中。 虽然这很好,并且给出了时间算法,但是却弄乱了数组。O(nlogn)O(nlog⁡n)O(n\log n) 如果我们还有其他限制,即数组是只读的,则可以制作一个副本并处理该副本,或者使用其他数据结构(例如订单统计平衡二叉树)进行计数,两者都使用空间。Θ(n)Θ(n)\Theta(n) 当前的问题是在不影响运行时间的情况下尝试改善空间。即 是否存在时间算法来计算反转对的数量,该算法适用于只读数组并使用亚线性(即)空间?O(nlogn)O(nlog⁡n)O(n\log n)o(n)o(n)o(n) 假设一个成本均一的RAM模型,并且元素占用空间,并且它们之间的比较为。O(1)O(1)O(1)O(1)O(1)O(1) 参考会做,但是一个解释会更好:-) 我尝试在网上搜索,但找不到任何肯定/否定答案。我想这只是出于好奇。


1
对于图灵机
我不知道以下语言在是怎么出现的。RR\mathrm R LM1={⟨M2⟩∣∣M2 is a TM, and L(M1)=L(M2), and |⟨M1⟩|>|⟨M2⟩|}LM1={⟨M2⟩|M2 is a TM, and L(M1)=L(M2), and |⟨M1⟩|>|⟨M2⟩|}L_{M_1}=\Bigl\{\langle M_2\rangle \;\Big|\;\; M_2 \text{ is a TM, and } L(M_1)=L(M_2), \text{ and } |\langle M_1\rangle| > | \langle M_2 \rangle| \Bigr\} (我知道它在因为这个选择题有答案,但没有解释)。RR\mathrm R 我马上想到了 ,因为我们知道,如果检查两台机器接受同样的语言确实是不可判定,我来想:是不是立竿见影“假”,但它不可能是因为有很多图灵机接受相同的答案并使用不同的编码。LM1∉co-RE∪RELM1∉co-RE∪REL_{M_1} \notin \textrm{co-RE} \cup \textrm{RE} 谢谢!

4
每个线性时间算法都是流算法吗?
在关于反计数的这个问题上,我发现了一篇论文,证明了所有(精确)流算法的空间复杂度下限。我声称这个界限扩展到了所有线性时间算法。通常来说,线性时间算法可以随意跳动(随机访问),而流式算法则不能随意跳动;它必须按顺序调查元素。我可以执行多次,但只能连续多次(对于线性运行时)。 因此我的问题是: 是否可以将每个线性时间算法表示为不断通过的流算法? 随机访问似乎阻止了(简单的)构造证明是肯定的答案,但是我也未能提出反例。 根据机器型号,在运行时,随机访问甚至可能不是问题。我会对这些模型的答案感兴趣: 图灵机,平面输入 RAM,作为​​数组输入 RAM,作为​​链接列表输入

2
是否可以确定TM是否到达磁带上的某个位置?
我想解决旧考试中的这些问题。对于每个问题,输入都是某个图灵机的编码MMM。 对于的整数,以及以下三个问题:c>1c>1c>1 确实,对于每个输入,M 在运行时都不会通过位置吗?xxx|x|+c|x|+c|x|+cxxx 这是真的,对于每个输入,男不传上运行时,位置?xxxmax{|x|−c,1}max{|x|−c,1}\max \{|x|-c,1 \}xxx 确实,对于每个输入xxx,当在x上运行时M都不会经过(|x|+1)/c(|x|+1)/c(|x|+1)/c位置吗?xxx 有多少问题是可以决定的? 我认为问题编号(1)位于coRE∖RcoRE∖R\text {coRE} \smallsetminus \text R如果我理解正确的话),因为我可以并行运行所有输入,并且如果某些输入到达此位置并停止显示,则可以停止输入在RR\text R我可以减少Atm的补余。我按如下方式构造图灵机M′M′M':对于输入yyy我检查yyy是否是计算历史,如果是,则M′M′M'运行正确并且不停止,如果不停止,则停止。 对于(3),我认为这是可以确定的,因为对于c \ geqslant 2c⩾2c⩾2c \geqslant 2,所有图灵机始终位于条带的第一个单元上,因为对于一个字符的字符串,它可以通过第一个单元,所以我需要为|Q|+1|Q|+1|Q|+1步模拟所有长度为1的字符串(这是正确的吗?),并查看我是否在所有它们中仅使用第一个单元格。 我真的不知道该怎么办(2)。

1
何时获得“从左到右扫描,最右派生”的含义?
根据Wikipedia的文章,的L 表示“从左到右扫描”,“ R”表示“最右派生”。但是,在Knuth关于语法的原始论文中,他将(在第610页)定义为一种语言,该语言“可以从左向右翻译为边界。L R (k )大号[R(ķ)LR(k)L R (k )大号[R(ķ)LR(k)L R (k )大号[R(ķ)LR(k)ķķk 我猜想是选择了这种新术语来补充解析的“从左到右扫描,最左派生”。也就是说,我不知道该术语何时更改了含义。L L (k )大号大号(ķ)LL(k) 有谁知道的新缩写来自哪里?L R (k )大号[R(ķ)LR(k)

1
气泡排序中的预期交换次数
给定一个由整数组成的数组,可以以一定的概率,将数组中的每个元素增加固定数量。我必须找到使用气泡排序对数组进行排序所需的交换次数。一种一种AññNbbbp [ i ]p[一世]p[i]0 ≤ 我&lt; Ñ0≤一世&lt;ñ0 \leq i < n 我尝试了以下方法: 一个元素的概率用于可以很容易地从给定的概率来计算。A [ i ] &gt; A [ j ]一种[一世]&gt;一种[Ĵ]A[i] > A[j]我&lt; j一世&lt;Ĵi < j 使用上述方法,我计算出了预期的交换次数为: double ans = 0.0; for ( int i = 0; i &lt; N-1; i++ ){ for ( int j = i+1; j &lt; …


2
缺少元素问题的时空权衡
这是一个众所周知的问题。 给定正整数数组A[1…n]A[1…n]A[1\dots n],输出不在数组中的最小正整数。 该问题可以在空间和时间中解决:读取数组,在空间中跟踪是否发生,扫描最小的元素。O(n)O(n)O(n)O(n)O(n)O(n)1,2,…,n+11,2,…,n+11,2,\dots,n+1 我注意到您可以为时间交换空间。如果仅具有内存,则可以进行轮操作,并获得时间。在特殊情况下,显然存在恒定空间二次时间算法。O(nk)O(nk)O(\frac{n}{k})kkkO(kn)O(kn)O(k n) 我的问题是: 这是最佳的折衷方案,即吗?一般来说,如何证明这种界限?time⋅space=Ω(n2)time⋅space=Ω(n2)\operatorname{time} \cdot \operatorname{space} = \Omega(n^2) 假设RAM模型具有有限算法,并且可以随机访问O(1)中的数组。 这个问题的启示:在单带模型中回文的时空折衷(例如,请参见此处)。


1
覆盖问题(发送方和接收方)
我尝试解决以下覆盖问题。 有发射器,覆盖范围为1km,接收器。在确定所有接收器都被任何发送器覆盖。所有接收器和发送器均由其和坐标表示。nnnnnnO(nlogn)O(nlog⁡n)O(n\log n)xxxyyy 我可以使用的最先进的解决方案采用。对于每个接收器,请按与当前接收器的距离对所有发送器进行排序,然后选择距离最短的发送器,并且该最短距离应在0.5 km之内。O(n2logn)O(n2log⁡n)O(n^2\log n) 但是天真的方法看起来在时间复杂度要好得多。只需计算所有成对的发射器和接收器之间的所有距离。O(n2)O(n2)O(n^2) 我不确定是否可以在此问题中应用范围搜索算法。例如,kd-trees使我们能够找到这样的范围,但是我从未见过示例,并且不确定是否存在用于圆的范围搜索。 给定的复杂度假设解决方案应在某种程度上类似于排序。O(nlogn)O(nlog⁡n)O(n\log n)

2
是否每个NP问题都有一个多尺寸的ILP公式?
由于整数线性规划是NP完全的,因此从NP中的任何问题到它的Karp降低都可以。我认为这暗示着对于NP中的任何问题总是有多项式大小的ILP公式。 但是我看过有关特定NP问题的论文,人们写着“这是第一个多尺寸公式”或“没有已知的多尺寸公式”之类的东西。这就是为什么我感到困惑。


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.