摘要: 算法基础 分析算法 循环不变式 设计算法 分治法 练习 线性查找的平均检查次数 最好 1 次,最坏 n 次,平均 $\frac{n+1}{2}$ 次,$f(n) = \Theta(n)$。 使任何算法的最好情况运行时间提高的办法 将最好情况总结,并作为算法的特例实现。但是不应该将函数的最好情况作为判 阅读全文
posted @ 2022-10-27 20:46 Violeshnv 阅读(205) 评论(0) 推荐(0)
摘要: 算法要求 正确性(Correctness) 语法正确 输入输出(IO)正确 可读性(Readability) 使用注释(不注释比坏注释好,代码易读比过多注释好) 命名契合(camelCase、PascalCase、UnderScoreCase) 健壮性(Robustness) 完善的异常处理(处理非 阅读全文
posted @ 2022-10-27 20:33 Violeshnv 阅读(29) 评论(0) 推荐(0)
摘要: Linear 数组概述 数组有四种操作:添加、删除、更改和搜索。 读取是数组中最容易、最快的操作,因为数组以顺序的方式存储在内存中。 数组最突出的能力叫做随机读取,即通过一个下标读取值。 int a[] = {3, 1, 2, 5, 4, 9, 2, 7}; printf("%d", a[3]); 阅读全文
posted @ 2022-10-27 20:28 Violeshnv 阅读(54) 评论(0) 推荐(0)
摘要: 递归 递归是栈的应用之一 举一个斐波那契数列的例子 int Fbi(unsigned i) { if (i < 2) return i; return Fbi(i - 1) + Fbi(i - 2); } 我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数 在高级语言中, 阅读全文
posted @ 2022-10-27 20:26 Violeshnv 阅读(34) 评论(0) 推荐(0)
摘要: 工具准备和附件购买 Linux 系统的电脑(可以是虚拟机):根目录 10G 左右空间,用户目录 40G 左右的空间,会在上面安装 SDK Manager 来对 Jetson Nano 进行刷机和安装 SDK。 屏幕:支持 HDMI 连接,屏幕使用 HDMI 接 HD IN 和 micro USB 小 阅读全文
posted @ 2022-10-27 15:55 Violeshnv 阅读(711) 评论(0) 推荐(0)
摘要: Python注释 Python注释可以分为块注释和行内注释、文档注释、类型注释 块注释和行内注释 # 块注释一般用于描述下方代码 if a > 10 : # 按照PEP8规范,块注释以一个#和一个空格开头,除非块注释中需要使用缩进 a = 10 else: # 块注释应该和它要注释的代码具有同样的缩 阅读全文
posted @ 2022-10-27 15:42 Violeshnv 阅读(124) 评论(0) 推荐(0)
摘要: GameTheory 概述 等边际原理:最优的资源配置必须资源在每种用途上的边际贡献都需相等 羊群效应:大家做什么,自己也跟着做什么,不管对错 社会的基本问题:协调问题、合作问题 协调问题的核心是人们如何预测他人的行为,最直接的办法是沟通和交流,需要行为规范的知识、对对方特性的知识,甚至对方如何看待 阅读全文
posted @ 2022-10-27 15:30 Violeshnv 阅读(351) 评论(0) 推荐(0)
摘要: 意志力的本质 前额皮质分成三个区域,掌控“我要做”、“我不要”和“我想要” 两个自我:原始本能和自控系统 意志力的前提:自我意识,认识你自己,考虑每一个决定 训练方法 冥想,控制走神 深呼吸 锻炼 充分睡眠 明智地使用自控力 锻炼自控力 自我记录 选择更难的一些小事 三思而后行 应激反应和三思而后行 阅读全文
posted @ 2022-10-27 15:29 Violeshnv 阅读(84) 评论(0) 推荐(0)
摘要: 《学会提问》这本书可以被分为三个部分: 正确提问和批判性思维的关系,为什么要学会提问 什么阻碍了批判性思维 如何分析一个论证 为什么要学会正确提问 因为这个世界是嘈杂的,总有人坚称我们一定要按他们所说的那样去做。他们努力塑造我们的行为习惯,但他们说的话至多是真假参半。如果我们不想被一些专家牵着鼻子走 阅读全文
posted @ 2022-10-27 15:27 Violeshnv 阅读(202) 评论(0) 推荐(0)
摘要: 下载地址 Wireshark 是一个拦截和观察网络包的工具。 工作原理 由于更上层的数据最终都会成为链路层的一个个帧(frame),Wireshark 接受链路层(link-layer)的数据包(packet)的副本后,经过内部的包分析工具(packet analyzer)实现包的拦截和观察。包分析 阅读全文
posted @ 2022-10-27 15:25 Violeshnv 阅读(57) 评论(0) 推荐(0)
摘要: 理论 K-NN,即 k 近邻算法,是一种基本的分类和回归的算法,其主要思想可以归纳为:选择与待检测数据最相近的 k 个数据,再将这 k 个数据的成分最多的类别作为待测数据的类别。 假如给定数据 $T={ (\pmb{x_1}, y_1), (\pmb{x_2}, y_2), \dots (\pmb{ 阅读全文
posted @ 2022-10-27 15:20 Violeshnv 阅读(58) 评论(0) 推荐(0)
摘要: 线性回归的预设 线性 只能通过每个样本各维的线性组合获得预测结果,这使得函数很简单,但拟合能力较弱。 同方差性 每个样本的方差不变。方差不同会使得拟合函数对某些数据敏感性有差异。 独立性 每个样本独立于其他样本 固定特征 特征数是固定的 非多重共线性 特征直接不能存在线性关系 $$ \begin{a 阅读全文
posted @ 2022-10-27 15:12 Violeshnv 阅读(50) 评论(0) 推荐(0)
摘要: 基本公式 $$ \begin{align*} F(x)&=P\lbrace X\le x\rbrace=\frac1{1+e^{(\mu-x)/\gamma}}\ f(x)&=F^\prime(x)={e^{(\mu-x)/\gamma}\over\gamma(1+e^{(\mu-x/\gamma) 阅读全文
posted @ 2022-10-27 15:04 Violeshnv 阅读(50) 评论(0) 推荐(0)
摘要: 标准化 $$ \begin{align*} \pmb x&=\left(x^{(1)},x^{(2)},\dots,x^{(n)}\right)\ \pmb\mu&=\frac1m\sum_{i=1}^m\pmb x_i\ \pmb\sigma&=\sqrt{\delta+\frac1m\sum_{ 阅读全文
posted @ 2022-10-27 15:01 Violeshnv 阅读(290) 评论(0) 推荐(0)
摘要: 算法分出 $n$ 个类($c_1,c_2,\dots,c_n$)之后,得到 $n$ 个向量 $\pmb w$,分类方法为 $c=\underset{c_i\in[c_1,\dots,c_n]}{\arg\max}\pmb w_i^T\pmb x$。 求 $\pmb w_1$ 和其他向量 $\pmb 阅读全文
posted @ 2022-10-27 14:57 Violeshnv 阅读(57) 评论(0) 推荐(0)
摘要: $L^2$ 正则 结论 $$ \begin{align*} J=(\pmb X\pmb w-\pmb y)^T(\pmb X\pmb w-\pmb y)&\implies\pmb w=(\pmb X^T\pmb X)^{-1}\pmb X^T\pmb y\ \widetilde J=(\pmb X\ 阅读全文
posted @ 2022-10-27 14:55 Violeshnv 阅读(57) 评论(0) 推荐(0)
摘要: 贝叶斯分类器 $$ \begin{align*} y&=\underset{c_i}{\arg\max}\left\lbrace{P[\pmb X=\pmb x\mid Y=c_i]P[Y=c_i]\over\sum_kP[\pmb X=\pmb x\mid Y=c_k]P[Y=c_k]}\righ 阅读全文
posted @ 2022-10-27 14:51 Violeshnv 阅读(43) 评论(0) 推荐(0)
摘要: 聚类 聚类方法在于寻找数据中的集群(clusters),在同一个集群中的数据在某些方面更加相似。这同时也是对数据的一种压缩,因为我们使用了更小的集合—集群—来表示更大的数据。也可以理解为寻找有用特征的一种方式,如果一系列数据可以很好地被集群中心点表示,那么很有可能我们发现了更好的特征。 为了获得聚类 阅读全文
posted @ 2022-10-27 14:48 Violeshnv 阅读(63) 评论(0) 推荐(0)
摘要: 在前一篇文章中,已经初略的建立了前向神经网络,但是前向神经网络大量的前馈计算使其只有较低的速度,因此我们来建立反向神经网络。 本篇主要是公式 链式法则 在学习偏导数的反向传递之前,需要有对链式法则有一定的了解 $$ \begin{align*} \text{provide that }&y = y( 阅读全文
posted @ 2022-10-27 14:41 Violeshnv 阅读(56) 评论(0) 推荐(0)
摘要: 根据上一篇文章,来构建神经网络吧 明确输入和输出 选择合适的各种函数 用矩阵和激活函数建立起从输入到输出的拟合函数 用正向传播或反向传播获得损失函数的偏导数(注意对一定的数据集来说自变量为 $\pmb{W}$,$\pmb{A}$ 固定) 用梯度下降法努力使损失函数最小 mnist分析(输入分析) 下 阅读全文
posted @ 2022-10-27 14:35 Violeshnv 阅读(91) 评论(0) 推荐(0)
摘要: 基础知识 梯度(高等数学)、矩阵运算(线性代数)、numpy(ndarray)、python基础语法 目录 神经网络架构 神经网络建立 先用比较简单的正向传播建立好框架,再用反向传播改变算法 实例:学习mnist手写数字数据集 {:toc} 神经网络架构 矩阵 拟合 梯度 矩阵运算 我们可以把矩阵看 阅读全文
posted @ 2022-10-27 14:29 Violeshnv 阅读(70) 评论(0) 推荐(0)
摘要: 为什么卷积神经网络的能力更强?以 mnist 数据集为例,在普通的神经网络中,输入的数据是长度为 $784$ 的像素。但实际上图像本身 $28\times28$ 的的二维结构已经被破坏了,每个像素与之上下更多像素之间的位置关系都消失了。神经网络所看见的世界是由一维向量构成的,自然无法与现实形成更好的 阅读全文
posted @ 2022-10-27 14:21 Violeshnv 阅读(64) 评论(0) 推荐(0)
摘要: 最优化方法 迭代法 $x\ 为不动点 \iff f(x) = x$ 求解非线性方程 $$f(x)=0$$,可将其改写为具有解为不动点形式的另一个函数 $g(x)$,使得 $\forall x[f(x)=0\leftrightarrow g(x)=x]$。取任意初始值 $x_0$ 和相应的迭代结果 $ 阅读全文
posted @ 2022-10-27 14:07 Violeshnv 阅读(225) 评论(0) 推荐(0)
摘要: 引入进程的原因 进程是为了刻画并发程序的执行过程而引入的概念,进程管理就是对并发程序的运行过程的管理,也就是对CPU的管理。 进程管理的目标是最大限度地发挥CPU的处理能力,提高进程的运行效率。 并发执行 程序的并发执行是指若干程序或程序段同时运行。它们的执行在时间上是重叠的。 程序在并发执行时会导 阅读全文
posted @ 2022-10-27 12:20 Violeshnv 阅读(184) 评论(0) 推荐(0)
摘要: 存储管理概述 存储空间的分配; 存储地址的变换; 存储空间的保护; 存储空间的扩充。 内存的分配与回收 内存分配是为进入系统准备运行的进程分配内存空间,内存回收是当进程运行结束后回收其所占用的内存空间。 存储分配方案主要包括以下要素: 存储空间的描述结构。 存储分配的策略。 把程序中的逻辑地址转换为 阅读全文
posted @ 2022-10-27 12:12 Violeshnv 阅读(135) 评论(0) 推荐(0)
摘要: Linux中一切皆为文件 文件 文件是具有名字的一组相关信息的有序集合,存放在外部存储器中。 文件系统 文件系统是操作系统的一个重要组成部分,它负责管理系统中的文件,为用户提供使用文件的操作接口。 文件系统由实施文件管理的软件和被管理的文件组成。文件系统软件属于系统内核代码,文件则按特定的格式存放在 阅读全文
posted @ 2022-10-27 12:05 Violeshnv 阅读(130) 评论(0) 推荐(0)
摘要: C#中的true和false运算符 基础用法 我们先定义一个示例用的类 public class BoolTest { public int X { get; set; } public BoolTest(int x) { X = x; } public static bool operator t 阅读全文
posted @ 2022-10-27 11:53 Violeshnv 阅读(176) 评论(0) 推荐(0)
摘要: 输入输出 ConsoleKeyInfo c; do { c = Console.ReadKey(); // 读取按键 } while (c.Key != ConsoleKey.Escape); // 等待输入Esc键 string s = Console.ReadLine(); if (s != " 阅读全文
posted @ 2022-10-27 11:52 Violeshnv 阅读(74) 评论(0) 推荐(0)
摘要: 自定义集合 集合接口 IList<T>列表 关键词:变长数组、有序集合、任意访问、索引 常用方法: list.Add(T); list.Remove(); list.RemoveAt(int); list.Sort(); list.Sort(IComparer<T>); list.Contains( 阅读全文
posted @ 2022-10-27 11:52 Violeshnv 阅读(30) 评论(0) 推荐(0)
摘要: 良好的构建 重写基类object成员 ToString() 如果没有重载 ToString() ,那么这个函数返回类型的名称 System.Console.Write(new Random().ToString()); // display: System.Random 但有时候我们需要这个函数输出 阅读全文
posted @ 2022-10-27 11:52 Violeshnv 阅读(34) 评论(0) 推荐(0)
摘要: 类 类的声明和实例化 class A{} // another file F(){ A a = new A(); // 实例化类,new <类名>(实例化参数) A aa; aa = new A(); // 先声明后实例化同样可行 } 类的成员 字段和方法 class A { private str 阅读全文
posted @ 2022-10-27 11:51 Violeshnv 阅读(32) 评论(0) 推荐(0)
摘要: C#语言基础 数据类型 $$ \begin{array}{|c|c|c|} \hline \text{数据类型} & \text{值类型} & \text{引用类型} \ \hline & sbyte \space byte \space short \space ushort & object \ 阅读全文
posted @ 2022-10-27 11:51 Violeshnv 阅读(43) 评论(0) 推荐(0)
摘要: C#实现各种排序 每种排序的要点和实现 文章中参数Func<T, T, bool> comp的意思是:排序后对于任意i < j,不可能有comp(list[j], list[i]) 冒泡排序 每次循环都将最值放到最前或者最后 倒着排序,只需访问一次list.Count(可选) 使用sorted布尔变 阅读全文
posted @ 2022-10-27 11:51 Violeshnv 阅读(47) 评论(0) 推荐(0)
摘要: class Rational { static inline int gcd(int a, int b) { if (!b) return abs(a); while ((a %= b) && (b %= a)) ; // do in while return a + b; } public: st 阅读全文
posted @ 2022-10-27 11:51 Violeshnv 阅读(25) 评论(0) 推荐(0)
摘要: 在C++中实现Python的range 代码在最后,可以先看代码再看说明 在实现过程中几个应该注意的问题 整型溢出 for (auto i : irange(1e9, -2e9, -2e9)) std::cout << i << "\n"; std::cout << '\n'; // 如果不注意溢出 阅读全文
posted @ 2022-10-27 11:50 Violeshnv 阅读(116) 评论(0) 推荐(0)
摘要: C++ 与 C 语言相比有着更强的类型检查,包括四种 cast,左值右值之分,reference,以及最重要的——对 const 的要求。 const 是一个相当麻烦的要求,比如其强大的“传播性”——只要在一个地方使用,就可能蔓延到各个角落,出现各种编译错误。但编程实践证明 const 的使用是值得 阅读全文
posted @ 2022-10-27 11:50 Violeshnv 阅读(59) 评论(0) 推荐(0)
摘要: 三次异或交换数字 $\wedge$ 在本文表示异或 void swap(int * restrict x, int * restrict y) { if (x == y) return; *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; // *y ^= *x ^= 阅读全文
posted @ 2022-10-27 11:50 Violeshnv 阅读(72) 评论(0) 推荐(1)
摘要: 本文的叙述将基于 x86-64 为什么要学习汇编语言 汇编语言其实就是人能识别的机器语言,理解汇编语言可以是学习计算机系统的必经之路。 前置知识 指令集架构(Instruction Set Architecture, ISA) 指令集架构是描述计算机行为的一层抽象,它提供了程序员应当了解的计算机工作 阅读全文
posted @ 2022-10-27 11:50 Violeshnv 阅读(582) 评论(0) 推荐(0)
摘要: 在 C 语言层面除了写法以外没什么区别。 int a = 5; a == 0 ? puts("x") : puts("z"); if (a == 0) { puts("x"); } else { puts("z"); } 在汇编语言层面上有一些区别,if 倾向于使用条件控制转移(j 系列)命令,三元 阅读全文
posted @ 2022-10-27 11:49 Violeshnv 阅读(44) 评论(0) 推荐(0)
摘要: Shell函数 #!/bin/bash 定义 在被使用之前,函数必须已经被定义 如果函数名重复,后一个函数会覆盖前一个函数 function foo { echo "foo" } # 也可以不写function关键字 bar { echo "bar" } 参数 运行函数就如同运行一个脚本,它也具有参 阅读全文
posted @ 2022-10-27 11:49 Violeshnv 阅读(39) 评论(0) 推荐(0)
摘要: 因为用 Verilog 会有颜色显示,所以用的 Verilog。 记录一下 Natural Number Game 的答案,好久以前做的,但没做完。 Tutorial world $$ \text{example1}:xy+z=xy+z $$ lemma example1 (x y z : myna 阅读全文
posted @ 2022-10-27 11:48 Violeshnv 阅读(347) 评论(0) 推荐(0)
摘要: 无类型系统 本节为其他章节作引。 无类型算数表达式 一门语言需要语法、语义、语用来构成。现在以无类型算数表达式这个非常简单的语言开始探讨,我们将明确它的语法和语义来充分了解这门语言。 语法 无类型算数表达式语言的语法中只包含 $true, false, 0, \operatorname{succ}, 阅读全文
posted @ 2022-10-27 11:48 Violeshnv 阅读(88) 评论(0) 推荐(0)
摘要: 前一篇类型系统与程序语言——简单类型 子类型和递归类型 子类型 Subtyping 定义 如果没有子类型,那么 $(\lambda r:\lbrace x:Nat\rbrace.\ r.x)\ \lbrace x=0,y=1\rbrace$ 在语法上是无法判断出类型的,因为形参和实参的类型不匹配。为 阅读全文
posted @ 2022-10-27 11:48 Violeshnv 阅读(272) 评论(0) 推荐(0)
摘要: 简单类型 经过上一篇类型系统与程序语言——无类型系统的学习,已经对 Lambda 表达式初窥门径,但在使用时却会产生一些问题,比如可能产生 stuck 语句。上一章定义链表时用到了许多参数,但是如果不知道上下文,很难直接了解每个参数的含义。这时候一个类型系统就可以帮助我们规避这种错误和麻烦。 基本上 阅读全文
posted @ 2022-10-27 11:47 Violeshnv 阅读(41) 评论(0) 推荐(0)
摘要:  C语言的单引号问题 单引号的原理 C语言的单引号实际上时将' '内的字符转化为ASCII码对应的整型值,并且在存储时占据一个字节,即sizeof(char) // 第一个例子 int main() { char ch; ch = '?'; printf("%d, %c", ch, ch); / 阅读全文
posted @ 2022-10-27 11:46 Violeshnv 阅读(102) 评论(0) 推荐(0)
摘要: C语言结构体中的零长数组 实例 struct A { int len; int var[0]; }; struct B { int len; int *var; } 其中,结构体A使用了零长数组,结构体B用了指针。 为什么要用零长数组 我归纳了以下三点原因: 节约空间 在int和指针占4字节的机器上 阅读全文
posted @ 2022-10-27 11:46 Violeshnv 阅读(51) 评论(0) 推荐(0)
摘要: 问题 #include <dirent.h> struct dirent *d; d->d_name; IDE 提示时出现如下字样 头文件中则是 struct dirent { __ino_t d_ino; __off_t d_off; unsigned short int d_reclen; un 阅读全文
posted @ 2022-10-27 11:45 Violeshnv 阅读(38) 评论(0) 推荐(0)