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