主页

Dijkstra及寻路算法

Dijkstra算法 基本Dijkstra function Dijkstra(Graph, source, target): create vertex set Q for each vertex v in Graph: // 初始化部分 dist[v] ← INFINITY // 初始距离是正无穷 prev[v] ← UNDEFINED // 在最终路径上的前驱节点,初始是空 add v to Q // 通通加入未访问节点列表Q ...

阅读更多

负极大值算法

负极大值算法 维基页面 负极大值搜索是极大极小值搜索的一个变体,用于搜索二人零和游戏。 这个算法简化了极大极小值搜索,原理是基于以下事实:max(a, b) = −min(−a, −b)。准确地说,一个着法对玩家A的估值,等于其对玩家B的估值的相反数。因此,当前玩家要搜索的是一个 使其估值的相反数最大化 的着法——其后继的着法分数必须由对方评估——这句话无论对于当前是A还是B都适用,这也意味着,同一个过程可以无论对A还是B都适用。所以,负极大值是对极大极小值算法的简化,不需要对A返回极大值而对B返回极小值。 不要和 NegaScout 算法弄混,这个算法是对于 AlphaBeta 剪枝算法的一个巧妙应用,用于快速计算极大极小值或者负极大值,发现于1980年代——注意 AlphaB...

阅读更多

《游戏编程模式》笔记

《游戏编程模式》笔记 基本设计模式 命令模式:do/undo 享元模式:重复的实例可以共享 观察者模式:C#的event 原型模式: 单例模式: 避免使用单例的方法 作为参数传递 放在基类中 合并到其他全局变量里 服务定位器模式 状态模式:状态机、层次状态机、下推状态机 序列型模式 双缓冲:解决「一边访问一边修改」的问题 游戏循环: Fix Your Timestep Game loops Unity 的游戏循环 更新方法 行为型模式 字节码:写游戏之前先设计个语言吧 子类沙盒:使用基类提供的操作集合来定义子类中的行为 类型对象:把继承改为组合,父...

阅读更多

数据结构与算法简要提纲

数据结构与算法简要提纲 数据结构 线性表 链表:单链表、双链表、循环链表 时间复杂度: 索引:O(n) 查找:O(n) 插入:O(1) 删除:O(1) 栈:push、pop、LIFO 时间复杂度: 索引:O(n) 查找:O(n) 插入:O(1) 删除:O(1) 队列:enqueue、dequeue、FIFO 时间复杂度: 索引:O(n) 查找:O(n...

阅读更多

如何把 java 转化成 smali

如何把 java 转化成 smali 最近研究 android 拆包,发现一个问题:拆包之后有新的 res 文件添加进来,特别是有新的 id ,需要根据重排的 public.xml 重新编译所有的 R.smali 前置任务:首先是资源合并要正确,没有重复id之类 然后拢共分四步: 根据重排的资源重建R.java .java -> .class .class -> .dex .dex -> .smali 0. 前置任务 首先准备一个「加好资源的apk」,反编译到一个目录——姑且称为 TEMP_FOLDER——这个 apk 的资源ID是重排好的 如果只有一个apk和一堆要加的资源,那么做法是这样: 用 apkt...

阅读更多

AI博弈树基础笔记

AI博弈树基础笔记 基础问题 比特棋盘:基础中的基础,可以分类表示各种棋盘信息,比如所有棋子、所有红方的棋子、某个位置的象可到达的所有位置以及象眼位置 走法产生:跟特定棋类知识有关,可以用比特棋盘预存成表,产生顺序可以调整以配合剪枝 博弈树:与或树?极大极小值搜索,负极大值搜索 启发式搜索:固定深度,带静态估值函数(启发函数) 深度优先:内存方面最优,搜索速度不差 估值函数 棋子本身静态价值:车比马好,帅比车重要 棋子的动态控制力:过河兵和非过河兵 和其他棋子的关系:将军的马和被蹩腿的马,威胁和保护 特定棋形:连环马,围棋定势 棋子价值速查表 :[棋子,位置]->估值 搜索算法 Alpha-Beta 剪枝:基础中的基础...

阅读更多

Android 为TabHost添加标签页 报错

Android 为TabHost添加标签页报错 private void initTabView(){ TabHost tab = (TabHost) findViewById(R.id.th_main); tab.setup();// <---这行wtf非常重要! tab.addTab(tab.newTabSpec("tab_login").setIndicator("登录").setContent(R.id.tab_login)); tab.addTab(tab.newTabSpec("tab_sdk").setIndicator("SDK").setContent(R.id.tab_sdk)); tab.addTab(tab.new...

阅读更多