Fork me on GitHub

树形问题和更多树

----------------siwuxie095

   

   

   

   

   

   

   

   

   

树形问题

   

   

在处理计算机中遇到的很多问题时,虽然没有创建出具体的树,但是

整个是以一棵树的形状进行求解的,通常称这类问题为 树形问题

   

   

   

递归法 - 天然的树形性质

   

由于树这种结构,它的定义具有天然的递归性质,因此,当求解计算

机问题时,如果使用的是递归的方法,那么这些问题也就天然的具有

树形问题的性质

   

   

   

最典型的,比如:归并排序 快速排序

   

整个过程可以看做是对一棵排序树的遍历,用这种观点再去看归并排序

和快速排序的代码,就会发现,它们像极了是对一棵树进行后续遍历

前序遍历 这样的代码模式

   

   

   

   

   

使用递归的方式来求解问题,在计算机领域一类最常见的求解问题,

就是搜索问题

   

事实上,绝大多数计算机问题都可以使用搜索的方式来解决

   

   

1)一条龙游戏

   

   

   

在与电脑博弈的过程中,每一次在 9 个格子里走哪个点,就可以枚举,

每一次枚举产生出一个新棋局,那么对于这个新棋局,实际上就相当于

是从上一个棋局开始,派生下来的子节点依此类推,直至整个游戏

完结

   

通过搜索的一个称之为决策树的树,来遍历所有的决策,以选出最

优的决策

   

   

   

28 数码

   

   

   

对于这个游戏,可以用搜索树来进行解决。通过初始的棋局,

一共可能有 4 种走法,派生出初始棋局的 4 个子节点,对于

每一个子节点,相应的又有若干种走法依此类推

   

   

   

3)八皇后

   

   

   

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋

棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了

达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上

   

采用树形搜索的方式,可以很容易地生成八皇后的所有的解

   

当然,搜索问题,也并不像想象的那么容易。实际上,之前提过的所有问题,

在搜索的同时,对应的都还可以优化

   

不然的话,相应的状态数量太多,更重要的是,有可能对重复的状态进行了

访问

   

   

   

4)数独

   

   

   

数独,这类更难的问题也可以使用树的方式解决

   

   

   

   

5)搬运工

   

   

甚至像搬运工这样的小游戏:怎么把砖块搬运到指定的地点,

都可以使用树的方式来解决

   

   

   

而类似于自动求解搬运工,也是一个典型的人工智能的任务

   

在早期,搜索过程近乎就是人工智能的核心

   

如:为 IBM 赢得国际象棋冠军的深蓝,它的核心其实就是搜索

   

当然这个搜索不是简单的仅仅做搜索,这里面涉及到很多的优化,

很多的技巧,包括对要搜索的问题本身的深入分析

   

而像 AlphaGo 这样的人工智能和搜索还是略有不同的,AlphaGo

使用的是机器学习相关的技术

   

   

   

   

   

   

   

更多树

   

   

在计算机科学领域随着求解问题的不同,针对不同的问题种类,

计算机科学家还发明了更多的树,最典型的,如下:

   

KD 树区间树哈夫曼树

   

   

   

树这个话题在计算机科学中,占据着举足轻重的地位

   

   

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

posted on 2017-06-11 09:14  siwuxie095  阅读(264)  评论(0编辑  收藏  举报

导航