Questions tagged «algorithm»

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

22
确定井字游戏的算法
我已经用Java编写了一个井字游戏,而我目前确定游戏结束的方法说明了游戏结束的以下可能情况: 董事会成员已满,尚未宣布获胜者:游戏是平局。 克罗斯赢了。 圈子赢了。 不幸的是,这样做会从表中读取这些方案的预定义集。考虑到一个棋盘上只有9个空格,这并不一定很糟糕,因此桌子有些小,但是有更好的算法来确定游戏是否结束吗?确定某人是否中奖是问题的关键,因为检查9个空格是否已满是微不足道的。 表方法可能是解决方案,但是如果不是,那是什么?另外,如果板子尺寸n=9不对怎么办?如果它是一个更大的板,比如n=16,n=25等,造成连续放置物品的数量取胜是x=4,x=5等?适用于所有对象的通用算法n = { 9, 16, 25, 36 ... }?

12
寻找一种好的世界地图生成算法
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在开发类似《文明》的游戏,并且正在寻找一种生成类似地球的世界地图的良好算法。我已经尝试了一些替代方法,但是还没有找到真正的赢家。 一种选择是使用Perlin噪声生成高度图,并添加一定水平的水,以使世界上约30%的土地为土地。虽然Perlin噪声(或类似的基于分形的技术)经常用于地形并且相当真实,但它并不能提供很多控制所得大陆的数量,大小和位置的方式,我想从游戏角度来看。 第二种选择是从随机放置的单块种子开始(我正在研究一个瓷砖网格),确定该大陆所需的尺寸,然后每转一圈添加一个与现有大陆水平或垂直相邻的瓷砖,直到您已达到所需的大小。重复其他大洲。该技术是《文明4》中使用的算法的一部分。问题在于,放置前几个大洲之后,有可能会选择一个被其他大洲包围的起始位置,因此不适合新的大洲。而且,它倾向于使各大陆之间的距离太近,导致某些东西看起来比大洲更像一条河流。 有没有人碰巧知道一个好的算法,可以在基于网格的地图上生成现实的大洲,同时又能控制其数量和相对大小?
97 algorithm  map  terrain 

11
Euclid算法的时间复杂度
我很难确定Euclid最大的公分母算法的时间复杂度。该伪代码算法为: function gcd(a, b) while b ≠ 0 t := b b := a mod b a := t return a 它似乎取决于a和b。我的想法是时间复杂度为O(a%b)。那是对的吗?有没有更好的方法可以写呢?

5
一个想要了解动态编程的人的简单示例[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 改善这个问题 我正在为想学习动态编程的人寻找一个易于理解的示例。关于什么是动态编程,这里有很好的答案。斐波那契数列是一个很好的例子,但它太小而无法刮擦表面。尽管我还没有上算法课,但看起来这是一个很棒的主题,希望它会在我春季的清单上。


4
lucene如何索引文件?
我读了一些有关Lucene的文件。我也通过此链接(http://lucene.sourceforge.net/talks/pisa)阅读了文档。 我不太了解Lucene如何为文档建立索引,也不了解Lucene用于索引的算法是什么? 在上面的链接上,它说Lucene使用此算法建立索引: 增量算法: 维护一堆细分指数 为每个传入文档创建索引 将新索引推入堆栈 令b = 10为合并因子;M = 8 for (size = 1; size < M; size *= b) { if (there are b indexes with size docs on top of the stack) { pop them off the stack; merge them into a single index; push the …

4
Eratosthenes算法的筛选时间复杂度
从维基百科: 该算法的复杂性是 O(n(logn)(loglogn))位运算。 你怎么到达的? 包含loglogn术语的复杂性告诉我在sqrt(n)某处。 假设我在前100个数字(n = 100)上运行筛子,假设将数字标记为复合数字需要固定的时间(数组实现),那么我们使用的次数mark_composite()将类似于 n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2) 并且要查找下一个质数(例如,7在除掉所有倍数为的数字后跳至5),操作数将为O(n)。 因此,复杂度为O(n^3)。你同意吗?


16
创建学校时间表的算法
我一直想知道是否存在用于创建学校时间表的算法的已知解决方案。基本上,它是针对给定的班级-主体-老师关联优化“小时分散”(在教师和班级情况下均如此)。我们可以假设我们在输入时有一组相互关联的班级,课程主题和教师,并且时间表应该在上午8点至下午4点之间。 我猜可能没有准确的算法,但是也许有人知道很好的近似或提示来开发它。

10
获取数字的类似于excel的列名的算法
我正在处理一个生成一些Excel文档的脚本,我需要将一个数字转换为其等效的列名。例如: 1 => A 2 => B 27 => AA 28 => AB 14558 => UMX 我已经写了一个算法来做到这一点,但是我想知道是更简单还是更快的方法: function numberToColumnName($number){ $abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $abc_len = strlen($abc); $result_len = 1; // how much characters the column's name will have $pow = 0; while( ( $pow += pow($abc_len, $result_len) ) < $number ){ …

30
程序员难题:在整个游戏中对棋盘状态进行编码
严格来说不是一个问题,更像是一个难题... 多年来,我参与了一些新员工的技术面试。除了询问标准的“您是否知道X技术”问题之外,我还尝试了解它们如何解决问题。通常,我会在面试的前一天通过电子邮件将问题发送给他们,并希望他们在第二天提出解决方案。 通常,结果会很有趣-错误,但是很有趣-如果该人可以解释为什么采用特定方法,那么该人仍然会得到我的推荐。 所以我想我应该向Stack Overflow观众提出我的一个问题。 问题:您认为编码国际象棋游戏(或其子集)状态的最节省空间的方法是什么?也就是说,假设棋盘上的棋子是依法排列的,则对初始状态和游戏中所有后续棋步进行编码。 答案不需要任何代码,只需描述您要使用的算法即可。 编辑:正如其中一位海报指出的那样,我没有考虑过两次走步之间的时间间隔。也可以考虑将其作为可选的额外项目:) EDIT2:只是为了进一步说明...请记住,编码器/解码器是规则感知的。真正需要存储的唯一内容是播放器的选择-可以假定编码器/解码器知道其他任何内容。 EDIT3:在这里挑选获奖者将很困难:)很多很棒的答案!

13
存储数千个电话号码的最有效方法
这是一个Google面试问题: 大约有数千个电话号码要存储,每个电话号码有10位数字。您可以假设每个千位数字中的前5位数字相同。您必须执行以下操作:搜索是否存在给定号码。b。打印所有号码 什么是最有效的节省空间的方法? 我回答了哈希表,然后回答了霍夫曼编码,但我的面试官说我没有朝着正确的方向前进。请在这里帮助我。 使用后缀特里可以帮助吗? 理想情况下,每个数字存储1000个数字需要占用4个字节,因此总共要存储4000个字节才能存储1000个数字。从数量上讲,我希望将存储空间减少到<4000字节,这就是我的面试官向我解释的内容。


17
如何测量两个图像之间的相似度?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 改善这个问题 我想将一个应用程序(可能是网页)的屏幕快照与先前获取的屏幕快照进行比较,以确定该应用程序是否正确显示了自己。我不希望进行完全匹配比较,因为方面可能略有不同(对于Web应用程序,取决于浏览器,某些元素可能位于稍有不同的位置)。它应该衡量屏幕截图的相似程度。 是否有已经执行此操作的库/工具?您将如何实施?

2
升压魔术数字:: hash_combine
所述boost::hash_combine模板函数采用一个散列(称为参考seed)和对象v。根据文档,它结合seed了vby 的哈希 seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); 我可以看到这是确定性的。我明白了为什么要使用异或。 我敢打赌,这种加法有助于将相似的值广泛地映射,因此探测哈希表不会崩溃,但是有人可以解释魔术常数是什么吗?

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.