Questions tagged «algorithm»

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

13
RGB值的加法混色算法
我正在寻找一种算法来对RGB值进行加色混合。 它像将RGB值加起来最大为256一样简单吗? (r1, g1, b1) + (r2, g2, b2) = (min(r1+r2, 256), min(g1+g2, 256), min(b1+b2, 256))
75 algorithm  colors 

19
查找两个字符串之间的公共子字符串
我想比较2个字符串并保持匹配,在比较失败的地方分开。 因此,如果我有2个字符串- string1 = apples string2 = appleses answer = apples 另一个示例,因为字符串可能包含多个单词。 string1 = apple pie available string2 = apple pies answer = apple pie 我敢肯定有一种简单的Python方式可以做到这一点,但是我无法解决,感谢您的帮助和解释。

1
寻找最少的矩形以覆盖一组矩形而不重叠的算法
我有一组矩形,我想“减少”该矩形,所以我用最少的矩形来描述与原始矩形相同的区域。如果可能的话,我希望它也很快,但是我更关心的是使矩形的数量越少越好。我现在有一种方法在大多数时间都有效。 目前,我从最左上角的矩形开始,看看是否可以在保持矩形的同时向右和向下扩展它。我这样做直到它无法再扩展,然后删除并拆分所有相交的矩形,然后将扩展的矩形添加回列表中。然后,我使用最左上角的下一个矩形再次开始该过程,依此类推。但是在某些情况下,它不起作用。例如: 使用这组三个矩形,正确的解决方案将以两个矩形结束,如下所示: 但是,在这种情况下,我的算法从处理蓝色矩形开始。这会向下扩展并分裂黄色矩形(正确)。但是,当处理完黄色矩形的其余部分时,它没有向下扩展,而是先向右扩展,然后取回先前拆分的部分。然后处理最后一个矩形,它不能向右或向下扩展,因此保留了原来的矩形集。我可以调整算法,使其首先向下扩展,然后再向右扩展。这样可以解决这种情况,但是在翻转的类似情况下会导致相同的问题。 编辑:只是为了澄清,原始的矩形集不重叠,也不必连接。如果连接了矩形的子集,则完全覆盖矩形的多边形可能会在其中带有孔。

23
在可能包含数字的字符串上排序
我需要编写一个比较字符串的Java Comparator类,但是要稍作改动。如果要比较的两个字符串在字符串的开头和结尾相同,并且中间不同的部分是整数,则根据这些整数的数值进行比较。例如,我希望以下字符串按显示顺序结束: aa bbb 3 ccc bbb 12 ccc 抄送11 ddd eee 3 ddd jpeg2000 eee eee 12 ddd jpeg2000 eee 如您所见,字符串中可能还有其他整数,所以我不能只使用正则表达式来分解任何整数。我正在考虑只是从头开始走弦直到找到不匹配的地方,然后从头开始走直到找到不匹配的地方,然后将中间的部分与正则表达式“ [0-9] +”,如果比较,则进行数值比较,否则进行词法比较。 有没有更好的办法? 更新我认为我不能保证字符串中的其他数字(可能匹配的数字)周围没有空格,或者不同的数字确实具有空格。

14
存储一百万个电话号码
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 从内存的角度来看,最有效的方法是存储100万个电话号码? 显然,这是Google的面试问题,请提出您的想法。

19
编写自己的平方根函数
您如何编写自己的函数以查找最精确的整数平方根? 对其进行谷歌搜索之后,我发现了它(从其原始链接存档),但是首先,我没有完全了解它,其次,它也是近似的。 假设平方根是最接近的整数(实际根)或浮点数。

11
如何计算文件的熵?
如何计算文件的熵?(或者我们只说一堆字节) 我有一个主意,但是我不确定它在数学上是正确的。 我的想法如下: 创建一个由256个整数组成的数组(全为零)。 遍历文件及其每个字节, 增加数组中的相应位置。 最后:计算数组的“平均值”值。 用零初始化一个计数器, 并为每个数组条目: 将条目的差值加到“平均值”的计数器上。 好吧,现在我被卡住了。如何以所有结果都在0.0到1.0之间的方式“投影”计数器结果?但是我敢肯定,这个主意还是有矛盾的... 我希望有人有更好,更简单的解决方案? 注意:我需要整个事情来对文件的内容进行假设:( 纯文本,标记,压缩或某些二进制文件,...)

15
数组将保持不变的概率是多少?
在Microsoft采访中已经问过这个问题。非常好奇地知道为什么这些人对概率提出如此奇怪的问题? 给定rand(N),一个随机生成器,生成从0到N-1的随机数。 int A[N]; // An array of size N for(i = 0; i < N; i++) { int m = rand(N); int n = rand(N); swap(A[m],A[n]); } 编辑:请注意种子是不固定的。 数组A保持不变的概率是多少? 假设数组包含唯一元素。

8
如何计算CPU使用率?
在我的桌面上,我有一个小部件,可以告诉我当前的CPU使用率。它还显示了我两个内核中每个内核的用法。 我一直想知道,CPU如何计算正在使用多少处理能力?此外,如果CPU挂断了一些密集的计算,那么它(或处理此活动的任何对象)如何检查使用情况而又不挂断?

28
交换两个变量而不使用临时变量
我希望能够交换两个变量,而无需在C#中使用临时变量。能做到吗? decimal startAngle = Convert.ToDecimal(159.9); decimal stopAngle = Convert.ToDecimal(355.87); // Swap each: // startAngle becomes: 355.87 // stopAngle becomes: 159.9
74 c#  algorithm  swap 

11
LRU缓存设计
最近最少使用(LRU)高速缓存将首先丢弃最近最少使用的项目。如何设计和实现这种高速缓存类?设计要求如下: 1)尽快找到商品 2)一旦缓存未命中并且缓存已满,我们需要尽快替换最近最少使用的项目。 如何从设计模式和算法设计上分析和实现这个问题?

14
编程原理:解决迷宫
解决迷宫的可能方法有哪些? 我有两个主意,但我认为它们不是很优雅。 基本情况:我们有一个矩阵,该矩阵中的元素以代表迷宫的方式排序,一种进出一种迷宫。 我的第一个想法是让机器人从迷宫中穿过,直到一侧离开迷宫。我认为这是一个非常缓慢的解决方案。 第二个遍历每个标记为1的连续项,检查它可以去向何处(上,右,下,左),选择一种方法,并在该处继续其路径。这甚至比第一个慢。 当然,如果我在两个交叉点使两个机器人成为多线程,速度会更快一些,但这也不是最好的方法。 需要有更好的解决方案来使机器人通过迷宫。 编辑 第一:谢谢你的美好的答案! 我的问题的第二部分是:如果我们有多维图,该怎么办?是否有特殊的做法,或者贾斯汀·L。的答案是否也可以用于此? 我认为这不是解决此问题的最佳方法。 第三个问题: 哪种迷宫求解器算法最快?(完全假设)
73 algorithm  maze 

10
您从这种随机打乱中得到什么分布?
著名的Fisher-Yates随机播放算法可用于随机排列长度为N的数组A: For k = 1 to N Pick a random integer j from k to N Swap A[k] and A[j] 一遍又一遍地告诉我不要犯的一个常见错误是: For k = 1 to N Pick a random integer j from 1 to N Swap A[k] and A[j] 也就是说,您不是从k到N中选择一个随机整数,而是从1到N中选择了一个随机整数。 如果您犯了这个错误怎么办?我知道结果排列不是均匀分布的,但是我不知道对结果分布有什么保证。特别是,是否有人对元素的最终位置上的概率分布有表达式?

11
智能进度条ETA计算
在许多应用程序中,我们都有一些进度条,用于文件下载,压缩任务,搜索等。我们都经常使用进度条让用户知道正在发生的事情。而且,如果我们知道一些细节,例如已完成的工作量和剩余的工作量,我们甚至可以给出时间估计,通常可以通过推断达到当前进度所需的时间来推断。 (来源:jameslao.com) 但是,我们还看到了这个“ ETA”时间显示的程序,可笑的是糟糕的。它声称将在20秒内完成文件复制,然后一秒钟后它说将需要4天,然后又闪烁了20分钟。这不仅无益,而且令人困惑!ETA变化很大的原因是,进度本身可能变化,并且程序员的数学可能过于敏感。 苹果通过避免任何准确的预测并仅给出模糊的估计来避开这种情况! (来源:autodesk.com) 这也很烦人,我是否有时间快速休息,还是我的任务将在2秒内完成?如果预测过于模糊,则根本无法进行任何预测。 简单但错误的方法 作为首轮ETA计算,大概我们都可以做一个函数,例如如果p是已经完成的小数百分比,而t是到目前为止所花费的时间,我们输出t *(1-p)/ p作为对p的估计。需要多长时间才能完成。这个简单的比率可以“正常”运行,但也很糟糕,尤其是在计算结束时。如果您的缓慢下载速度使副本在一整夜里缓慢前进,最后在早晨,则出现了一些情况,并且副本开始以全速以100倍的速度全速运行,您的ETA完成了90%时可能会说“ 1小时”和10秒后来您达到95%,ETA会说“ 30分钟”,这显然是一个令人尴尬的猜测。.在这种情况下,“ 10秒”是一个更好得多的估计。 发生这种情况时,您可能会考虑将计算更改为使用最新速度而非平均速度来估计ETA。您可以获取最近10秒钟的平均下载速率或完成率,并使用该速率来预测完成时间。在之前的过夜下载(最终速度加快)示例中,该方法的效果很好,因为最终它会给出非常好的最终完成估算值。但这仍然有很大的问题..当您的速率在短时间内快速变化时,它会导致您的ETA剧烈反弹,并且您得到“在20秒内完成,在2小时内完成,在2秒内完成,在30秒内完成分钟”迅速显示出编程的耻辱。 实际问题: 给定计算的时间历史,计算任务完成时间的最佳方法是什么?我不是在寻找指向GUI工具包或Qt库的链接。我问的算法来生成最明智的和准确的完成时间估计。 数学公式是否成功?某种平均,可能是通过使用10秒以上的速率的平均值,1分钟以上的速率和1小时以上的速率的平均值?某种人工过滤,例如“如果我的新估计值与先前的估计值相差太大,将其调低,不要让其反弹太多”?某种花式历史分析,您可以在其中整合进度与时间进度,以找到费率的标准偏差,从而在完成时提供统计误差指标? 您尝试过什么,什么最有效?

20
测试数字是否为斐波那契
我知道如何制作斐波那契数字列表,但我不知道如何测试给定数字是否属于斐波那契列表-一种想到的方法是生成fib列表。直到该数字为止,并查看它是否属于数组,但是必须有另一个更简单,更快速的方法。 有任何想法吗 ?

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.