Questions tagged «algorithm»

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

9
比较两个图像的算法
给定两个不同的图像文件(以我选择的任何格式),我需要编写一个程序来预测如果一个文件是另一个文件的非法复制的机会。副本的作者可能会做诸如旋转,制作负片或添加琐碎细节(以及更改图像尺寸)之类的事情。 您知道执行这种工作的算法吗?



5
按顺时针顺序对点排序?
给定一个x,y点数组,如何按顺时针顺序(在它们的整体平均中心点附近)对该数组的点排序?我的目标是将这些点传递给线创建函数,以得到看起来很“实心”的东西,尽可能凸,没有线相交。 对于它的价值,我正在使用Lua,但任何伪代码都将不胜感激。 更新:作为参考,这是基于Ciamej出色答案的Lua代码(忽略我的“ app”前缀): function appSortPointsClockwise(points) local centerPoint = appGetCenterPointOfPoints(points) app.pointsCenterPoint = centerPoint table.sort(points, appGetIsLess) return points end function appGetIsLess(a, b) local center = app.pointsCenterPoint if a.x >= 0 and b.x < 0 then return true elseif a.x == 0 and b.x == 0 then return a.y > b.y end …

15
在数组中找出三个和的总和最接近给定数字的元素
给定一个整数数组A 1,A 2,...,A n,包括负数和正数,以及另一个整数S。现在我们需要在数组中找到三个不同的整数,它们的和最接近给定的整数S如果存在多个解决方案,那么任何一个都可以。 您可以假定所有整数都在int32_t范围内,并且计算总和不会发生算术溢出。S没什么特别,只是一个随机选择的数字。 除了蛮力搜索以外,还有没有其他有效的算法可以找到这三个整数?
155 arrays  algorithm 

7
将一个向量复制到另一个向量的快速方法
我更喜欢两种方式: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } 你怎么做呢?
155 c++  algorithm  stl 

10
什么是好的速率限制算法?
我可以使用一些伪代码,或者更好的Python。我正在尝试为Python IRC机器人实现一个限速队列,并且部分起作用,但是如果有人触发的消息少于限制(例如,限速为每8秒5条消息,而该人仅触发4条消息),并且下一个触发时间超过8秒(例如16秒后),机器人将发送消息,但队列已满,机器人将等待8秒,即使由于8秒钟的时间已过去也不需要它。

11
Dijkstra的算法和A-Star相比如何?
我一直在研究Mario AI竞赛中的成员正在做的事情,其中​​有些人利用A *(A星)路径算法构建了一些非常简洁的Mario机器人。 (Mario A * Bot在行动中的视频) 我的问题是,A-Star与Dijkstra相比如何?看着它们,它们看起来很相似。 为什么有人会使用另一个?尤其是在游戏中使用路径时?

30
盘旋成螺旋状
一个朋友需要一种算法,该算法可以让他遍历NxM矩阵的元素(N和M为奇数)。我想出了一个解决方案,但我想看看我的SO同事是否可以想出更好的解决方案。 我将我的解决方案发布为该问题的答案。 示例输出: 对于3x3矩阵,输出应为: (0,0)(1,0)(1,1)(0,1)(-1,1)(-1,0)(-1,-1)(0,-1)(1,-1 ) 此外,该算法应支持非平方矩阵,因此对于5x3矩阵,输出应为: (0,0)(1,0)(1,1)(0,1)(-1,1)(-1,0)(-1,-1)(0,-1)(1,-1 )(2,-1)(2,0)(2,1)(-2,1)(-2,0)(-2,-1)


5
地图平铺算法
地图 我使用Perlin噪声高度图使用Javascript创建基于图块的RPG,然后根据噪声的高度分配图块类型。 地图最终看起来像这样(在小地图视图中)。 我有一个相当简单的算法,它从图像上的每个像素中提取颜色值,并将其转换为整数(0-5),具体取决于其在(0-255)之间的位置,该位置对应于tile字典中的tile。然后将此200x200数组传递给客户端。 然后,引擎根据数组中的值确定切片并将其绘制到画布上。因此,我最终得到了具有逼真的外观的有趣世界:山脉,海洋等。 现在,我想做的下一件事是应用某种混合算法,如果邻居不是同一类型,它将导致瓦片无缝混合到其邻居中。上面的示例地图是玩家在小地图中看到的。在屏幕上,他们看到了用白色矩形标记的部分的渲染版本。其中图块是用其图像而不是单色像素渲染的。 这是用户在地图上看到的示例,但与上面的视口显示的位置不同! 我希望这种转变能够发生。 算法 我想出了一个简单的算法,该算法可以遍历视口中的地图,并在每个图块的顶部渲染另一个图像,前提是该图块位于不同类型的图块旁边。(不更改地图!仅渲染一些额外的图像。)该算法的想法是对当前图块的邻居进行剖析: 这是引擎可能必须渲染的示例场景,当前图块是标有X的图块。 创建了一个3x3数组,并读取了周围的值。因此,在本示例中,数组看起来像。 [ [1,2,2] [1,2,2] [1,1,2] ]; 然后,我的想法是针对可能的图块配置制定一系列案例。在非常简单的水平上: if(profile[0][1] != profile[1][1]){ //draw a tile which is half sand and half transparent //Over the current tile -> profile[1][1] ... } 得到以下结果: 这是从[0][1]到的过渡[1][1],但不是从[1][1]到的过渡[2][1],这里仍然存在硬性边缘。因此,我认为在那种情况下必须使用角砖。我创建了两个3x3的Sprite工作表,以为可以容纳所有可能需要的图块组合。然后,我为游戏中的所有图块复制了此图(白色区域是透明的)。每种类型的图块最终为16个图块(不使用每个Spritesheet上的中心图块。) 理想结果 因此,有了这些新的图块和正确的算法,示例部分将如下所示: 但是我所做的每一次尝试都失败了,算法中总是存在一些缺陷,并且模式最终变得很奇怪。我似乎无法正确处理所有情况,总的来说,这似乎是一种糟糕的做法。 一个办法? 因此,如果任何人都可以提供关于我如何创建此效果的替代解决方案,或者提供什么方向来编写分析算法,那么我将不胜感激!

18
如何从平面结构有效地构建树?
我有一堆扁平结构的物体。这些对象具有ID和ParentID属性,因此可以排列在树中。它们没有特定的顺序。每个ParentID属性不一定都与ID结构中的匹配。因此,它们可能是从这些对象中出现的几棵树。 您将如何处理这些对象以创建结果树? 我离解决方案并不遥远,但我敢肯定,这远非最佳方案... 我需要创建这些树,然后以正确的顺序将数据插入数据库。 没有循环引用。当ParentID == null或在其他对象中找不到ParentID时,节点是RootNode

30
如果该行或列包含0,则将矩阵中的每个单元格设置为0
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 给定一个0x和1s的NxN矩阵。将包含a的每一行设置0为all 0,并将包含a的每一列设置0为all 0。 例如 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 结果是 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 …

30
3个或更多数字的最小公倍数
如何计算多个数字的最小公倍数? 到目前为止,我只能在两个数字之间进行计算。但是不知道如何扩展它以计算3个或更多数字。 到目前为止,这就是我的做法 LCM = num1 * num2 / gcd ( num1 , num2 ) 使用gcd可以计算数字的最大公约数。使用欧几里得算法 但我不知道如何计算3个或更多数字。
152 algorithm  math  lcm 

30
如何创建最紧凑的映射n→isprime(n)直到极限N?
自然地,因为bool isprime(number)会有可以查询的数据结构。 我定义了最佳算法,该算法将生成在((1,N])范围内具有最低内存消耗的数据结构,其中N是常数。这 只是我要查找的示例:我可以表示每个奇数以一位为例,例如对于给定的数字范围(1,10],从3开始:1110 下面的字典可以压缩更多,对吧?我可以通过一些工作消除5的倍数,但是以1、3、7或9结尾的数字必须存在于位数组中。 我该如何解决这个问题?

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.