我有一个二维的对象数组。每个对象在任何时候都具有一些(可变的)分数(即,在时间t的对象的分数不一定是在时间t + 1的对象的分数)。我想找到最有效的算法,它将复制任何比其邻居更高分数的对象,并将该副本放入邻居的位置。 1
我的第一个冲动是天真的解决方案:
然而,对于nxn数组,这似乎是O(n 4 )(n 2 可能的n 2 检查的迭代次数) ,这对我来说似乎很慢。由于我的算法知识非常差,我认为问一下这种方法是否更快是明智的。
更新
我刚刚想到,更换一次“通过”可能会更快,然后检查所有新创建的(即克隆的)对象是否具有其邻居的最高分数(即,是局部最大值)。如果他们是伟大的,那么正确的事情发生了 - 如果他们不是,那么用一份得分最高的邻居替换他们。这可能会减少所需的迭代次数(虽然它需要一些好的簿记才能保持一切顺利!) - 还有更快的方法吗?
**脚注**
答案 0 :(得分:3)
除非我错误地阅读了这个问题,否则显而易见的解决办法似乎是:
old
和新数组new
。new[i][j]
,请将其设置为五个可能值中的最大值:old[i][j]
,old[i-1][j]
,old[i][j-1]
,old[i+1][j]
,old[i][j+1]
。new
现在是时间步长t + 1的更新数组。