关于有限状态机的一点应用
有限状态机,一种抽象的理论模型。有限状态机**(Finite State Machine)**通过可构造、可验证的方式来呈现有限个变量所描述的状态变化过程。比如,封闭的有向图。它可以通过if-else, switch-case和函数指针来实现,从软件工程角度看,主要是为了封装逻辑。
带有状态转移的有限状态机示例:
STATE_MACHINE() {    State cur_State = type_A;    while (cur_State != type_C) {        Package _pack = getNewPackage();        switch() {            case type_A:                process_pkg_state_A(_pack);                cur_State = type_B;                break;            case type_B:                process_pkg_state_B(_pack) ...
RE0
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post$ hexo new "My New Post"
More info: Writing
Run server$ hexo server
More info: Server
Generate static files$ hexo generate
More info: Generating
Deploy to remote sites$ hexo deploy
More info: Deployment
C/C++相关内容整理
c/c++相关
什么是设计模式“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。 			——Christopher Alexander
如何解决复杂性?
分解
人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。
抽象
更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。
重构关键技法
静态 → 动态
早绑定 → 晚绑定
继承 → 组合
编译时依赖 → 运行时依赖
紧耦合 → 松耦合
面向对象设计原则
依赖倒置原则(DIP)
高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。
抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。
开放封闭原则(OCP)
对扩展开放,对更改封闭。
类模块应该是可扩展的,但是不可修改。
单一职责原则(SRP)
一个类应该仅有一个引起它变化的原因。 ...
machine-learning
李航统计学习方法:
NFL定律指明,如果我们对要解决的问题一无所知并假设其分布完全随机且平等,那任何算法的预期性能都是相似的。脱离具体问题,空谈‘什么学习算法更好’毫无意义。
集成学习的精髓在于假设“子分类器”的错误相互独立,随着集成中子分类器的数目上升,集成学习后的”母分类器”的误差将会以指数级别下降,直至为0。假设过于乐观。
个体学习的准确性和多样性本身就存在冲突,一般的,准确性很高后,要增加多样性就需牺牲准确性。事实上,如何产生并结合好而不同个体学习器,恰是集合学习的研究核心。
细分集成学习的话,也有两种截然相反的设计思路:
思路1:每个子学习器都是弱分类器,在融合后成为一个强力的主体。代表算法:随机森林每个子学习器都是强分类器,融合过程中可能:
思路2(强中取强):选择最强的那一个。代表算法:dynamic classifier selection
思路3 (公平选择):一视同仁的对待每个子学习器,融合出一个更强的主体。代表算法:stacking
让一堆子学习器集体做决定的缺陷在于低效,容易被平庸的子学习器拖了后腿。而信赖最强者的缺点在于缺乏稳定性,上限可以很高,下限 ...
algorithm
基本概念
P问题:能够在多项式时间内解决的决策问题。
NP问题:多项式时间内能够验证的问题称为NP问题。
NPC问题:可以在多项式时间内对问题所有可能的解进行验证,并给出其正确性的问题。目前不能用多项式时间解决,但还不能证明这个问题不能用多项式解决。规约(Reduction):如果要证明一个问题是NPC问题,则只需要证明他是NP问题,然后找一个你所知道的NPC问题规约到A即可。
NP-hard问题:是指从算法角度比NP还难的问题,指的是所有的NP问题可以通过某个多项式时间的函数规约到这类问题。NP-hard问题不一定是NP问题,因为总有一些NP-hard问题无法在多项式时间判断一个解是否可行。 
如果A到B规约成功,则说明:B至少比A要难,即只要有一个解决B的黑盒子算法,就能解决A问题。故在证明一个问题是NPC问题时,如果掌握的已知NPC问题越多,对于规约越有利。
一般来说证明B是NPC的过程如下:
证明B是NP问题。
知道一个已知的NPC问题A。
给出一个规约过程A规约到B,并证明此规约过程是多项式时间的。
独立集:一个点集,点集中各点没有关系。(点独立)
最大独立 ...
考研复试
编程题自测
编写一个函数,从字符串中寻找整个连续的数字字符,将其转化成整数并保存在arr整型数组里,溢出以-1作为标志。字符串以‘#’结束(如”uestc2015jsj123#”)
#include <stdio.h>#include <stdlib.h>#include <string.h>int a[50];int i = 0;int str_to_int(char str[], int len) {	int num = 0;	for (int j = 0; j < len; j++)		num = num * 10 + (str[j] - '0'); 	 	return num;}void int_find(int a[], char *t) {	char *p = t, *q;	while (*p != '#') {		if (*p >= '0' && *p <= '9') {	 ...
golden-age
已是去时独自语,欲语还休❤尘世嚣嚣,我们不管做什么,都困难重重。以后如何,无人知晓。这是一个梦,一个故事,要慢慢渗透。
关于一些工具的使用说明整理(相当随意的记录,仅供个人参考)
Git使用简述
Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将结果作为数据唯一标识和索引。
Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成。所有保存在 Git 数据库中的内容都用此哈希值作索引,而不是靠文件名。
任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
Git 基本流程:
在工作目录中修改某些文件。
对修改后的文件进行快照,然后保存到暂存区域。
提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录。
基本操作
查看配置信息
$ git config --list
获取帮助
$ git h ...





