Tag: algorithm

俄罗斯方块片旋转algorithm

什么是代表和旋转俄罗斯方块游戏的最好的algorithm(和解释)? 我总是觉得片段旋转和表示方式混乱。 大多数俄罗斯方块游戏似乎在每次轮换时都使用一种天真的“重新制作块” http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=tetris 但是,有些使用预编码的编码数和位移来表示每一块: http://www.codeplex.com/wintris 有没有一种方法来做到这一点使用math(不知道这将工作在基于单元格的板)?

用于检测点“簇”的algorithm

我有一个分布在这个区域的“点”的2D区域。 我现在正在尝试检测点的“簇”,即具有一定高密度点的区域。 任何想法(或带有想法的文章的链接)如何优雅地检测这些区域?

O(log N)== O(1) – 为什么不呢?

每当我考虑algorithm/数据结构,我倾向于用常量来replacelog(N)部分。 哦,我知道日志(N)分歧 – 但在真实世界的应用程序中是否重要? 日志(无穷远)<100为实际目的。 我真的很好奇现实世界的例子,这不成立。 澄清: 我明白O(f(N)) 我很好奇真实世界的例子, 渐近行为比实际performance的常量更重要。 如果log(N)可以被一个常量替代,它仍然可以用O(N log N)中的一个常量代替。 这个问题是为了(a)娱乐和(b)收集争论的使用,如果我再次(关于devise的performance)的争议。

如何旋转matrix90度,而不使用任何额外的空间?

可能重复: 将图像旋转90度的algorithm? (没有额外的记忆) 说90度我的意思是说如果: A = {1,2,3, 4,5,6, 7,8,9} 然后在90度旋转A后变成: A = {7,4,1, 8,5,2, 9,6,3}

链表循环检测algorithm

我在网上读了一些关于如何在链表中find一个面试问题的方法,解决scheme(Floyd的循环寻找algorithm)有两个指针,一个比另一个快两倍,然后检查他们是否再次相遇。 我的问题是:为什么我不能只固定一个指针,只要每次向前移动另一个指针?

使用常数整数除法器进行高效的浮点除法

最近的一个问题 ,是不是允许编译器用浮点乘法来取代浮点运算,这就激励我提出这个问题。 在严格的要求下,代码转换后的结果应该与实际的除法运算按位相同,但对于二进制IEEE-754algorithm来说,对于二的幂因子是可能的。 只要除数的倒数是可以代表的,乘以除数的倒数即可得出与该除数相同的结果。 例如,乘以0.5可以代替2.0 。 然后人们想知道这样的replace是如何工作的,假设我们允许任何简短的指令序列来代替除法,但运行速度明显更快,同时提供相同的结果。 除了普通的乘法之外,还特别允许融合的乘加运算。 我在评论中指出了以下相关文章: Nicolas Brisebarre,Jean-Michel Muller和Saurabh Kumar Raina。 提前知道除数时加速正确舍入的浮点除法。 IEEE Transactions on Computers,Vol。 53,第8号,2004年8月,第1069-1072页。 本文作者所提倡的技术将计算除数y的倒数作为归一化的头尾对z h :z l如下: z h = 1 / y,z l = fma(-y,z h ,1 )/ y 。 之后,分割q = x / y然后被计算为q = fma(z h ,x,z l * x) 。 本文导出了除数y必须满足的各种条件才能使该algorithm正常工作。 正如人们容易观察到的那样,当头部和尾部的符号不同时,该algorithm存在无穷大和零的问题。 更重要的是,由于商尾zl * […]

家谱algorithm

我正在为一个介绍级别的CS课程设置一个问题,并提出了一个问题,表面上看起来很简单: 给你一个有父母姓名,出生date和死亡date的人名单。 你有兴趣找出在他们有生之年的某个时刻,他是一个父母,一个祖父母还是一个曾祖父母,等等。devise一个algorithm,把这个信息标记为一个整数(0表示这个人从来没有孩子,1表示该人是父母,2表示该人是祖父母等) 为了简单起见,您可以假设家族图是一个DAG,其无向版本是一棵树。 这里有趣的挑战是你不能只看树的形状来确定这个信息。 例如,我有八个曾祖父母,但是因为他们中没有一个在我出生的时候还活着,在他们有生之年,没有一个是曾祖父母。 我可以为这个问题提出的最好的algorithm运行时间O(n 2 ),其中n是人的数量。 这个想法很简单 – 从每个人开始一个DFS,find在该人的死亡date之前出生的家族树中最远的后裔。 但是,我很确定这不是问题的最佳解决scheme。 例如,如果graphics只是两个父母和他们的n个孩子,那么问题可以在O(n)中平凡地解决。 我希望得到的是一些algorithm,要么是O(n 2 ),要么是其运行时参数化的graphicsforms,使得宽图的速度快,而在最差的情况下,O(n 2 )案件。

拼字游戏瓷砖检查

拼字检查瓷砖,你做四个5×5的字母总共100个瓷砖。 我想做一个所有40个水平和垂直的单词是有效的。 可用拼贴的集合包含: 12×E 9 x A,I 8 x O 6×N,R,T 4 x D,L,S,U 3 x G 2×B,C,F,H,M,P,V,W,Y,空白瓦(通配符) 1×K,J,Q,X,Z 有效单词字典在这里可以find (700KB)。 大约有12000个有效的5个字母的单词。 下面是一个例子,其中所有20个水平字都是有效的: ZOWIE|PINOT YOGIN|OC t AD <= blank being used as 't' XEBEC|NALED WAITE|MERLE VINER|LUTEA ———+——— USNEA|KNOSP TAVER|JOLED SOFTA|IAMBI RIDGY|HAIT h <= blank being used as 'h' QURSH|GROUF 我想创build一个所有的垂直的也是有效的。 你能帮我解决吗? 这不是功课。 这是一个朋友问我帮忙的问题。

更快的加权抽样无需更换

这个问题导致了一个新的R包: wrswoR R的默认采样无需使用sample.int进行replace,似乎需要二次运行时间,例如使用从均匀分布中抽取的权重。 对于大样本,这很慢。 有谁知道一个更快的实现,可以从R内使用 ? 两种select是“拒绝采样replace”(请参阅​​stats.sx上的这个问题 )和Wong和Easton(1980)的algorithm(在StackOverflow答案中使用Python实现)。 感谢Ben Bolker暗示在sample.int被调用replace=F和非均匀权重时被内部调用的C函数: ProbSampleNoReplace 。 实际上,代码显示了两个嵌套for循环( random.c )。 以下是根据经验分析运行时间的代码: library(plyr) sample.int.test <- function(n, p) { sample.int(2 * n, n, replace=F, prob=p); NULL } times <- ldply( 1:7, function(i) { n <- 1024 * (2 ** i) p <- runif(2 * n) data.frame( n=n, user=system.time(sample.int.test(n, p), gcFirst=T)['user.self']) }, .progress='text' […]

有和没有replace的加权随机select

最近,我需要从列表中加权随机select元素,无论是否有replace。 虽然有一些众所周知的好的algorithm用于未加权的select,有些用于加权select而没有replace(例如resevoiralgorithm的修改),但我找不到任何用于replace的加权select的好algorithm。 我也想避免使用藏库方法,因为我正在select一个很小的列表中的一小部分,这个列表足够小,可以放在内存中。 在这种情况下有没有人有最好的方法build议? 我有我自己的解决scheme,但我希望find更有效率,更简单,或两者兼而有之。