Linux 基础
Linux版本:
内核版本:https://www.kernel.org/
【主版本号】【次版本号】【末版本号】:次版本号奇数为开发版,偶数为稳定版。
发行版本:
RedHat Enterprise Linux
Fedora
Centos
Debian
Ubuntu
VirtualBox
Virtualbox
下载安装
Linux-CentOS
系统镜像:http://isoredirect.centos.org/centos/7/isos/x86_64
选择合适的镜像进行下载:
虚拟机中添加系统镜像
新建虚拟机:
指定相关参数:
选择合适的内存大小和处理器个数:
选择虚拟硬盘:
查看已配置参数:
虚拟机加载系统镜像:
选择“存储”,“控制器:IDE\text {IDE}IDE”,添加盘片:
添加完成下载的 CentOS\text{CentOS}CentOS 镜像文件:
启动虚拟机:
选择 Install CentOS 7\ ...
搜索技术
搜索技术
状态空间搜索:是一种通用的问题求解方法,它首先把问题描述转换为一个状态空间图,然
后设计特定的图遍历方法在状态空间中搜索问题的解。需要注意的是,为了提高搜索的效率,
在遍历状态空间时需要添加优化技术,比如剪枝策略用于尽可能避免不必要的无效搜索,启发式信息用来加速朝目标状态逼近的速度。
问题的状态空间表示
状态:
X=[x1,x2,⋯ ,xn]X=\left[x_1, x_2, \cdots, x_n\right]
X=[x1,x2,⋯,xn]
状态分量:每个元素 xix_ixi(i=0,1,⋯ ,ni=0,1,\cdots,ni=0,1,⋯,n)。
操作符:把一个状态转变成另一个状态的操作或者运算。
状态图:状态定义为图的结点,操作符定义为图的边,一个问题的全部可能状态则可以表示为一个图。
路径:操作符序列连接起来的状态图中的一个状态序列。
路径耗散:一条路径性能或求解问题的代价。
状态空间图:(S,A,G,F)(S,A,G,F)(S,A,G,F)
SSS:问题的初始状态。
AAA:操作符集合。
GGG:目标测试,目标状态的状态集合 or\text {or}or 判 ...
贪心算法
贪心算法
贪心算法:在多阶段决策过程中,以当前状态为基础,根据特定贪心准则/优化测度进行局部最优决策,而不考虑各种可能的整体情况。自顶向下,以迭代做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。
分解:将原问题求解过程划分为连续的若干决策阶段;
决策:在每一个决策阶段依据贪心策略进行贪心决策,得到局部最优解,并缩小待求解问题规模;
合并:将各个决策阶段的局部最优解合并为原问题的全局可行解。
⭐贪心算法的设计模式:
1234567S = {};while (notSolution(S)) { x = Select(C); S = S + {x}; C = C - Collection(x);}return S;
找零钱问题:
贪心要素
具体
候选集合 C\text {C}C
各种面值的货币
解集合 S\text {S}S
已付出的货币
可行解函数 Solution\text {Solution}Solution
已付出的货币面值等于应付金额
选择函数 Select\text {Select}Select
从候选集 ...
动态规划
动态规划
动态规划的关键在于解决重叠子问题的重复计算,以空间换时间的策略解决指数级复杂度的分治算法,改为多项式级的时间复杂度。
动态规划算法并非适用与所有的最优化问题,适用与动态规划求解的问题应该具备两个基本要素:最优子结构性质和子问题重叠性质。
最优子结构性质:问题的最优解包含其他子问题的最优解,问题的最优解分解(两个部分或多个部分、删除第一个或最后一个分量),得到的子问题的解 →\rightarrow→ 该子问题的解也是特定子问题的最优解。
子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题重复出现。第 111 次执行,执行求解过程,记录求解结果。第 nnn 次执行,从记录中引用答案。
求解步骤
分析最优子结构性质:分析和描述该子解对应的子问题,证明该子解是对应子问题的最优解,该问题满足最优子结构性质;
基于划分的方法:问题的最优解依据问题性质划分为两个或多个子解
基于减一的方法:问题的最优解依据问题性质缩减规模
减去最优解的第一个分量
减去最优解的最后一个分量
确定状态表示和状态递推方程,递归定义最优值;
确定状态转移顺序,以自底向上的方式计算出最优值;
根 ...
递归与分治
递归与分治
递归程序
用函数自身给出的定义的函数:递归函数
一个递归函数的两个基本要素:
递归边界
递归关系式
直接或间接调用自身的程序:递归程序
一个递归程序的两个部分:
边界处理部分
递归调用部分
阶乘 N
问题分析
递归函数:
当 N⩾1N \geqslant 1N⩾1 时,N!=N×(N−1)!N !=N \times(N-1) !N!=N×(N−1)!
当 N=0N =0N=0 时,N!=0!=1N !=0!=1N!=0!=1
将两个要素合并就是:
N!={1N=0N(N−1)!N>0N != \begin{cases}1 & N=0 \\ N(N-1) ! & N>0\end{cases}
N!={1N(N−1)!N=0N>0
算法设计与实现
递归程序:
1234int factorial(int n){ if(n== 0) return 1;//递归边界 return n* factorial(n-1);}
Fibonacci 数列
问题分析
第 111 个月,兔子 111 对;
第 222 个月,兔子 111 ...
枚举算法
枚举算法
枚举算法(穷举法):按照问题本身的性质,一一列举该问题所有可能解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解。
是,采纳这个解。
不是,抛弃这个解。
在列举的过程中不能遗漏也不能重复,遗漏会造成算法求解结果的不正确,重复会显著降低算法执行效率。
枚举算法的以下三个突出特点:
解的高准确性和全面性:
检验问题的每一种可能情况;
(时间足够)枚举算法的答案肯定是正确的;
能方便求解出问题的所有解。
实现简单:通过循环for来逐一列举和验证。
效率提升空间大。
“枚举三步”:
确定枚举对象;
逐一列举可能解;
逐一验证可能解。
模糊数字
百位缺失
问题分析
1⃣确定枚举对象
在该五位数编码中,只有百位数模糊不清,百位数字只能是 0∼90 \sim 90∼9 中的某一个数字。
⇒\Rightarrow⇒ 选择百位数作为枚举对象。
2⃣逐一列举可能解
将百位数字 h∈{0,1,2,3,4,5,6,7,8,9}h \in\{0,1,2,3,4,5,6,7,8,9\}h∈{0,1,2,3,4,5,6,7,8,9} 和问题中的其他已知 444 位数字组成完整 ...
Go 语言从入门到实战
编写第一个 Go 程序
下载和安装
最新版:https://go.dev/doc/install
以往版本:https://golang.google.cn/dl/
🌟项目名:go_learning
基本程序结构
⭐src\ch1\main
hello_world.go:
12345678package mainimport "fmt"func main() { fmt.Println("Hello World")}
获取退出返回值:os.Exit
获取命名行参数:os.Args
测试程序要求:
测试文件:xxx_test.go
测试方法:func TestXXX(t *testing.T){...}
⭐src\ch2\test
1⃣first_test.go:
1234567package try_testimport "testing"func TestFirstTry(t *testing.T) { t.Log("My first try!")}
=== RUN TestFirstTry
h:\go_learning\src\ch2\test\first_test.g ...
J2Cache Upgrade
编译运行
Redis
下载解压
下载地址
查看配置
1redis-server.exe redis.windows.conf
配置 redis IP\text {redis IP}redis IP 地址及端口号
1redis.hosts = 127.0.0.1:6379
项目下载
项目编译
1mvn package -DskipTests=true
项目运行
1.\runtest.bat
出现报错,缺少相关依赖(J2Cache\core\pom.xml)
下面是更新后的pom.xml(j2cahce-core)文件:增加commons-pool2的依赖项。
12345<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> < ...
相似矩阵及二次型
向量的内积、长度和夹角
向量的内积
向量的内积:设 nnn 维向量 x=(x1,⋯ ,xn)y=(y1,⋯ ,yn)x=\left(x_1, \cdots, x_n\right) \quad y=\left(y_1, \cdots, y_n\right)x=(x1,⋯,xn)y=(y1,⋯,yn)
[x,y]=x1y1+…+xnyn=(x1,…,xn)(y1⋮yn)=xyT[x, y]=x_1 y_1+\ldots+x_n y_n=\left(x_1, \ldots, x_n\right)\left(\begin{array}{c}
y_1 \\
\vdots \\
y_n
\end{array}\right)=xy^T
[x,y]=x1y1+…+xnyn=(x1,…,xn)⎝⎜⎜⎛y1⋮yn⎠⎟⎟⎞=xyT
相关性质:设 nnn 维向量 x=(x1,⋯ ,xn)y=(y1,⋯ ,yn)z=(z1,⋯ ,zn)x=\left(x_1, \cdots, x_n\right) \quad y=\left(y_1, \cdots, y_n\right) \qu ...
概率论与数理统计
概率论
自然界与社会生活中的两类现象
确定性现象:结果确定
不确定性现象:结果不确定
概率论与数理统计是研究随机现象统计规律的数学学科
随机事件的关系即运算
随机现象是在个别实验中结果呈现不确定性,但在大量重复试验中,其结果又具有统计规律的现象。
为了研究随机现象,就要对客观事件进行观察。观察随机现象的过程称为随机试验,简称试验。
随机试验的特点:
在相同的条件下,试验可以重复进行。
每一次试验的可能的结果不止一个(至少两个,也可以是无穷多个),并且能事先明确试验的所有可能结果。
在每次试验之前不能确定哪一个结果会出现。
样本空间:随机试验 EEE 的所有可能的结果组成的集合。记为 SSS(或 Ω\OmegaΩ)
样本点:样本空间的元素,即 EEE 的每一个结果。
随机试验 EEE 的样本空间 SSS 的子集 AAA 称为 EEE 的 随机事件,简称事件。
当 AAA 中某一个样本点出现时,就说事件 AAA 发生了。
由一个样本点 eee 组成的单点集 {e}\{e\}{e} 称为基本事件。
由若干个基本事件组合而成的事件称为复合事件。
样本空间 SSS 包含了试验的所有样本点 ...