Questions tagged «algorithm»

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

12
C语言的滚动中值算法
我目前正在研究一种算法,以在C语言中实现滚动中值过滤器(类似于滚动均值过滤器)。从我对文献的搜索来看,似乎有两种相当有效的方法来实现。首先是对值的初始窗口进行排序,然后执行二进制搜索以插入新值,并在每次迭代时都删除现有值。 第二种方法(来自Hardle和Steiger,1995年,JRSS-C,算法296)构建了一个双端堆结构,一端为maxheap,另一端为minheap,中间为中值。这产生了线性时间算法,而不是O(n log n)。 这是我的问题:实施前者是可行的,但是我需要在数百万个时间序列上运行它,因此效率非常重要。事实证明,后者非常难以实施。我在R的stats软件包的代码的Trunmed.c文件中找到了代码,但这是相当难以理解的。 有人知道线性时间滚动中值算法的编写良好的C实现吗? 编辑:链接到Trunmed.c代码http://google.com/codesearch/p?hl=zh-CN&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114 c  algorithm  r  statistics  median 

30
给定一些美元价值时,如何查找硬币的所有组合
几个月前,我发现了一段我正在编写的准备面试的代码。 根据我的评论,它正在尝试解决此问题: 给定一些美分的美元价值(例如200 = 2美元,1000 = 10美元),找到构成美元价值的所有硬币组合。只能携带几美分(1¢),镍币(5¢),角钱(10¢)和四分之一(25¢)。 例如,如果给出100,则答案应为: 4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies 3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies etc. 我相信这可以通过迭代和递归的方式解决。我的递归解决方案有很多问题,我想知道其他人如何解决这个问题。这个问题的困难部分是使其尽可能高效。



8
哈希表真的可以是O(1)吗?
哈希表可以实现O(1)似乎是常识,但是这对我来说从来没有任何意义。有人可以解释一下吗?这是两种情况: 答: 该值是一个小于哈希表大小的整数。因此,该值是其自己的哈希,因此没有哈希表。但是,如果有的话,它将是O(1),但效率仍然很低。 B. 您必须计算值的哈希值。在这种情况下,对于要查找的数据大小,顺序为O(n)。在您完成O(n)工作后,查找可能是O(1),但在我眼里仍然是O(n)。 而且,除非您拥有完美的哈希表或大型哈希表,否则每个存储桶中可能有几项。因此,无论如何它会演变成小的线性搜索。 我认为哈希表很棒,但除非得到理论上的支持,否则我不会获得O(1)的名称。 Wikipedia的有关哈希表的文章始终引用恒定的查找时间,并且完全忽略了哈希函数的成本。这真的是公平的措施吗? 编辑:总结一下我学到的东西: 从技术上讲,这是正确的,因为不需要散列函数使用键中的所有信息,因此可以是恒定时间,并且因为足够大的表可以使冲突降低到接近恒定时间。 在实践中确实如此,因为随着时间的推移,只要选择哈希函数和表大小以最大程度地减少冲突,就可以解决问题,尽管这通常意味着不使用恒定时间哈希函数。

27
如何确定二叉树是否平衡?
那些学期已经有一段时间了。在一家医院担任IT专家的工作。现在尝试着做一些实际的编程。我现在正在研究二叉树,我想知道确定树是否高度平衡的最佳方法是什么。 我在想一些这样的事情: public boolean isBalanced(Node root){ if(root==null){ return true; //tree is empty } else{ int lh = root.left.height(); int rh = root.right.height(); if(lh - rh > 1 || rh - lh > 1){ return false; } } return true; } 这是一个好的实现吗?还是我错过了什么?

12
快速排列->数字->排列映射算法
我有n个元素。举个例子,假设有7个元素1234567。我知道有7个!=这7个元素的5040个排列可能。 我想要一个包含两个功能的快速算法: f(number)将0到5039之间的数字映射到唯一排列,并且 f'(排列)将排列映射回生成它的编号。 我不关心数字和排列之间的对应关系,只要每个排列都有自己的唯一编号即可。 因此,例如,我可能有一些功能 f(0) = '1234567' f'('1234567') = 0 想到的最快的算法是枚举所有排列并在两个方向上创建一个查找表,以便一旦创建表,f(0)将为O(1),f('1234567')将为a在字符串上查找。但是,这会占用大量内存,尤其是当n变大时。 谁能提出另一种可以快速运行且没有内存不足的算法?

8
使用Dijkstra算法的负权重
我试图理解为什么Dijkstra的算法不能在负权重下工作。阅读有关最短路径的示例,我试图找出以下情况: 2 A-------B \ / 3 \ / -2 \ / C 从网站: 假设所有边缘都是从左到右定向的,如果我们从A开始,Dijkstra的算法将选择使d(A,A)+ length(edge)最小的边缘(A,x),即(A,B)。然后设置d(A,B)= 2并选择另一个使d(A,y)+ d(y,C)最小的边(y,C); 唯一的选择是(A,C),它设置d(A,C)= 3。但是,它永远找不到从A到B的最短路径,即C,总长度为1。 我不明白为什么使用下面的Dijkstra实现时,d [B]不会更新为1(当算法到达顶点C时,它将在B上运行放松,看到d [B]等于2,因此更新其值为1)。 Dijkstra(G, w, s) { Initialize-Single-Source(G, s) S ← Ø Q ← V[G]//priority queue by d[v] while Q ≠ Ø do u ← Extract-Min(Q) S ← S U {u} …

30
以最佳方式在二进制搜索树中找到第k个最小元素
我需要在二进制搜索树中找到第k个最小的元素,而无需使用任何静态/全局变量。如何有效实现?我想到的解决方案是在O(n)中进行操作,这是最糟糕的情况,因为我计划对整个树进行有序遍历。但在内心深处,我觉得我没有在这里使用BST属性。我的假设解决方案正确还是有更好的解决方案?

5
约翰·卡马克(John Carmack)不寻常的快速反平方根(雷神三世)
John Carmack在Quake III源代码中具有一个特殊功能,该功能可以计算浮点数的反平方根,比常规速度快4倍(float)(1.0/sqrt(x)),其中包括一个奇怪的0x5f3759df常数。请参见下面的代码。有人可以逐行解释这里到底发生了什么,为什么这样做比常规实现快得多? float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( float * …

30
JavaScript中多个数组的笛卡尔积
Наэтотвопросестьответына 堆栈溢出нарусском:Декартовопроизведениенесколькихмассивов 您将如何在JavaScript中实现多个数组的笛卡尔积? 举个例子, cartesian([1, 2], [10, 20], [100, 200, 300]) 应该回来 [ [1, 10, 100], [1, 10, 200], [1, 10, 300], [2, 10, 100], [2, 10, 200] ... ]

19
计算游戏每秒的帧数
什么是计算游戏中每秒帧数的好算法?我想将其显示为屏幕角落的数字。如果仅查看渲染最后一帧所花费的时间,则数字变化太快。 如果您的答案更新了每一帧,并且当帧速率增加或减少时收敛不收敛,则奖励积分。

4
MapReduce排序算法如何工作?
Terasort基准是用于演示MapReduce功能的主要示例之一。我在理解MapReduce环境中使用的排序算法的基础时遇到了麻烦。 对我而言,排序仅涉及确定元素相对于所有其他元素的相对位置。因此,分类涉及将“所有”与“所有”进行比较。您的平均排序算法(快速,冒泡,...)简单地以一种聪明的方式做到了。 在我看来,将数据集分为多个部分意味着您可以对单个部分进行排序,然后仍然必须将这些部分集成到“完整的”完全排序的数据集中。鉴于TB数据集分布在数千个系统中,我希望这是一项艰巨的任务。 那么这到底是怎么做的呢?该MapReduce排序算法如何工作? 感谢您帮助我理解。

14
Python中的模块化乘法逆函数
一些标准的Python模块是否包含用于计算数字(即诸如)的模数乘法逆的函数?Google似乎对此没有任何好的暗示。y = invmod(x, p)x*y == 1 (mod p) 当然,可以提出扩展的欧几里得算法的自酿10线性算法,但是为什么要重新发明轮子呢? 例如,Java的BigIntegerhas modInverse方法。Python没有类似的东西吗?
110 python  algorithm 

27
国际象棋有一个完美的算法吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 改善这个问题 最近,我正在与一个非编码人员讨论国际象棋计算机的可能性。我在理论上并不精通,但我认为我已经足够了。 我认为不可能有一个总是在国际象棋上获胜或失败的确定性图灵机。我认为,即使您搜索player1 / 2动作的所有组合的整个空间,计算机在每个步骤中决定的单个动作都是基于启发式的。基于试探法,它不一定击败对手可以做的所有动作。 相反,我的朋友认为,如果计算机从未采取过“错误”举动(无论您如何定义),它总是会赢或平。但是,作为一名使用CS的程序员,我知道即使是明智的对手,即使您的明智选择也会迫使您最终做出“错误”举动。即使您什么都知道,您的下一个举动就是匹配启发式算法。 大多数象棋计算机都尝试将可能的最终游戏与进行中的游戏进行匹配,这本质上是一种动态编程回溯。同样,最终的比赛是可以避免的。 编辑:嗯...看起来我在这里弄乱了羽毛。非常好。 再想一想,解决象棋这样的有限游戏似乎没有理论上的问题。我认为国际象棋比棋子要复杂一些,因为胜利不一定是棋子的精疲力尽,而是队友。我最初的断言可能是错误的,但是我想我再次指出了(正式)尚未令人满意地证明的内容。 我想我的思想实验是,每当在树上取一个分支时,算法(或记忆的路径)就必须为对手移动的任何可能分支找到一条通往配偶的路径(不交配)。讨论之后,我将购买所有给定的内存,这些内存超出了我们的梦想。

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.