Questions tagged «algorithms»

算法是定义明确的问题解决方案的一系列明确定义的步骤。如果您的问题与算法的设计和分析有关,请使用此标签。

4
如何在线性时间内找到超级巨星?
考虑有向图。当且仅当无法从该节点到达其他节点,但所有其他节点都具有的边缘时,我们才称该节点为超级星。正式地:vvvv vvv \qquad \displaystyle v 巨星 :⟺ ö ù 吨d ë 克(v )= 0 ∧ 我Ñ d ë 克(v )= ñ - 1 superstar :⟺outdeg(v)=0∧indeg(v)=n−1 \text{ superstar } :\Longleftrightarrow \mathrm{outdeg}(v) = 0 \land \mathrm{indeg}(v) = n-1 其中ñnn为图中的节点数。例如,在下图中,未填充的节点是超级明星(其他节点不是)。 [ 来源 ] 您如何在O (n )O(n)\mathcal{O}(n)时间中识别有向图中的所有超级明星?可以从通常的候选项中选择合适的图形表示形式;请不要使用将问题的复杂性转移到预处理的表示形式。 无法做出有关密度的假设。我们不认为图表包含超级巨星;如果没有,则算法应识别出它。 符号:Ò ù 吨d È 克outdeg\mathrm{outdeg}是一个节点的传出边缘的数目,我Ñ d …

6
从一组对中生成组合而无需重复元素
我有一对。每对都具有(x,y)的形式,使得x,y属于范围内的整数[0,n)。 因此,如果n为4,那么我有以下几对: (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) 我已经有一对了。现在,我必须使用n/2对构建一个组合,这样就不会重复任何整数(换句话说,每个整数在最终组合中至少出现一次)。以下是正确和不正确组合以更好地理解的示例 1. (0,1)(1,2) [Invalid as 3 does not occur anywhere] 2. (0,2)(1,3) [Correct] 3. (1,3)(0,2) [Same as 2] 一旦我有了配对,有人可以建议我一种生成所有可能组合的方法。

7
使用BFS / DFS查找树的直径的算法。为什么行得通?
该链接提供了一种使用BFS / DFS查找无向树的直径的算法。总结: 在图中的任何节点上运行BFS,记住您最后发现的节点。记住最后发现的节点v,从u运行BFS。d(u,v)是树的直径。 为什么行得通? 第2页,这提供了一个理由,但它是混淆。我引用了证明的初始部分: 在图中的任何节点上运行BFS,记住您最后发现的节点。记住最后发现的节点v,从u运行BFS。d(u,v)是树的直径。 正确性:令a和b为任意两个节点,使得d(a,b)是树的直径。从a到b有一条独特的路径。令t为BFS在该路径上发现的第一个节点。如果从s到u 的路径p1p1p_1和从a到b的p2p2p_2路径不共享边,则从t到u的路径包括s。所以 d(t,u)≥d(s,u)d(t,u)≥d(s,u)d(t,u) \ge d(s,u) d(t,u)≥d(s,a)d(t,u)≥d(s,a)d(t,u) \ge d(s,a) ....(更多不平等现象随之而来。) 不平等对我来说没有意义。

2
销售时间段
给定个人想要购买的个时隙。人对于每个时隙都有值。每个人只能购买一个连续的时隙块,这可能是空的。nnnkkkiiih(i,j)≥0h(i,j)≥0h(i,j)\geq 0jjj 是否有多项式时间算法来计算卖方可以实现的最大值? 没有连续性约束,我们可以将每个时隙分配给最重视它的人。同样,如果我们固定了个人的时隙顺序,则可以使用动态编程来求解第一个个人购买第一个时间的最大值插槽。kkk0≤i≤k0≤i≤k0\le i \le k0≤j≤n0≤j≤n0\le j \le n

2
我如何在超市找到我的妻子?
如果两个人在迷宫中迷路,是否有一种算法可以供他们双方使用,而无需事先同意他们将使用哪种算法? 我认为该算法具有一些特点: 每个人都必须能够使用不对另一个人的决定做任何假设的逻辑来推导它,但是由于每个人都知道另一个人的立场相同,因此他们可以推论另一个必须作出的决定。 双方都必须采用完全相同的算法,因为双方的情况完全对称(双方都不了解对方的起始位置,迷宫的大小是固定的,并且由双方完全映射)。请注意,该算法不需要是确定性的:允许将其随机化。

2
展示如何手动执行FFT
假设您有两个多项式:和。3+x3+x3 + x2x2+22x2+22x^2 + 2 我试图了解FFT如何帮助我们将这两个多项式相乘。但是,我找不到任何可行的示例。有人可以告诉我FFT算法如何将这两个多项式相乘。(注意:这些多项式没有什么特别的,但我想简化它以使其易于理解。) 我已经看过伪代码中的算法,但是它们似乎都存在问题(不要指定输入应该是什么,未定义的变量)。令人惊讶的是,我找不到任何人实际经过(手动)使用FFT相乘多项式的示例。

4
查找图形直径的时间复杂度
找到图的直径的时间复杂度是 多少?G=(V,E)G=(V,E)G=(V,E) O(|V|2)O(|V|2){O}(|V|^2) O(|V|2+|V|⋅|E|)O(|V|2+|V|⋅|E|){O}(|V|^2+|V| \cdot |E|) O(|V|2⋅|E|)O(|V|2⋅|E|){O}(|V|^2\cdot |E|) O(|V|⋅|E|2)O(|V|⋅|E|2){O}(|V|\cdot |E|^2) 图的直径是图中所有顶点对之间的最短路径距离的集合中的最大值。GGG 我不知道该怎么办,我需要对如何解决这样的问题进行完整的分析。


6
什么是GCD最有效的?
我知道Euclid算法是获取正整数列表的GCD(最大公约数)的最佳算法。但是实际上,您可以通过多种方式对该算法进行编码。(就我而言,我决定使用Java,但C / C ++可能是另一种选择)。 我需要在程序中使用最高效的代码。 在递归模式下,您可以编写: static long gcd (long a, long b){ a = Math.abs(a); b = Math.abs(b); return (b==0) ? a : gcd(b, a%b); } 在迭代模式下,它看起来像这样: static long gcd (long a, long b) { long r, i; while(b!=0){ r = a % b; a = b; b = …

1
字符串中最长的重复(分散)子序列
非正式问题陈述: 给定一个字符串(例如,我们希望将一些字母成红色,将一些字母成蓝色(有些根本不),这样,从左到右仅读取红色字母会产生与仅读取蓝色字母相同的结果。ACCABBABACCABBABACCABBAB 在示例中,我们可以为它们着色:ACCABBABACCABBABA\color{blue}{C}\color{red}{CAB}B\color{blue}{AB} 因此,我们说是的重复子。它也是最长的重复子序列(易于检查)。A C C A B B A BCABCABCABACCABBABACCABBABACCABBAB 我们可以有效地计算最长的重复子序列吗? 正式问题: 确定字符串和某个是否难为NP,字符串中是否存在长度为的重复子序列?ķkkkkkk 如果是这样:哪个问题可以减少到这个问题? 如果不是:什么是有效算法?(显然,此算法可用于计算最长的重复子序列) 奖励问题: 如果字母的大小受常数限制,它们将始终是长度为的重复子序列吗?n/2−o(n)n/2−o(n)n/2 - o(n) (这对于二进制字母来说是正确的。) 编辑2:对于奖金问题的否定答案,众所周知的是大小至少为字母。实际上,对于大小为Σ的字母,存在具有最长重复子序列且长度仅为O(n·Σ^ {-1/2})的字符串。随机字符串足以证明这一点。结果已经存在,但我忽略了它。555ΣΣΣO(n⋅Σ−1/2)O(n·Σ−1/2)O(n · Σ^{-1/2}) 编辑: 注意: 有些人说“子序列”时,其意思是“子串”。我不。这不是找到子字符串两次的问题。

3
找到无向图的最小割
这是我正在尝试解决的以往考试中的一个问题: 对于无向图 与正权w ^ (ē )≥ 0,我试图找到最小割。除了使用最大流最小割定理,我不知道其他方法。但是该图是无向的,那么我应该如何对其进行定向?我曾想过要在两端指向边缘,但是哪个顶点将成为源,哪个顶点将成为宿?还是有另一种方法来找到最小切割?GGG瓦特(É )≥ 0w(Ë)≥0w(e) \geq 0

1
为什么展开树旋转算法会同时考虑父节点和祖父母节点?
我不太了解为什么splay树数据结构中的轮换不仅要考虑评级节点的父级,还要考虑祖父母(zig-zag和zig-zig操作)。为什么以下方法不起作用: 例如,当我们插入树的新节点时,我们检查是否插入到左或右子树中。如果插入到左侧,则将结果向右旋转,反之亦然,将右子树旋转。递归就是这样 Tree insert(Tree root, Key k){ if(k < root.key){ root.setLeft(insert(root.getLeft(), key); return rotateRight(root); } //vice versa for right subtree } 那应该避免整个“花花公子”程序,你不觉得吗?

7
“平均”分配项目的算法
我正在寻找一种算法来分配列表中的值,以使结果列表尽可能“平衡”或“均匀分布”(用引号引起来,因为我不确定这些是描述它的最佳方法...稍后,我将提供一种方法来衡量结果是否优于其他结果。 因此,对于列表: [1, 1, 2, 2, 3, 3] 重新分配值之后,最好的结果之一是: [1, 2, 3, 1, 2, 3] 可能还会有其他结果,但当然,使用一组不太统一的值会变得更加复杂。 这是衡量结果是否优于其他方法的方法: 计算每个项目和具有相同值的下一个项目之间的距离。 计算该组距离的标准偏差。较低的分散度意味着更好的结果。 观察结果: 当计算距离并到达列表的末尾而没有找到具有相同值的项目时,我们返回到列表的开始。因此,最多将找到相同的项目,并且该项目的距离将是列表的长度。这意味着列表是循环的; 一个典型的列表有〜50个项目,其中〜15个不同值的数量不同。 所以: 结果[1, 2, 3, 1, 2, 3]是距离为[3, 3, 3, 3, 3, 3],标准差为0; 结果[1, 1, 2, 2, 3, 3]是距离为[1, 5, 1, 5, 1, 5],标准差为2; 这使第一个结果优于第二个结果(偏差越小越好)。 给定这些定义,我想知道应该搜索哪些算法或策略的线索。

9
使用硬币生成均匀分布的随机数
你有一枚硬币。您可以根据需要翻转它多次。 要生成的随机数[R[Rr,使得a≤r&lt;ba≤r&lt;ba \leq r < b,其中。r,a,b∈Z+r,a,b∈Z+r,a,b\in \mathbb{Z}^+ 数字的分配应统一。 如果很容易b − a = 2ñb−a=2ñb -a = 2^n: r = a + binary2dec(flip n times write 0 for heads and 1 for tails) 如果b − a ≠ 2ñb−a≠2ñb-a \neq 2^n怎么办?

3
哪些算法不能并行化?
是否有任何算法很难并行化或研究仍在进行中? 我想了解并行计算中的任何算法或任何研究领域。 我搜索的所有内容都完成了“并行”实现。只是想对任何未开发的并行计算领域进行研究。

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.