黑白迭代黑白迭代算法解析
黑白迭代黑白迭代算法解析如下:
(能看完的都不容易,能看懂的更不容易╯﹏╰)
1.窮舉法,64個格子,每個格子點(diǎn)或者不點(diǎn),共有2**64種可能,數(shù)量級為10**19,算到電腦報(bào)廢也算不出一個題目。
2.分塊法,將8*8網(wǎng)格分為4個4*4網(wǎng)格,分開求解。
開始分塊之前需要證明:4個分塊的解合并之后是否與8*8網(wǎng)格的解一致,也就是證明分塊法的可行性!
給出一個4*4網(wǎng)格,在網(wǎng)格任何區(qū)域中點(diǎn)擊都會唯一確定一個4*4的顯示圖案。
給出一個5*5網(wǎng)格,在網(wǎng)格左上角4*4區(qū)域點(diǎn)擊,還會唯一確定一個4*4的顯示圖案嗎?答案是否!網(wǎng)格的第五列會影響到第四列的圖案。
拓展到8*8網(wǎng)格時(shí),結(jié)論不變。仔細(xì)觀察,發(fā)現(xiàn)在4*4的網(wǎng)格內(nèi)點(diǎn)擊最多可以保證3*3區(qū)域的圖案不變。4個分塊無法滿足8*8的網(wǎng)格!從圖中可以看出,仍有很大一部分是未知數(shù)。
一個解決辦法是構(gòu)造補(bǔ)丁,如圖中黑框區(qū)域所示。
具體執(zhí)行邏輯:4*4網(wǎng)格一共65535種點(diǎn)擊的組合,可以產(chǎn)生4096種圖案,也就是說,每一個4*4的圖案都有16種點(diǎn)擊生成方式;而每一個在角落的3*3網(wǎng)格,又能在這4096個圖案中找到8個3*3區(qū)域一致的(這段結(jié)論是通過實(shí)驗(yàn)得出來的,沒有數(shù)學(xué)證明)。
所以,以左上角陰影為例,能夠保證左上角陰影為想要的圖案的點(diǎn)擊組合有8*16=128種,同理其它三個陰影各有128種。
然后打補(bǔ)丁,我們?nèi)∽笊辖欠謮K(4*4大小)的右邊兩列和右上角分塊的左邊兩列組成新的4*4分塊。如果這個分塊能夠保證點(diǎn)擊之后中間3行2列的圖案和實(shí)際圖案一致,那么拼接左上角和右上角兩個分塊就能保證點(diǎn)擊后的圖案與實(shí)際圖案前三行完全一致。
后面的拼接證明同理。
然后用Python把算法實(shí)現(xiàn)一下,平均6-8秒解出一個答案,輕松通關(guān)
以上就是黑白迭代黑白迭代算法解析相關(guān)內(nèi)容。
閩公網(wǎng)安備 35021102000359號
網(wǎng)絡(luò)文化經(jīng)營許可證號:閩網(wǎng)文(2016)4364-073號