技术文章

非确定的自动机NFA确定化为DFA

时光总嘲笑我的痴心妄想 提交于 2021-02-17 16:21:22
摘要:  在编译系统中,词法分析阶段是整个编译系统的基础。对于单词的识别,有限自动机FA是一种十分有效的工具。有限自动机由其映射f是否为单值而分为确定的有限自动机DFA和非确定的有限自动机NFA。在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,无疑会影响到FA的工作效率。因此,对于一个非确定的有限自动机NFA M,经常的做法是构造一个确定的有限自动机DFA M’。  有穷自动机(也称有限自动机)作为一种识别装置,能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合。引入有穷自动机理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。下面分别给出确定的有穷自动机和不确定的有穷自动机的定义、与其有关的概念、不确定的有穷自动机的确定化以及确定的有穷自动机的化简等算法。   NFA转换为等价的DFA: 在有穷自动机的理论里,有这样的定理:设L为一个由不确定的有穷自动机接受的集合,则存在一个接受L的确定的有穷自动机。这里不对定理进行证明,只介绍一种算法

机器学习之支持向量机算法(二)

怎甘沉沦 提交于 2021-02-17 16:21:05
五、SVM求解实例   上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值。数据:3个点,其中正例 X 1 (3,3) ,X 2 (4,3) ,负例X 3 (1,1) 如下图所示       我们需要求解下式的极小值       注意约束条件(在这里不要忘记了 y i 代表的是数据的类别,+1代表正例,-1代表负例 )       代入数据,通过化简可以得到如下约束条件的表达式。       将数据代入上式得到       由于α 1 +α 2 -α 3 =0 -> α 1 +α 2 =α 3 : 化简可得:      分别对α 1 和α 2 求偏导,偏导等于0可得: α 1 =1.5,α 2 =-1(并不满足约束条件α i >= 0,i=1,2,3 )所以这时求出来的α的值是无效的,那这个时候 α的解应在边界上 ,也就是说要么α 1 =0,要么α 2 =0,再代入上式然后求偏导看下       (这儿经过我的计算发现α 2 似乎等于正的2/13,应该是教程有些小问题,猜测可能是上式由α 1 +α 2 =α 3 化简这儿出了点小问题,但是对于答案似乎影响不大) ,所以经过计算最小值在(0.25,0,0.25)处取得 。       上面的平面方程其实就是代表直线方程,也就是 决策边界的方程 。 六、支持向量机?   为什么会取支持向量机这样一个名字呢?    

Hive-查询

大城市里の小女人 提交于 2021-02-17 16:18:54
所谓·生活 就是一系列下定决心的努力 · 正 · 文 · 来 · 啦 · 查询 * SELECT ... FROM 语句 SELECT 是SQL的射影算子, FROM 标识了从哪个表查询 CREATE TABLE employees( name STRING , salary FLOAT, subordinates ARRY< STRING >, deductions MAP< STRING ,FLOAT> ) PARTITIONED BY (county string ,state STRING ); 1. 比如某一个州有 4 名员工,查询语句如下: eg: hive> SELECT name,salary FROM employees; John Doe 100000.0 Mary Smith 80000.0 Todd Jones 70000.0 Bill King 60000.0 2. 表加别名,在这个查询中不是很有用,但是如果有表链接操作,就很有用了 eg: hive> SELECT e.name,e.salary FROM employees e; 3. 当查询的列是集合时,Hive会使用JSON用于输出,subordinates列为一个数组,输出如下: eg: hive> SELECT name,subordinates FROM employees; John Doe

Java第一阶段作业总结

天涯浪子 提交于 2021-02-17 15:51:05
前言: 本次博客是针对我的Java第一阶段的作业(共三次)发表的一个总结性博客。通过这三次作业,我更加了解面向对象与面向过程的区别。同时,这三次作业加深了我对面向对象思维的认识。下面是具体的内容: 1.作业过程总结 ①三次作业之间的知识迭代关系: 作业的难度和复杂度是依次递增的,逐步从面向过程过渡到面向对象。 ②如何通过作业逐步从面向过程过渡到面向对象: 第一次作业主要是考察简单的输入、输出、if、else和switch(case)的运用,主要是采用面向过程来解决问题。第二次作业就增加了方法的创建使用,不再是单一的只在主类写代码来实现。第三次作业是在第二次作业的题目上进行的延伸。增加了对类的使用,并且一个题目可以用多种解法,涉及到类的依赖、关联、聚合、组合等关系的运用,特别是第三题和第四题,面向对象的思想尤为明显。 ③作业过程中遇到的问题及解决方法: 循环的算法参数写错导致答案错误,检查了几遍代码都没发现问题,最后使用debug找出了错误。还有一个是第三次作业的第三题,在DateUtil类的构造方法中month没有传值进去同时day没有初始化导致无输出结果,最后重新写了构造方法就解决了。 ④每次作业花费的时间比例: 1:2:3 ⑤对编程过程的严谨性的认识及教训: Java编程的时候十分严谨,一些编译和语法上的错误在写代码的时候编译器就会有提示。要学会使用debug

验证身份证合法性

巧了我就是萌 提交于 2021-02-17 15:50:47
/// </summary> /// <param name="Id"></param> /// <returns></returns> public bool CheckIDCard( string idNumber) { if (idNumber.Length == 18 ) { bool check = CheckIDCard18(idNumber); return check; } else { return false ; } } /// <summary> /// 18位身份证号码验证 /// </summary> /// <param name="idNumber"></param> /// <returns></returns> public bool CheckIDCard18( string idNumber) { long n = 0 ; if ( long .TryParse(idNumber.Remove( 17 ), out n) == false || n < Math.Pow( 10 , 16 ) || long .TryParse(idNumber.Replace( ' x ' , ' 0 ' ).Replace( ' X ' , ' 0 ' ), out n) == false ) { return false ; // 数字验证 }

决策树

痞子三分冷 提交于 2021-02-17 15:50:02
[TOC] 参考资料 台湾大学《机器学习技法》视频 周志华《机器学习》 李航《统计学习方法》 决策树算法原理(上) 决策树算法原理(下) 深入浅出ML之Tree-Based家族 决策树--信息增益,信息增益比,Geni指数的理解 决策树—剪枝 决策树 决策树是一种运用概率与图论中的树对决策中的不同方案进行比较,从而获得最优方案的风险型决策方法。 决策树学习三步骤: 特征选择 决策树的生成 决策树的剪枝 常用的决策树算法有ID3,C4.5和CART。 用信息论中的熵来度量决策树的决策选择过程 ,这几个算法选择属性划分的方法各不相同。 决策树算法 划分选择 连续值处理 缺失值处理 剪枝 ID3 信息增益 不支持 不支持 不支持 C4.5 信息增益率/增益比 支持 支持 支持 CART-分类 基尼值 支持 支持 支持 CART-回归 最小二乘 支持 支持 支持 划分选择 在了解划分选择前,需要先了解一个概念,信息熵。 信息熵 设$X$是一个取有限个值的离散随机变量,其概率分布为: $$ P(X=x_i)=p(x_i)\i=1,2,...n $$ 信息熵是在结果出来之前对可能产生的信息量的期望: $$ Ent(D)=H(X)=-\sum_{i=1}^{n} p(x_i)log_2(p(x_i))\以2为底,是因为信息熵的单位为比特bit $$ 熵越大,说明系统越混乱

手写一个基于 Proxy 的缓存库

痞子三分冷 提交于 2021-02-17 15:38:51
两年前,我写了一篇关于业务缓存的博客 前端 api 请求缓存方案 , 这篇博客反响还不错,其中介绍了如何缓存数据,Promise 以及如何超时删除(也包括如何构建修饰器)。如果对此不够了解,可以阅读博客进行学习。 但之前的代码和方案终归还是简单了些,而且对业务有很大的侵入性。这样不好,于是笔者开始重新学习与思考代理器 Proxy。 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。关于 Proxy 的介绍与使用,建议大家还是看阮一峰大神的 ECMAScript 6 入门 代理篇 。 项目演进 任何项目都不是一触而就的,下面是关于 Proxy 缓存库的编写思路。希望能对大家有一些帮助。 proxy handler 添加缓存 当然,其实代理器中的 handler 参数也是一个对象,那么既然是对象,当然可以添加数据项,如此,我们便可以基于 Map 缓存编写 memoize 函数用来提升算法递归性能。 type TargetFun<V> = (...args: any[]) => V function memoize<V>(fn: TargetFun<V>) { return new Proxy(fn,

jdk 动态代理源码分析

夙愿已清 提交于 2021-02-17 15:23:40
闲来无事,撸撸源码 食用方法 直接看代码吧。。 package com.test.demo.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 每个代理对象 内部都有一个实现了InvocationHandler接口的 类的实例 * * InvocationHandler 顾名思义就是 代理对象的方法调用的处理类(调用它的invoke方法) * * @author lizhecao 2018/4/19 * @version 1.0 */ public class InvocationHandlerImpl implements InvocationHandler { // 目标对象 private Object target; public InvocationHandlerImpl(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 代理方法简单地打下日志

Python爬虫入门教程 妹子图网站爬取

喜你入骨 提交于 2021-02-17 14:42:51
妹子图网站----前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写 爬图片 这一件事情。希望可以做好。 为了写好爬虫,我们需要准备一个火狐浏览器,还需要准备抓包工具,抓包工具,我使用的是CentOS自带的tcpdump,加上wireshark ,这两款软件的安装和使用,建议你还是学习一下,后面我们应该会用到。 妹子图网站---- 网络请求模块requests Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模块就是requests。 妹子图网站---- 安装requests 打开终端:使用命令 pip3 install requests 等待安装完毕即可使用 接下来在终端中键入如下命令 # mkdir demo # cd demo # touch down.py 上面的linux命令是 创建一个名称为 demo 的文件夹,之后创建一个 down.py 文件,你也可以使用GUI工具,像操作windows一样,右键创建各种文件。 为了提高在linux上的开发效率,我们需要安装一个 visual studio code 的开发工具 对于怎么安装vscode,参考官方的https://code.visualstudio.com... 有详细的说明。 对于centos则如下: sudo

Hive sql 查询数据库查询 top-n

冷暖自知 提交于 2021-02-17 14:17:08
数据库查询*分组排序取top n 要求:按照课程分组,查找每个课程最高的两个成绩。 数据文件如下: 第一列no为学号,第二列course为课程,第三列score为分数 mysql> select * from lesson; +-------+---------+-------+ | no | course | score | +-------+---------+-------+ | N0101 | Marth | 100 | | N0102 | English | 12 | | N0102 | Chinese | 55 | | N0102 | History | 58 | | N0102 | Marth | 25 | | N0103 | English | 100 | | N0103 | Chinese | 87 | | N0103 | History | 88 | | N0103 | Marth | 72 | | N0104 | English | 20 | | N0104 | Chinese | 60 | | N0104 | History | 88 | | N0104 | Marth | 56 | | N0105 | English | 56 | | N0105 | Chinese | 88 | | N0105 | History | 88 | | N0201 |