内容会持续更新,有错误的地方欢迎指正,谢谢!
1.与数组相关的算法: 快速排序(分治思想的应用):不是任何情况都适用,数据量小的话,还不如冒泡快,但快排的确很优秀。堆排序:可用于做游戏排行榜前多少多少名,根据求最大的K个数还是最小的K个数来建最大堆和最小堆,再将最大/小堆的根节点和最后一个子叶节点交换,最后调整堆,重复刚才那两个步骤,直到得到K个数。当然,这种题也可以用红黑树实现的set来做。二分查找:用于查找出分数为多少多少的玩家 2.与树有关的算法四叉树、八叉树可用来检测大量物体之间的碰撞总次数。
3.与图有关的算法1.小型游戏可以用的简单的寻路算法:
随机寻路算法:当NPC不管是遇到障碍物还是遇到了边界(利用碰撞检测),都会随机选取一个前进的方向,继续行走跟踪算法:当游戏中的主角进入到NPC 的“警戒区域”后,游戏的AI 可轻易获得目标的位置,然后控制NPC 对象移向被跟踪的对象闪避算法:和跟踪算法完全相反,也就是当游戏中的主角进入到NPC 的“警戒区域”后,主角可以去追着NPC跑2.大型游戏一般使用A*寻路算法:使用最广泛的一种寻路算法,简单说一下A*寻路算法:
公式:f(n)=g(n)+h(n),g(n)表示从起点到任意点n的实际直线距离,h(n)表示任意顶点n到目标点的估算距离(常用曼哈顿距离公式用于估算h(n):|x1 - x2| + |y1 - y2|)
把待处理的方格A存入一个”开启列表”,开启列表就是一个等待检查方格的列表;”关闭列表”中存放的都是不需要再次检查的方格。
每次从OPEN列表中选择 f(n) 最小的节点将其加入CLOESE列表中,同时扩展相邻节点并将它们加入OPEN列表,可把OPEN列表看成一个优先队列,key值为 f(n),优先级最高的先出。
最后直到把终点加入OPEN列表中,计算出指针指向就完事了。所以最后的路径就是,从终点开始沿着父指针不断往起点走,最后回到起始点,这样最短路径就找到了:
A*寻路的详细介绍请见:https://blog.csdn.net/billcyj/article/details/79462670
3.DFS、BFS也常用于求最优方法这类问题