Fenrier Lab

使用行为树实现应用程序命令行解析工具

不知道是不是我一开始想多了,在做本科毕业论文的时候,为了更方便地运行程序,绞尽脑汁写了一个命令行解析器。而后又经过几次迭代,感觉成熟了不少,但是回过头发现好像并用不着这样的解析器。。。当然主体程序跟现在要讨论的内容不相关就不说了,只是花了精力实现的东西还是希望记录下思路。 行为树的原理,简单来说,系统的状态从根节点出发,接收外部信息,每接受一个信息,就按照预定义的跳转表进行状态跳转。当所有信息都处理完之后,最终停留的那个状态一般都有个动作,运行之后便完成了对程序的控制。 所以实际上要完成两个阶段的任务,首先是利用待实现的命令行语句构建一颗行为树,语句里的每个单词都是一个状态跳转指示。然后实现一个语句解析器,负责读取语句,并进行相应的状态跳转。 构造行为树 预定义一颗行为树的方法...
点我阅读更多...

Java HashMap源码分析(1)

哈希表是一种常用而强大的数据结构,有鉴于此,许多语言都自带其实现,这就为我们这些使用者带来了很多方便。在Java中,HashMap是使用率最高的哈希表,本文将对其源码进行详细的解读。 HashMap是一个比较大的类,有两千多行代码,继承了一个类,实现了三个接口,以及大量的方法。如果上来就一行一行的读,那么将很快就陷入泥潭,无法自拔。所以我决定在看源码的同时,写一个简化版本的哈希表,一开始只关注哈希表本身,然后再逐步添加实际应用层面的功能(比如,我将先不考虑HashMap中的最大容量、序列化等等与哈希表结构无关的内容)。然后我想说下,我发现在IDEA中类名使用小写首字母并不会弹出警告,所以我决定在不造成困扰的情况下不遵从Java常用的驼峰命名规则,比如接下来我要实现的简化哈希表就叫has...
点我阅读更多...

支持向量机

考虑属于两个类别的样本集合 \[S = \{(x^{(i)}, y_i )\,\mid i = 1,,,n\}\] 其中 \(x^{(i)}\) 是维度为 d 的特征,\(y_i\) 表示样本类别,等于 1 或者 -1。如果两个类别线性可分,那么将特征点集合投影到二维面上大致如下图所示 为了对数据进行分类,我们可以选择一个超平面对两类数据进行切割,显然这里有无数种切割方式,但是有的分隔面比其他面效果更好。支持向量机的任务就是找到这样一个分隔面,使得所有特征点到它的最小距离达到最大值,或者换句话说就是,使得两类特征点到分隔面的最小距离相等,如下图所示 假设上图中的实线即为这样的超平面,设其方程为 \[\omega^T x +b = 0\] 我们说这样的分隔面使得特征点...
点我阅读更多...

Fundamentals in Support Vector Machine Algorithm

Let’ talk something about machine learning, it’s inspired by the course of Pro.Andrew Ng. Consider the following training set which contains elements belong to two different types \[S = \{(x^{(i)}, y_i )\,\mid i = 1,,,n\}\] where \(x^{(i)}\)’s are feature points in d-dimensions, and we use \(y \in \{1,-1\}\) to denote the class labels. To...
点我阅读更多...