使用时间复杂度优于线性的解决方案是否有可能解决这个问题?
N个灯泡通过电线连接。每个灯泡都有一个与之相关的开关,但由于接线错误,开关也会将所有灯泡的状态改变为电流灯泡的右侧。给定所有灯泡的初始状态,找到您必须按下以打开所有灯泡的最小开关数。您可以多次按下同一个开关。
注意:0代表灯泡关闭,1代表灯泡开启。
输入:[0 1 0 1]
步骤:
press switch 0 : [1 0 1 0]
press switch 1 : [1 1 0 1]
press switch 2 : [1 1 1 0]
press switch 3 : [1 1 1 1]
返回:4
答案 0 :(得分:1)
这被称为“熄灯”谜语: http://mathworld.wolfram.com/LightsOutPuzzle.html
我能想到的一个速度提升就是将所有灯泡的设置分开到右边。特别是GPU可能能够有效地执行此操作(我不确定您是否需要更改每个循环对元素的影响)。
也许将它作为一个合适的布尔数组并按位对阵列上的模式进行异或运算?
除非真正的过程比XOR-ing布尔值复杂得多,否则内存速度将成为瓶颈 - 而不是CPU时间。 除非这纯粹是为了学术目的,否则性能咆哮应用: http://ericlippert.com/2012/12/17/performance-rant/