【讀書筆記】算法漫步 第12章
問題5 對(duì)弈游戲
?
下棋,從古至今,都會(huì)認(rèn)為是一個(gè)智力游戲,而且是一個(gè)很需要“智力”的游戲。
讓計(jì)算機(jī)會(huì)下棋,而且還能贏,甚至能贏職業(yè)棋手,是非常能體現(xiàn)出計(jì)算機(jī)有“智能”的,也是人工智能應(yīng)用的一個(gè)重要方向。如果關(guān)心一些計(jì)算機(jī)下棋的新聞,不難知道,現(xiàn)在基本上流行的各種棋,會(huì)下棋的計(jì)算機(jī)已經(jīng)能夠完勝職業(yè)棋手了。
?
讓計(jì)算機(jī)會(huì)下棋,或者說計(jì)算機(jī)表現(xiàn)出的任何智能的核心都是算法。這些算法,有的是若干經(jīng)驗(yàn)規(guī)則的編碼,有的是基于自然界或社會(huì)生活帶來的啟發(fā),有的需要先從大量數(shù)據(jù)中學(xué)習(xí)出一些模式,還有的則可能是基于對(duì)問題的深刻理解形成的小巧精妙的算法。
?
本章介紹了一個(gè)兩人對(duì)弈的游戲。
給定m堆棋子,每堆棋子數(shù)都不小于1個(gè)。兩個(gè)玩家輪流從中取棋子,每次只能從一堆拿,至少拿一顆,誰拿最后一顆誰為勝。是否存在先手勝的條件?如果存在,它是什么?
?
書中,詳細(xì)從兩堆棋子的一個(gè)具體例子開始介紹,推廣到m堆棋子,介紹了要贏得對(duì)弈的邏輯(讀者注,這個(gè)邏輯感覺像博弈論,如果是,作者為了科普,簡化了問題,同時(shí)用大白話介紹了算法邏輯,而不是博弈論中得定理和數(shù)學(xué)推導(dǎo))
在介紹這個(gè)游戲的算法的計(jì)算機(jī)實(shí)現(xiàn)時(shí),介紹了一種重要的邏輯運(yùn)算—異或運(yùn)算。
因?yàn)?,能?duì)弈,能寫一個(gè)程序和人對(duì)弈,甚至能贏,建議耐心讀讀,理解其中的邏輯,而且建議有編程基礎(chǔ)的讀者,能寫一個(gè)程序,讓它真的和人比試一下,很爽的。
?
【作者感受】
在讀本章時(shí),一開始,以為會(huì)介紹某個(gè)棋類的“智能”算法,可惜沒有。
智能,這個(gè)現(xiàn)在很火的詞,在非計(jì)算機(jī)專業(yè)、或者非人工智能從業(yè)者以外的人,聽起來,很神奇,很神秘的東西,其實(shí)沒有那么“智”。