无向图:一个非空有限集合
和 中的某些元素的无序对集合 构成的二元组,记 其中 称顶点集或结点集, 称边集, 中的每个元素 为 中某两个元素 的无序对,记 称从 到 的边; - 有限图:结点集和边集都有限的图;
- 简单图:没有环也没有两条边连接同一对结点。
无向图:一个非空有限集合
动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。
动态规划是求解某类问题的一种方法,而不是一种特殊算法,没有标准的数学表达式和明确定义的一组规则。
动态规划的基本概念有:
阶段:对整个过程的自然划分,阶段变量一般用
状态:每个阶段开始时过程所处的自然状况,用
决策:一个阶段的状态确定后,作出各种选择从而演变到下一阶段的某个状态,用
策略:决策组成的序列。由第
状态转移方程:表示状态和决策确定下一状态的演变规律,记
指标函数:衡量过程优劣的数量指标,记
最优值函数:使指标函数达到最优,记
如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
非线性规划目前还没有适于各种问题的一般算法。
非线性规划模型描述如:
其中
一般非线性规划只能得到局部最优解,不能保证是全局最优解。
规划中的变量 (部分或全部) 限制为整数时,称为整数规划。
若在线性规划模型中变量限制为整数,则称为整数线性规划。
分类:
线性规划,就是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
线性规划由三部分组成:
编程中,线性规划的标准形式为:
其中
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
HMM 模型是一种生成式模型。
HMM 模型中有 2 个相关序列,分别是状态序列和观测序列,HMM 模型具有以下规则:
设状态序列
则HMM 的基本假设为:
Spring Boot 源码分析——RequestContextHolder 与 ThreadLocal
笔者一直在思考 Shiro 如何通过 SecurityUtils
拿到当前用户。原来是对于每个 HTTP 请求,在 Java
中都会开启一个线程进行处理,这个线程内就存放了当前的请求与请求信息,Shiro
通过当前线程,就可以拿到对应的 HTTP 请求,从而拿到当前用户。
进一步考虑,Spring Boot 是如何实现这一过程的呢?Spring Boot 如何为每个请求分配线程,在线程中注入请求信息,又如何通过线程取出请求呢?
维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。
在机器学习中,随着数据集维数的增加,数据的计算量将呈几何倍数增加,同时样本间的距离会远远增大,这将导致样本数据失去其意义。
为了减少计算量、增加准确度,我们有必要按照一定的规则去除一些维度 (特征),这便是降维算法。PCA 算法就是机器学习中的典型降维算法。
如果学过概率论,我们知道高斯分布的公式如下:

AdaBoost 是一种典型的集成学习算法,通过对多个弱学习器的集合,构成一个强学习器。
graph LR weak1[弱学习器] weak2[弱学习器] weak...[...] weak3[弱学习器] strong[强学习器] weak1 --> strong weak2 --> strong weak... --> strong weak3 --> strong