Questions tagged «algorithm»

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


5
了解Dijkstra算法的时间复杂度计算
据我了解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法。它没有按预期的方式出现,这使我逐步了解了它。 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数为V-1。假设E表示连接到每个顶点的V-1边。 在最小堆中查找和更新每个相邻顶点的权重为O(log(V))+ O(1)或O(log(V))。 因此,从上面的步骤1和步骤2开始,更新顶点的所有相邻顶点的时间复杂度为E *(logV)。或E*logV。 因此,所有V个顶点的时间复杂度为V *(E * logV)即O(VElogV)。 但是Dijkstra算法的时间复杂度为O(ElogV)。为什么?

22
如何获得两个数组之间的交集作为新数组?
在各种情况下,我多次面对这个问题。尽管我熟悉C或Java,但它对所有编程语言都是通用的。 让我们考虑两个数组(或集合): char[] A = {'a', 'b', 'c', 'd'}; char[] B = {'c', 'd', 'e', 'f'}; 如何获得两个数组之间的公共元素作为新数组?在这种情况下,数组A和B的交集为char[] c = {'c', 'd'}。 我想避免一个数组在另一个数组内的重复迭代,这将使执行时间增加(A的长度乘以B的长度),这对于大型数组而言实在太多了。 有什么方法可以在每个数组中进行一次传递来获取公共元素?
70 java  c++  c  algorithm 


10
C如何将“二叉树”绘制到控制台上
关闭。这个问题需要调试细节。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 可以使用哪些算法在控制台中绘制二叉树?该树用C实现。例如,编号为:2 3 4 5 8的BST在控制台中显示为:

8
问题解决/算法技能是诀窍还是可以通过实践发展?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 每当我遇到一个棘手的问题,并且如果无法找出确切的解决方案或无法开始时,我都会与自己进行这种永无休止的讨论,如下所示: 解决问题/数学/算法技巧是有天赋的(不是您可以通过实践来学习,通过实践,您只能掌握以前已经解决的问题的类型) 只有上过好学校的人才能做到,因为他们早就学会了。 您有什么想法,一个人可以通过艰苦的工作来解决问题/算法,而又需要一个额外的基因吗?
70 algorithm 


8
创建色轮的功能[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 这是我多次伪解决过的事情,但从未找到解决方案。 问题是想出一种生成N颜色的方法,该颜色在N参数处尽可能地可区分。


10
快速简单的哈希码组合
人们能否推荐快速简单的方法来组合两个对象的哈希码。我没有太担心冲突,因为我有一个哈希表,该哈希表可以有效地处理该问题,我只希望有一些东西可以尽快生成代码。 围绕SO和Web进行阅读似乎有一些主要的候选人: 异或 使用素数乘法进行异或 简单的数字运算,例如乘法/除法(带有溢出检查或环绕) 生成一个String,然后使用String类的Hash Code方法 人们会推荐什么,为什么?
70 c#  algorithm  hash  hashcode 


6
为什么贪婪的硬币兑换算法不适用于某些硬币集?
我了解用于硬币找零问题的贪婪算法(如何用尽可能少的硬币数目支付一定的金额)如何工作-它总是选择面额最大的硬币而不超过剩余金额-并且总是能找到正确的解决方案特定的硬币套。 但是对于某些硬币集,贪婪算法的总和会失败。例如,对于集合{1, 15, 25}和总和30,贪婪算法首先选择25,剩下的余数为5,然后选择5个1表示总共6个硬币。但是,使用最少数量的硬币的解决方案是选择15次两次。 一组硬币必须满足什么条件,以便贪婪算法找到所有和的最小解?

9
从3D点云进行曲面重建的强大算法?
我正在尝试找出可以从3D范围数据进行曲面重建的算法。乍一看,Ball数据透视算法(BPA)和泊松曲面重构是更成熟的方法? 除了BPA和Poisson曲面重建算法以外,在该领域还有哪些已建立的,更健壮的算法? 推荐的研究出版物? 有可用的源代码吗?

10
逆斐波那契算法?
有数十种方法可以计算任意n的F(n),其中许多具有很大的运行时和内存使用率。 但是,假设我想问相反的问题: 给定F(n)的n> 2,n是多少? (因为F(1)= F(2)= 1且没有明确的逆,所以n> 2的限制在其中)。 解决这个问题的最有效方法是什么?通过枚举斐波那契数并在达到目标数时停止,可以很容易地在线性时间内完成此操作,但是有什么方法可以比这更快吗? 编辑:当前,此处发布的最佳解决方案使用O(log n)内存在O(log n)时间运行,假设数学运算在O(1)中运行并且一个机器字可以在O(1)空间中保存任何数字。我很好奇是否有可能降低内存需求,因为您可以使用O(1)空间计算斐波那契数。

11
滚动方差算法
我正在尝试找到一种有效的,数值稳定的算法来计算滚动方差(例如,一个20周期滚动窗口的方差)。我知道Welford算法可以有效地计算数字流的运行方差(它只需要一次通过),但是不确定是否可以将其应用于滚动窗口。我也想解决方案,以避免在顶部讨论的准确性问题,这篇文章由John D.库克。任何语言的解决方案都可以。

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.