最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的!不仅常见的实现上(libstdc++、libc++、msstl)都是inline的,标准里给的形式定义也是inline的。比如微软开源的stl实现:https://github.com/microsoft/STL/blob/main/stl/inc/type_traits#L73_EXPORT_STDtemplate_INLINE_VARconstexprboolnegation_v=negation::value;_EXPORT_STDtemplate_INLINE_VARcon
初等数论学习笔记I:同余相关。CHANGELOG2022.7.13:重构文章,更新PR模板代码。2023.1.23:对文章进行修补。1.Miller-RabinMiller-Rabin素性测试是一种具有随机性的素数判定方法。它有一定概率将合数判定为素数,但不会将素数判定为合数。素数判定的基本思路为根据所有质数但很少合数具有的性质,检查被判定的数是否具有这些性质。若不具有,则该数是合数,否则该数大概率是质数。1.1费马素性检验当\(p\)是素数时,对于任意\(a\perpp\)均有\(a^{p-1}\equiv1\pmodp\)。相反,当\(a^{p-1}\equiv1\pmodp\)时,是否有
题面有一棵二叉树,根结点上有一个空字符串,每个点的左儿子上的字符串为其父亲结点的字符串尾部额外加一个左括号,右儿子则是在尾部加一个右括号。树中的每个叶子结点上的字符串都分别和每个由\(n\)对括号组成的合法括号序列一一对应。给定\(n\),求此时这棵树的最大匹配所含的边数。(对\(998244353\)取模)样例输入:9输出:10350题解题意就是说,一颗深度为\(2n+1\)的二叉树,从根节点开始向左子节点走相当于增加一个左括号,向右子节点走相当于增加一个右括号,先设这颗二叉树是满二叉树,然后不停地将所有不表示合法括号序列的叶子节点删掉,直到所有叶子节点都表示一个长度为\(2n\)的括号序列
假设我们的模型只有一个参数\(w\),损失函数为\(L(w)\),加入L1和L2正则化后的损失函数分别记为\(J_1(w),J_2(w)\):\[\begin{gathered}J_1(w)=L(w)+\lambda|w|\\J_2(w)=L(w)+\lambdaw^2\end{gathered}\]原损失函数\(L\)在\(w=0\)处的导数记为\(L'(0)\),那么\(J_1\)在\(w=0\)处的左、右导数为:\[\begin{gathered}J_{-}'(0)=L'(0)-\lambda\\J_{+}'(0)=L'(0)+\lambda\\\end{gathered}\]当\(\l
1随机优化算法概述随着大数据的出现,确定性优化算法的效率逐渐称为瓶颈。为了说明这一点,我们来看一个用梯度下降法求解线性回归的例子。给定训练样本\(D=\{(x_i,y_i)\}_{i=1}^n\),线性回归的目标函数如下:\[f(w)=\frac{1}{n}\sum_{i=1}^nf_i(w)=\frac{1}{n}\sum_{i=1}^n(w^Tx_i-y_i)^2\]这里\(w\in\mathbb{R}^d\)为模型参数。梯度下降法的更新规则为:\[w^{t+1}=w^t-\eta\nablaf(w^t)=w^t-\frac{2\eta}{n}\sum_{i=1}^nx_i\left((w
初等数论学习笔记I:同余相关。CHANGELOG2022.7.13:重构文章,更新PR模板代码。2023.1.23:对文章进行修补。1.Miller-RabinMiller-Rabin素性测试是一种具有随机性的素数判定方法。它有一定概率将合数判定为素数,但不会将素数判定为合数。素数判定的基本思路为根据所有质数但很少合数具有的性质,检查被判定的数是否具有这些性质。若不具有,则该数是合数,否则该数大概率是质数。1.1费马素性检验当\(p\)是素数时,对于任意\(a\perpp\)均有\(a^{p-1}\equiv1\pmodp\)。相反,当\(a^{p-1}\equiv1\pmodp\)时,是否有
题面有一棵二叉树,根结点上有一个空字符串,每个点的左儿子上的字符串为其父亲结点的字符串尾部额外加一个左括号,右儿子则是在尾部加一个右括号。树中的每个叶子结点上的字符串都分别和每个由\(n\)对括号组成的合法括号序列一一对应。给定\(n\),求此时这棵树的最大匹配所含的边数。(对\(998244353\)取模)样例输入:9输出:10350题解题意就是说,一颗深度为\(2n+1\)的二叉树,从根节点开始向左子节点走相当于增加一个左括号,向右子节点走相当于增加一个右括号,先设这颗二叉树是满二叉树,然后不停地将所有不表示合法括号序列的叶子节点删掉,直到所有叶子节点都表示一个长度为\(2n\)的括号序列
假设我们的模型只有一个参数\(w\),损失函数为\(L(w)\),加入L1和L2正则化后的损失函数分别记为\(J_1(w),J_2(w)\):\[\begin{gathered}J_1(w)=L(w)+\lambda|w|\\J_2(w)=L(w)+\lambdaw^2\end{gathered}\]原损失函数\(L\)在\(w=0\)处的导数记为\(L'(0)\),那么\(J_1\)在\(w=0\)处的左、右导数为:\[\begin{gathered}J_{-}'(0)=L'(0)-\lambda\\J_{+}'(0)=L'(0)+\lambda\\\end{gathered}\]当\(\l
1随机优化算法概述随着大数据的出现,确定性优化算法的效率逐渐称为瓶颈。为了说明这一点,我们来看一个用梯度下降法求解线性回归的例子。给定训练样本\(D=\{(x_i,y_i)\}_{i=1}^n\),线性回归的目标函数如下:\[f(w)=\frac{1}{n}\sum_{i=1}^nf_i(w)=\frac{1}{n}\sum_{i=1}^n(w^Tx_i-y_i)^2\]这里\(w\in\mathbb{R}^d\)为模型参数。梯度下降法的更新规则为:\[w^{t+1}=w^t-\eta\nablaf(w^t)=w^t-\frac{2\eta}{n}\sum_{i=1}^nx_i\left((w
题目大意有\(3\)个门,有两个门后面会有一个钥匙,你现在手中有一把钥匙,问你能不能打开所有的门。题目分析我们可以一步一步推导,既然给了我们一把钥匙编号为\(x\),也就是可以打开编号为\(x\)的门,我们用\(a_x\)表示这扇门后面钥匙的编号,将可以打开的门标记起来,然后产生分类讨论:如果是\(a_x\)等于\(0\)的话,就没有钥匙,不用标记,直接输出NO。如果\(a_x\)不等于\(0\)的话,就说明可以打开下一个门,用\(f\)数组标记,然后可以继续讨论,不过讨论时变成了判断\(a_{a_x}\),以此类推。但是到达最后一次的时候,不管\(a_{a_{a_x}}\)是否等于\(0\)