先说说什么是八数码问题....懒得编辑了,直接从网上拷贝来的一段话:“八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。八数码问题一般使用搜索法来解。搜索法有广度优先搜索法、深度优先搜索法、A*算法等。”
读大学的时候,我使用过广度优先搜索算法,A*算法来解决这个问题,在这里就不啰嗦了,网上随便可以找到很多答案。
前天有个网友发了篇技术文章给我看,里面讲到一个这样的问题,给你一百个颜色,大小各异的三角形,绘制一个firefox的logo出来。怎么做?文章里提到用遗传算法。
何为遗传算法?
在这里有必要先说一下达尔文的进化论。根据达尔文的进化论,物种在代代相传中发生基因变异,经过物竞天择,适者生存,然后形成了我们现在看到的物种。
遗传算法根据的正是这样一个理论。