从头编写 Skip-Gram Word2Vec

摘要 本文介绍了 Word2Vec 的相关背景知识,以及背后的数学原理,并通过 Python 源码实现 Skip-Gram 以及负采样方法。 本文并不会涉及 Word2Vec 的所有方面,而是从 Skip-Gram 入手,关注 Word2Vec 最核心的思想,从头开始实现一个精简版的 Skip-Gram Word2Vec。 对于算法的优化本文只会略微提及,感...

阅读全文

最长回文子串

题目大意: 输入多个字符串,对于每个字符串输出一个整数 \(N\),表示该字符串的最长回文子串。 输入 最多 \(30\) 个字符串,每个字符串长度不超过 \(1000000\),最后一个字符串为 END(该字符串不需要处理)。 输出 对于每组测试用例,输出以"Case N: "作为开头,N是测试用例的编号, 然后是对应字符串的最长回文子串。 样例输入 12...

阅读全文

线性规划单纯形法

线性规划是最优化问题中的一个重要领域。许多实际问题都可以归结为线性规划问题,例如:网络流、多商品流量等问题。我们在高中已经学习过只有 \(2\) 个变量的场景,可以使用图解法来求最优解。该方法虽然直观,易于理解,但是难以推广到 \(n\) 个变量的场景。面对更加复杂的线性规划问题,单纯形法是则是更加常用的方法。本文尝试从线性代数基础知识出发,一步一步的推导出...

阅读全文

多项式插值

插值是一种通过已知的数据点,求新数据点的过程或方法。比如我们已经通过采样、或者实验等方式,获取到了 \(n+1\) 个不同的采样点 \((x_i, y_i)\),其中 \(x_i\) 为输入,\(y_i\) 为输出。现在遇到了一个新的输入 \(x_t\),如何预测对应的输出 \(y_t\) 呢?插值就是一种能解决此问题的方法。而多项式由于形式简单,便于计算,...

阅读全文

Poj 2663 Tri Tiling

题目大意: 问用 \(1*2\) 的多米诺骨牌覆盖 \(3*n\) 的矩形区域,总共有多少种不同的覆盖方式? 下图是矩形大小为 \(3*12\) 的一个有效覆盖。 输入 有若干组输入,每组输入为一个整数 \(n,(0 <= n <= 30)\) 。最后一个输入为 -1 ,表示输入结束。 输出 对于每组输入,输出一个整数,表示总共可能的覆盖个数。...

阅读全文

编写 MySQL 插件

众所周知,MySQL是支持插件式存储引擎的,意思是MySQL源码中开放了存储引擎相关API,只要插件实现相关的API,就能安装到MySQL中,并作为存储引擎开始工作了。其实MySQL支持多种类型的插件,比如UDF,Daemon,认证,半同步,存储引擎。其中UDF和Daemon插件都非常简单,UDF只是实现了一个在MySQL的SQL接口里可以调用的函数;而Da...

阅读全文

MySQL 复制中对 Load Data的处理(译)

当MySQL执行LOAD DATA INFILE语句的时候,写binlog和其他语句有很大不同。一个LOAD DATA INFILE语句在binlog中可能变成了一个或者,若干个Event。这些Event记录了Load Data语句的附加信息,以及如何处理数据文件。 由于历史原因,一个LOAD DATA语句,可能对应4组不同的Event 1)在MySQL 3...

阅读全文

MySQL 复制协议

概述 这里只介绍MySQL 的异步复制协议(MySQL 5.5增加了半同步复制功能,感兴趣的同学可以自己研究)。 MySQL的主从复制工作模式大致为,主库将执行的语句写入Binlog,由Dump线程将Binlog发送到从库的IO线程,IO线程将日志保存为Relay-Log,再由从库的SQL线程重放执行。本文主要研究主库Dump线程将Binlog发送到从库IO...

阅读全文

MySQL 5.6 中Binlog Group Commit 实现

背景 在MySQL 5.1中,如果配置项sync_binlog=1,并且innodb_flush_log_at_trx_commit=1,那么MySQL的TPS将会下降到几十每秒,完全不可接受。这是因为InnoDB提交事务时,不仅需要将REDO刷盘,还需要将Binlog刷盘,每个事务都需要2次sync操作。机械磁盘的IOPS也就为几百的水平,所以InnoDB...

阅读全文

LevelDB 的 GroupCommit 实现

LevelDB是BigTable中对SSTable的实现,是一个高性能的单机版Key-Value存储库。LevelDB在一个进程中,允许多个线程同时读写一个SSTable。本文主要关注多个线程同时对LevelDB的写操作,LevelDB只支持2中写操作,即Put和Delete。由于LevelDB支持WAL,也就是说每次写操作都会记录日志。多个线程同时执行时,...

阅读全文