Questions tagged «algorithms»

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

3
大O:嵌套循环依赖
我收到了Big O的作业分配。我受嵌套的for循环的困扰,该循环取决于先前的循环。这是我的作业问题的修改版本,因为我确实很想理解它: sum = 0; for (i = 0; i < n; i++ for (j = 0; j < i; j++) sum++; 让我失望的j < i部分是那部分。似乎它几乎像阶乘一样执行,但是要加上。任何提示将不胜感激。

1
有效地删除重复项并降低内存开销
我想以一种只需要存储结果集的方式有效地过滤重复项的整数列表。 一种可见的方式: 我们有一个整数范围其中大(例如)N 2 40小号= { 1 ,...,N}S={1,…,N}S = \{1, \dots{}, N\}ñNN2402402^{40} 我们有一个函数,据说它有很多碰撞(图像均匀地分布在)SF:S→ Sf:S→Sf : S \to S小号SS 然后,我们需要存储,即{ f (x )| X ∈ 小号}F[ S]f[S]f[S]{ ˚F(x )| X ∈ 小号}{f(x)|x∈S}\{f(x) | x \in S\} 我对有一个非常准确的(概率性)估计。是,因此可以预先分配数据结构(例如)。| f [ S ] | ≈ 2 30| F[ S] ||f[S]||f[S]|| F[ S] | …

3
如果选择最大元素作为枢轴,Quicksort是否始终具有二次运行时间?
如果您有快速排序算法,并且始终选择最小(或最大)元素作为枢轴;我是否假设如果您提供一个已经排序的数据集,无论您的“已排序”列表是按升序还是降序,都将始终获得最差的性能? 我的想法是,如果您始终为枢轴选择最小的元素,那么“已排序”输入是按升序还是降序排序并不重要,因为选择相对于枢轴进行排序的子集始终是一样大小?

1
为什么取消负周期的复杂度?
我们想用通用的负周期抵消算法来解决最小成本流问题。也就是说,我们从随机有效流开始,然后我们不选择任何“良好”负周期,例如最小平均成本周期,而是使用Bellman-Ford发现最小周期并沿发现的周期增加。设为图中节点的数量,为边的数量,为图中边缘的最大容量,为图中边缘的最大成本。然后,我的学习资料声称:VVVAAAUUUWWW 开始时的最高费用不得超过AUWAUWAUW 沿一个负周期的增加将成本降低至少一个单位 最低费用的下限是0,因为我们不允许负费用 每个负周期都可以在O(VA)O(VA)O(VA) 并且他们从中得出算法的复杂度为。我理解每个声明背后的逻辑,但认为复杂性不同。具体来说,最大扩充数量由每个扩充的一个流量单位给出,将的成本降至零,从而为我们提供了最大的扩充。我们需要为每个发现一个负循环,因此我们将最大扩增次数乘以发现一个循环所需的时间(),并得出算法的。O(V2AUW)O(V2AUW)O(V^2AUW)AUWAUWAUWAUWAUWAUWVAVAVAO(A2VUW)O(A2VUW)O(A^2VUW) 这可能是学习资料中的错误(这是教授提供的文字,而不是课程中的学生笔记),还是我的逻辑错误?

4
A中的点与B中的点之间的最短距离
给定两个集合AAA和BBB每个集合在平面中包含nnn不相交的点,请计算AAA的点和的点之间的最短距离BBB,即min { dist(p,q) | p∈A∧q∈B }min { dist(p,q) | p∈A∧q∈B }\min \space \{\mbox{ } \text{dist}(p, q) \mbox{ } | \mbox{ } p \in A \land q \in B \space \} 。 我不确定我是否正确,但是这个问题与计算几何中的线性编程可以解决的问题非常相似。但是,降低为LP并不容易。我的问题还与找到两组点之间的最薄规定有关,显然可以通过二维空间中O(n)O(n)O(n)中的LP来解决。

1
寻找适合新条目的排名算法
我正在使用一种排名系统,该系统将根据一段时间内的投票对条目进行排名。我正在寻找一种算法,可以计算出近似于平均分的分数,但是我希望它比起较旧的分数更喜欢较新的分数。我在考虑以下方面的问题: score1+ 2⋅score2 + ⋯+ n⋅scoren1+2+⋯+nscore1+ 2⋅score2 + ⋯+ n⋅scoren1+2+⋯+n\frac{\mathrm{score}_1 +\ 2\cdot \mathrm{score}_2\ +\ \dots +\ n\cdot \mathrm{score}_n}{1 + 2 + \dots + n} 我想知道是否还有其他通常用于这种情况的算法,如果可以,请您解释一下?

1
中国邮递员问题:寻找奇数节点之间的最佳联系
我正在编写一个程序,以无方向的方式解决中国邮递员问题(也称为路线检查问题),并且目前正面临该问题,以找到最佳的附加边来连接奇数度的节点,因此我可以计算出一个欧拉回路。 可能存在(考虑要解决的图形的大小)需要计算和评估的边的巨大组合。 作为示例,存在奇数度节点。最佳组合可能是:A ,B ,C,D ,E,F,G ,HA,B,C,D,E,F,G,HA, B, C, D, E, F, G, H 一乙ABAB,,,E F G HCdCDCDËFEFEFg ^ ^ hGHGH 一çACAC,,,E H F G乙dBDBDËHEHEHFGFGFG 一dADAD,,,E G F HBCBCBCEGEGEGFHFHFH AEAEAE .... 其中表示“节点与节点之间的边缘”。A BABABABAAABBB 因此,我的问题是:是否有一种已知的算法能以比纯暴力破解更好的复杂性来解决该问题(对它们全部进行计算和评估)? €:经过一番研究,我找到了这篇有关“爱德蒙兹最小长度匹配算法”的文章,但找不到该算法的任何伪代码或学习者说明(或者至少我不认识它们,因为Google提供了许多热门歌曲,并且匹配了J. Edmonds的算法)

1
扫线矩形覆盖
不幸的是,我没有得到成功的锻炼。 有一组矩形和一个矩形。使用平面扫描算法确定R_ {1} .. R_ {n}集是否完全覆盖了R_ {0 }。 - [R 0R1..RnR1..RnR_{1}..R_{n}R0R0R_{0} R 1。。[R ñR0R0R_{0}R1..RnR1..RnR_{1}..R_{n} 有关扫掠线算法原理的更多详细信息,请参见此处。 让我们从头开始。最初,我们将扫掠线算法称为查找线段相交的算法,它需要两个数据结构: 一组事件点QQQ(它存储线段和相交点的端点) 状态TTT(扫掠线相交的一组线段的动态结构) 总体思路:假设扫掠线lll是一条垂直线,从左侧开始接近矩形组。对矩形的所有xxx坐标进行排序,并将它们按升序存储在QQQ中-应该取O(nlogn)O(nlog⁡n)O(n\log n)。从第一个事件点开始,对于每个点,确定在给定xxx坐标处相交的矩形集,确定相交矩形的连续段,并检查它们是否在当前x坐标处完全覆盖R_ {0}。以T作为二叉树,它将取O(\ log n)。如果R_ {0}的任何部分未被发现,则表示R0R0R_{0}xxxTTTO(logn)O(log⁡n)O(\log n)R0R0R_{0}R0R0R_{0}未完全涵盖。 详细信息:分段相交算法的思想是仅相邻的分段相交。基于这一事实,我们建立了状态TTT并在整个算法中对其进行了维护。我试图在这种情况下找到类似的想法,但到目前为止没有成功,我只能说两个矩形如果它们对应的xxx和yyy坐标重叠则相交。 问题是如何建立和维护TTT,什么建筑的复杂性和维护TTT的。我认为R树在这种情况下可能非常有用,但是正如我发现的那样,使用R树确定最小边界矩形非常困难。 您是否有关于如何解决此问题的想法,尤其是如何构建?TTT

1
将任意排列表示为一系列(插入,移动,删除)操作
假设我有两个字符串。打电话给他们和乙。两个字符串都没有重复的字符。一个一个A乙乙B 如何找到将变成B的最短插入,移动和删除操作序列,其中:一个一个A乙乙B insert(char, offset)char在给定offset的字符串中插入 move(from_offset, to_offset)将当前偏移的字符移动from_offset到新位置,使其具有偏移to_offset delete(offset) 删除处的字符 offset 示例应用程序:您执行数据库查询,并在您的网站上显示结果。以后,您重新运行数据库查询,发现结果已更改。您想要使用最少的DOM操作数来更改页面上的内容以匹配数据库中当前的内容。为什么要最短的操作顺序有两个原因。首先,效率。当只有几条记录更改时,您要确保执行而不是O(n )O(1)Ø(1个)\mathcal{O}(1)O (n )Ø(ñ)\mathcal{O}(n)DOM操作,因为它们很昂贵。第二,正确性。如果一项从一个位置移动到另一个位置,则您希望通过单个操作移动关联的DOM节点,而又不破坏和重新创建它们。否则,您将失去焦点状态,<input>元素的内容等。

2
分支定界说明
我对分支和绑定算法进行了测试。我从理论上理解了该算法的工作原理,但是找不到能说明该算法如何实际实施的示例。 我发现了一些例子,如这一个 ,但我仍然感到困惑了。我也寻找旅行商的问题,我听不懂。 我需要的是一些问题,以及如何通过使用分支定界法来解决这些问题。

3
对数与双对数时间复杂度
在实际应用中,使用而不是O(log (n ))算法有具体的好处吗?O(对数(日志(n ))O(log⁡(log⁡(n))\mathcal{O}(\log(\log(n))O(对数(n ))O(log⁡(n))\mathcal{O}(\log(n)) 当使用例如van Emde Boas树而不是更常规的二进制搜索树实现时就是这种情况。但是例如,如果我们取那么在最佳情况下,双对数算法的对数性能比对数算法高(大约为5)。而且一般来说,实现起来更加棘手和复杂。n &lt; 106n&lt;106n < 10^6555 考虑到我个人比VEB树更喜欢BST,您怎么看? 一个人可以很容易地证明: ∀ Ñ &lt; 106。日志 ñ日志(日志(n ))&lt; 5.26146∀n&lt;106. log⁡nlog⁡(log⁡(n))&lt;5.26146\qquad \displaystyle \forall n < 10^6.\ \frac{\log n}{\log(\log(n))} < 5.26146

1
通过虚部特征多项式求解递归
在算法分析中,您通常必须解决重复问题。除了主定理,替换和迭代方法外,还有一种使用特征多项式的方法。 说我的结论是一个特征多项式有虚根,即X 1 = 1 + 我和X 2 = 1 - 我。那我就不能用x2−2x+2x2−2x+2x^2 - 2x + 2X1个= 1 + 我x1=1+ix_1 = 1+iX2= 1 - 我x2=1−ix_2 =1-i C1个⋅ Xñ1个+ c2⋅ Xñ2c1⋅x1n+c2⋅x2n\qquad c_1\cdot x_1^n + c_2\cdot x_2^n 获得解决方案,对吗?在这种情况下我应该如何进行?
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.