编程玑珠
標(biāo)題之所以叫做“編程璣珠”而不是“編程珠璣”,是我怕搜索這本書(shū)的網(wǎng)友產(chǎn)生誤會(huì),但我要表達(dá)的意思是一致的。
今天做一個(gè)算法,有一處需要根據(jù)輸入,對(duì)(x, y)在給定方向上進(jìn)行一個(gè)位移,從正西順時(shí)針到西南,共有8個(gè)方向。我當(dāng)然不會(huì)傻到判斷8個(gè)方向,而是把平面分別按x軸和y軸切成兩半進(jìn)行處理:
//豎直方向位移 if(dir > Left && dir < Right) {newPos.row = pos.row - 1; } else if(dir == Left || dir == Right) {newPos.row = pos.row; } else {newPos.row = pos.row + 1; }//水平方向位移 if(dir > Up && dir < Down) {newPos.column = pos.column + 1; } else if(dir == Up || dir == Down) {newPos.column = pos.column; } else {newPos.column = pos.column - 1; }這是整個(gè)算法中非常細(xì)小的一部分,當(dāng)時(shí)也沒(méi)有多想,感覺(jué)這么做也可以了。不過(guò)后來(lái)看一朋友做的,發(fā)現(xiàn)她采用了表驅(qū)動(dòng)法,即預(yù)生成一個(gè)一維數(shù)組delta,數(shù)組的標(biāo)號(hào)即對(duì)應(yīng)了方向的編號(hào),數(shù)組的值即x與y分別應(yīng)增加的值。比如正北方向編號(hào)為2,則delta[2] = (0, –1)。那在實(shí)際中進(jìn)行位移時(shí),只需要將當(dāng)前坐標(biāo)pos + delta[dir]即可,效率極高。
我又如何不了解表驅(qū)動(dòng)法,然和informed和skilled比較還是有相當(dāng)?shù)牟罹唷N覀冋炜紤]設(shè)計(jì)模式、對(duì)象設(shè)計(jì),卻越來(lái)越忽略了這些細(xì)微之處~
轉(zhuǎn)載于:https://www.cnblogs.com/Gildor/archive/2010/03/08/1681043.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 黄金点游戏之客户端(homework-0
- 下一篇: struts导出txt文件