Tag: algorithm

炸弹algorithm

我有一个由非负整数组成的nxmmatrix。 例如: 2 3 4 7 1 1 5 2 6 2 4 3 4 2 1 2 1 2 4 1 3 1 3 4 1 2 1 4 3 2 6 9 1 6 4 “放下炸弹”将目标单元和所有八个邻居的数量减less一个,最less为零。 xxxx X x xxx 什么是algorithm,将确定所需的最小数量的炸弹减less所有单元格为零? B选项(由于我不是一个仔细的读者) 其实问题的第一个版本不是我正在寻找的答案。 我没有仔细阅读整个任务,还有额外的限制,让我们说: 那简单的问题呢,在sorting时必须不增加: 8 7 6 6 5是可能的input顺序 7 8 5 […]

什么是遗传algorithm/遗传编程解决scheme的好例子?

遗传algorithm (GA)和遗传编程 (GP)是有趣的研究领域。 我想知道你使用GA / GP解决的具体问题,以及如果你没有推出自己的库,你使用了哪些库/框架。 问题: 您使用GA / GP解决了哪些问题? 你使用了什么库/框架? 我正在寻找第一手的经验,所以请不要回答,除非你有这个。

检查列表中的所有元素是否相同

我需要以下function: input :一个list 输出 : 如果input列表中的所有元素使用标准相等运算符评估为相等,则为True ; 否则为False 。 性能 :当然,我宁愿不招致任何不必要的开销。 我觉得最好是: 遍历列表 比较相邻的元素 和所有的结果布尔值 但我不确定什么是最Python的方式来做到这一点。 编辑 : 谢谢你所有的好的答案。 我评价了几个,在@KennyTM和@Ivan van der Wijk解决scheme之间select真的很困难。 短路特性的缺乏只会影响早期具有不相等元素的长input(超过50个元素)。 如果这种情况经常发生(多长时间取决于列表可能会多长时间),则需要进行短路。 最好的短路algorithm似乎是@KennyTM checkEqual1 。 但是,这付出了巨大的代价: 性能几乎相同的列表中高达20倍 在短名单上的performance高达2.5倍 如果具有早期不相等元素的长input不会发生(或者很less发生),则不需要短路。 那么,迄今为止最快的是@Ivo van der Wijk解决scheme。

有没有什么情况下,你更喜欢更高的大O时间复杂度algorithm而不是更低的?

是否有任何情况下你会更喜欢O(log n)时间复杂度到O(1)时间复杂度? 或者O(n)到O(log n) ? 你有什么例子吗?

获取一个专注于中心的随机数字

是否有可能得到一个1-100之间的随机数,并保持结果主要在40-60范围内? 我的意思是,它会很less出现这个范围,但我希望它主要在这个范围内… JavaScript / jQuery可以吗? 现在我只是使用基本的Math.random() * 100 + 1 。

如何构build堆是O(n)时间复杂度?

有人可以帮助解释如何build立一个堆是O(n)的复杂性? 插入一个项目到堆中是O(log n) ,并且插入被重复n / 2次(剩下的是叶子,并且不能违反heap属性)。 所以,这意味着复杂性应该是O(n log n) ,我想。 换句话说,对于我们“heapify”的每个项目,它有可能不得不为每个级别过滤一次堆(迄今为止)。 我错过了什么?

检测重叠周期的algorithm

我必须检测两个时间段是否重叠。 每个时期都有开始date和结束date。 我需要检测我的第一个时间段(A)是否与另一个(B / C)重叠。 在我的情况下,如果B的开始等于A的结束,它们不重叠(也是相反的) 我发现以下情况: 所以其实我是这样做的: tStartA < tStartB && tStartB < tEndA //For case 1 OR tStartA < tEndB && tEndB <= tEndA //For case 2 OR tStartB < tStartA && tEndB > tEndA //For case 3 (在案例1或案例2中考虑了案例4) 它工作 ,但似乎不是很有效。 所以,首先是在c#中有一个现有的类,可以模拟这个(时间段),像时间安排,但有一个固定的开始date。 其次:是否已经有ac#代码(就像在Datetime类中)可以处理这个? 第三:如果不是的话,你会怎么做这个比较最快?

Redis使用的底层数据结构是什么?

我试图在一个确定的列表中回答两个问题: Redis使用的底层数据结构是什么? 每种types的主要优点/缺点/用例是什么? 所以,我读过Redis列表实际上是用链表实现的。 但对于其他types,我无法挖掘任何信息。 另外,如果有人偶然发现了这个问题,而且没有对修改或访问不同数据结构的优缺点进行高层次的总结,那么他们也会有一个完整的清单, 以便最好地使用特定的types来引用。 具体来说,我正在寻找概述所有types:string,列表,集,zset和哈希。 哦,到目前为止,我已经看过这些文章: http://redis.io/topics/data-types http://redis.io/topics/data-types-intro http://redis.io/topics/faq

如何在现代C ++中实现经典的sortingalgorithm?

来自C ++标准库的std::sortalgorithm(和它的cousins std::partial_sort和std::nth_element )在大多数实现中是一个更复杂和更混合的基本sortingalgorithm ,比如selectsorting,插入sorting,快速sorting,合并sorting或堆sorting。 这里和姊妹网站上有许多问题,例如https://codereview.stackexchange.com/与错误,复杂性和这些经典sortingalgorithm实现的其他方面有关。 大多数提供的实现包括原始循环,使用索引操作和具体types,并且通常在正确性和效率方面是非平凡的。 问题 :如何使用现代C ++实现上述经典sortingalgorithm? 没有原始循环 ,但将标准库的algorithm构build块与<algorithm> 迭代器接口和使用模板而不是索引操作和具体types C ++ 14风格 ,包括完整的标准库,以及句法噪声抑制器,例如auto ,模板别名,透明比较器和多态lambdaexpression式。 备注 : 有关sortingalgorithm实现的进一步参考,请参阅Wikipedia , Rosetta Code或http://www.sorting-algorithms.com/ 根据肖恩家长的惯例 (幻灯片39),一个原始循环比一个操作符的两个函数的组合更长。 所以f(g(x)); 或f(x); g(x); f(x); g(x); 或f(x) + g(x); 不是原始循环,也不是下面的selection_sort和insertion_sort循环。 我遵循Scott Meyers的术语来表示当前C ++ 1y已经作为C ++ 14,并且将C ++ 98和C ++ 03都表示为C ++ 98,所以不要为此而激怒我。 正如@Mehrdad的评论中所build议的那样,我在回答结尾提供了四个实例作为实例:C ++ 14,C ++ 11,C ++ 98和Boost和C ++ […]

八岁的大O?

我更多地询问这对我的代码意味着什么。 我从math的angular度理解了这些概念,我只是很难从概念上理解他们的意思。 例如,如果要在数据结构上执行O(1)操作,那么我知道它所执行的操作数量不会增长,因为有更多的项目。 O(n)操作将意味着您将对每个元素执行一组操作。 有人可以填空吗? 像一个O(n ^ 2)操作到底会做什么? 如果一个操作是O(n log(n)),那么这意味着什么? 还有人不得不抽烟裂口写一个O(X!)?