Questions tagged «algorithms»

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

1
在加权的单路径图中查找最短路径
有向图被认为是unipathic如果对于任意两个顶点和在曲线图G =(V,E) ,存在在从最简单的一个路径Ú到v。uuuvvvu vG=(V,E)G=(V,E)G=(V,E)uuuvvv 假设给我一个单感图GGG,使得每个边的权重为正或为负,但不包含负的权重周期。 由此,我想找到一种O(|V|)O(|V|)O(|V|)算法,该算法找到从源节点s到所有节点的所有最短路径sss。 我不确定如何解决这个问题。我正在尝试看看我如何利用它不包含负权重循环,并且当然在任何节点uuu到v之间最多只有一条简单路径这一事实vvv。


2
为什么我们不能仅通过添加一个常数使所有权重为正来找到负权重的最短路径?
我目前正在阅读算法的介绍,并由Johnson的算法得出,该算法取决于确保所有路径都是正的。 该算法取决于找到一个新的权重函数(w'),该权重函数对所有边都是正值,并保持最短路径关系的正确性。 通过计算要添加到w原始值的h(s),h(d)值来实现。 我的问题是,为什么不仅仅在图中找到最小的w并将其添加到所有边上?这将同时满足这两个条件,并且需要较少的计算。

3
说“渐近更有效”是什么意思?
当我们说算法渐近地比更有效时,这是什么意思?XXXÿÿY XXX对于所有输入,将是更好的选择。 XXX对于所有输入(小输入除外),都是更好的选择。 XXX对于大型输入以外的所有输入,都是更好的选择。 ÿÿY对于小输入,将是更好的选择。 这个问题的链接在这里。 http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/ 我以为,一种渐近有效的算法应该适用于所有输入,但是我没有明白“它适用于除小输入以外的所有输入”的原因。

3
计算第个斐波那契数的高效算法
可以使用以下递归在线性时间中计算第个斐波那契数:nnn def fib(n): i, j = 1, 1 for k in {1...n-1}: i, j = j, i+j return i 第个斐波那契数也可以计算为。但是,这对于甚至较小的都有舍入问题。可能有一些解决方法,但我宁愿不这样做。[ φ Ñ / √nnnn[φn/5–√][φn/5]\left[\varphi^n / \sqrt{5}\right]nnn 是否有一种有效的算法(值为或更好的对数)来计算不依赖浮点算术的第个斐波那契数?假定整数运算(,,,)可在恒定的时间来执行。n + - × /nnnnnn+++−−-××\times///

2
如何在具有恒定内存的线性时间内在字符串中找到所有不平衡的括号?
面试中给了我以下问题: 给出一个字符串,其中包含一些括号(不是方括号或大括号,仅是括号)与其他字母数字字符的混合,标识所有没有匹配括号的括号。 例如,在字符串“)(ab))中,索引0和5包含没有匹配括号的括号。 我提出了一个使用O(n)内存的有效O(n)解决方案,使用了堆栈,并在将括号添加到堆栈中并遍历字符串后,每当遇到封闭括号和堆栈顶部时,将其从堆栈中删除开场菜。 之后,访问员指出,可以使用恒定的内存在线性时间内解决问题(例如,除了输入占用的内存之外,没有其他内存使用)。 我问了如何,她说了一些关于从左边一次识别所有打开的parens,然后从右边再次识别所有闭合的parns ....或者相反的说法。我不是很了解,也不想让她手牵着我。 谁能澄清她建议的解决方案?
11 algorithms 

3
加法的时间复杂度
维基百科将加法的时间复杂度列为,其中是位数。nñnnñn 这是严格的理论下限吗?还是这仅仅是当前最快的已知算法的复杂性。我想知道,因为加法的复杂性强调了所有其他算术运算和使用它们的所有算法。 从理论上讲不可能获得在中运行的加法算法?还是我们必须将线性复杂度相加。o(n)Ø(ñ)o(n)

2
两组之间最接近的点对,以2D表示
我在二维平面上有两组点。我想找到最接近的双点小号,吨使得小号∈ 小号,吨∈ Ť,并且欧几里德距离之间小号,吨是尽可能小。如何有效地做到这一点?可以在O (n log n )时间内完成吗,其中n = | S | + | T | ?小号,ŤS,TS,T小号,Ťs,ts,t小号∈ 小号s∈Ss \in S吨∈ Ťt∈Tt \in T小号,Ťs,ts,tØ (ñ 日志n )O(nlog⁡n)O(n \log n)n = | 小号| + | Ť|n=|S|+|T|n = |S|+|T| 我知道,如果我给一组,那么就可以找到最接近的一对点小号,小号' ∈ 小号在Ø (ñ 日志ñ )使用的时间标准分而治之算法。但是,该算法似乎不能推广到两个集合的情况,因为S或T中两个最接近点之间的距离与这两个集合中两个最接近点之间的距离之间没有联系。小号SSs,s′∈Ss,s′∈Ss,s' \in SO(nlogn)O(nlog⁡n)O(n \log n)SSSTTT 我以为存储设置的在ķ -d树,然后为每个小号∈ 小号,使用最近邻查询找到的最近点牛逼到小号。但是,最坏情况下的运行时间可能与O (n 2)时间一样糟糕。结果表明,如果T的点是随机分布的,则每个查询的预期运行时间为O …


1
索引到模式数据库-Korf的Optimal Rubik's Cube解决方案
作为一个有趣的项目,我一直在研究Richard Korf的C#实现-使用模式数据库找到Rubik立方体的最佳解决方案。 https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf 实际上,它确实有效,我只是在尝试改善解决方案。 Korf在他的论文中提到的一件事是他如何存储和索引到模式数据库。理想情况下,我认为我们想使用一个魔方的实例来生成数组的索引。 我的问题是有关生成此索引的最佳方法。 我的解决方案是生成最小的完美哈希。这涉及将所有多维数据集保留在内存中,直到我发现整个模式数据库,然后基于此生成最小的完美哈希。根据模式数据库的大小,MPH需要花费几个小时才能运行,但由于将其保存到磁盘,因此只需要执行一次。最后,我可以丢弃仅存储MPH的多维数据集本身。这样,我可以采用随机的魔方,应用模式,然后在MPH中查找数组索引以获取估计的解决方案长度。 我相信Korf和Shultz在他们2005年发表的名为“大规模广度优先搜索”的论文中描述了一种确定多维数据集索引的更好方法。 https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf 本文描述了一种算法,该算法根据排列的字典顺序生成索引。基本上,您可以采用排列{1,2,3}并确定它是最小的,索引为0。接下来是{1,3,2},索引为1,依此类推。 我觉得我应该能够将此算法应用于魔方,以在模式数据库中获取其索引,但是我很难弄清楚它在实践中如何工作。 例如,“仅角落”模式数据库包含所有已去除其边缘贴纸的魔方。此集中正好有88,179,840个多维数据集。魔方上的任何角都可以处于24种不同状态之一。可以根据其他7个角来计算第8个角形立方体的状态,因此,只有角形图案数据库中的每个立方体具有0到23之间的7个值 例如{0、3、6、9、12、15、18、21}定义“已解决”的多维数据集,其中所有边缘贴纸均被删除。 如果我将正面旋转90度,则排列可能是:{0、3、11、23、12、15、8、20} 有没有办法从这些排列中获取索引?

1
通过笛卡尔积找到有限笛卡尔积的子集的最小覆盖
给定一个笛卡尔乘积两个有限集的的子集,我希望通过笛卡尔乘积本身的集合来找到它的最小覆盖范围。I×JI×JI \times J 例如,给定与之间的乘积,我可以观察到子集并尝试使用最少数量的笛卡尔积覆盖它。I={A,B,C}I={A,B,C}I=\{A,B,C\}J={1,2,3}J={1,2,3}J=\{1,2,3\}{(A,2),(B,3),(B,2)}{(A,2),(B,3),(B,2)}\{(A,2), (B,3), (B,2)\} 这样做的两种方法是和,都需要2个产品。次佳的解决方案可能会将其分解为3个琐碎的乘积。{A}×{2}+B×{2,3}{A}×{2}+B×{2,3}\{A\} \times \{2\} + B \times \{2,3\}{A,B}×{2}+{B}×{3}{A,B}×{2}+{B}×{3}\{A,B\}\times \{2\} + \{B\}\times \{3\} 是否可以有效地找到这种最佳覆盖率(例如,在多项式时间内)?


1
我们如何快速计算未加权二部图中的最大匹配大小?
有没有一种方法可以比计算最大匹配更有效(例如更快)地计算未加权二部图中的最大匹配的大小? 这是一个长镜头,但避免此类一次性计算通常是一个有趣的问题。 动机 我要解决的问题是match-2 ,其中两组大小不同。我需要确定是否有一个覆盖较小集合中所有顶点的匹配项。知道最大匹配的大小后,我便可以检查它是否等于或小于较小集合的大小(如果有这种可能,那么只要结果为“是,就会有一个覆盖小集合的匹配项“您实际上会知道它的大小是多少,但只有在那种情况下才知道),但这并不是绝对必要的:如果有一种方法可以在不计算大小的情况下计算出答案,那对我来说是件好事。


4
是否有基于PI的压缩算法?
我们知道π是无限的,并且很可能包含每个可能的有限数字串(析取序列)。 我最近看到了一些πfs原型,它假定您已经创建(或其他任何人)或将要创建的每个文件,该文件已经存在,因此只需提取它即可。还有piFile可以将您的文件转换为pi元数据。 已经存在BBP类型公式(作为实验数学的一部分),它使我们能够计算pi的第n个二进制数字。因此,存储我们的起始位置和数据长度,从理论上讲,我们可以提取我们感兴趣的数据。有一些反对意见认为,我们的元数据(例如,数据的偏移量)可能大于提取的数据。矩阵符号和π可以在base-256中编码,以使其效率更高(请参阅笑话)。 基于上述,我的主要问题是: 是否有基于PI的压缩算法? 如果没有,那有意义吗?还是在那个领域有研究? 也许π不是正确的,那么欧拉常数或Tau(τ)呢?有什么不同吗? 图片来源:恐龙漫画 也可以看看: 可以在合理的时间内在pi中找到任何有限位字符串吗?在SO 将索引存储到π中会不会与原始数据一样大(或更大)?在GitHub

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.