关灯游戏和线性代数联系紧密,对于一个 的灯阵,用线性方程组+高斯消元法求解,时间复杂度为O(m×n)^3。相对于首行枚举算法复杂度O(2^n) ,线代算法的时间复杂度低很多。用线性代数求解关灯游戏是个很不错的选择。
本文用最通俗的语言介绍线代求解关灯游戏原理。由于解释通俗化,细节之处难以严谨表述,说得不好的地方,请大神轻拍。
线性方程组求解关灯游戏的原理
问题:
一个2×2灯阵,初始局面右下方3盏灯亮,左上角一盏灯不亮,如下图所示。请用线性代数求解,找到可以使得所有灯都熄灭的开关操作。
解:
我们对四盏灯的开/关操作分别记为 x1、x2 、x3 、x4 ,如下图所示:
我们用1代表操作,用0代表未操作,即 的取值为0或1。对四盏灯的亮/灭状态分别记为 L1、L2 、L3 、L4 ,如下图所示:
我们用1代表亮着的灯,用0代表熄灭的灯,根据局面的初始状态,很显然有
接下来观察局面,
能影响L1灯的亮/灭状态的操作只有 x1、x2 、x3 ;
能影响L2灯的亮/灭状态的操作只有 x1、x2 、x4 ;
能影响L3灯的亮/灭状态的操作只有 x1、x3 、x4 ;
能影响L4灯的亮/灭状态的操作只有 x2、x3 、x4 ;