瑞利商与极值计算
对于一个埃尔米特矩阵 \(M\) 及非零向量 \(x\),定义瑞利商
\[R(M, x) = \frac{x^* M x}{x^* x}\]
这里的 \(x^* {}\) 是 \(x\) 的共轭转置矩阵,如果 \(M,x\) 都由实数元素组成,那么瑞利商可以写成
\[R(M, x) = \frac{x^T M x}{ x^T x}\]
设 \(M\) 的特征值与特征向量分别为 \(\lambda_1, \lambda_2,,,\lambda_n\),\(v_1, v_2,,,v_n\) ,并且有
\[\lambda_{min} =\lambda_1 \le \lambda_2 \le ... \le \lambda_n = \lambda_{max}\]
下面将证明,在 \...
点我阅读更多...
感知器
线性分类观点
考虑数据集 \(S = \{x^{(i)}\in R^d\mid i=1,2,,,n\}\) ,其中的样本可以被线性分割成两个类别:\(\mathcal{C}_1, \mathcal{C}_2\) ,然后我们再为每一个 \(x\) 分配一个类别标签值 \(y\),当 \(x^{(i)}\) 属于类别 \(\mathcal{C}_1\) 时,\(y_i=1\) ,否则 \(y_i=-1\) 。定义分割超平面为
\[\omega^T x + b = 0\]
其中 \(\omega, x\) 都是 d 维向量。然后对任意的 \(x \in S\) ,定义函数
\[r(x) = \frac{\omega^T}{\|\omega\|} x+ \frac b{\|\omega...
点我阅读更多...
C 语言指针详解
理解指针这一概念是学习 C 语言和 C++ 的重中之重,对于编程初学者,由于不熟悉计算机程序的运行原理,如果用 C 语言作为入门,将会在指针的理解上陷入泥潭。所以尽管现在的大学教育都纷纷将 C 语言作为通识课程,但是我还是认为这门语言并不适合刚接触编程的同学。
不过话又说回来,C 是一门非常值得掌握的语言,原因就在于它足够接近底层,它能让程序员对硬件有足够的掌控,却又不似汇编那样太过底层。
这篇文章的目的就是记录下个人对于指针的理解,并希望能对后人以启发帮助。
基本类型
首先看如下一段代码
//c1.c
#include <stdio.h>
int main() {
int a = 1;
printf("%d\n", a);
printf("%d\n"...
点我阅读更多...算法题:零钱兑换
问题描述与分析
感觉是一道经典的算法题,笔试面试屡试不爽。如果想把一些钱换成零钱,请问有多少兑换种方法?当然可以具体点,比如有 w 元钱,想用 k 种面额的币来兑换(k种面额可以不全部用完)。如果没有掌握一定的技巧,拿到这题是一脸蒙蔽的。首先我们需要将问题表述数学化一点:
设共有 k 种面额的纸币,分别值 \(v_i, (i = 1,,k)\),需要兑换的钱为 w ,求总的兑换方法数量 \(N_{k,w}\)。
这道题的关键是将 \(N_{k,w}\) 拆分成两个部分:
一部分是使用 \(k-1\) 种纸币兑换 \(w\) 元钱的方法数量 \(N_{k-1,w}\)
另一部分用 \(k\) 种纸币兑换成 \(w-v_k\) 这么多钱的方法数量 \(N_{k, w-v_...
点我阅读更多...
笔记-Java(JDK 1.9) StringBuffer 与 StringBuilder 的区别
StringBuffer 与 StringBuilder 都是为了更高效的操纵字符串而生,原因在于 String 类是不可变量,对其进行任何修改都会产生新的对象,而 StringBuffer 和 StringBuilder 则能够有效避免这一问题。但既然区分了两个类,就说明它们之间存在差别。
查看源码,发现 StringBuffer 与 StringBuilder 都继承 AbstractStringBuilder。下面从源码层面来对比两者
StringBuffer
StringBuilder
public StringBuffer(int capacity)
public Strin...
点我阅读更多...