线性代数——行列式

计算※ 数字型 题型 注意“存在三条对角线的情况”,通过 逐行相加 的到 “三角型”计算 经典例题 抽象型 题型 行列式性质恒等变形 矩阵公式、法则恒等变形,E恒等变形 形特征值、相似 经典例题 思路:利用单位矩阵恒等变形 思路一:利用矩阵相似($\alpha_1,\alpha_2,\alpha_3$无关,后面出现$A\alpha_1,A\alpha_2,A\alpha_3$想到相似) 利用乘法公式凑$PAP^{-1}=B$ 思路二:用行列式性质 思路:“不可逆”=>“行列式为0”=>观察看到为特征值形式$|\lambda E-A|=0$,利用特征值与行列式的关系求解 应用 特征值 思路 “消0且得公因式” 例题 对于特征多项式应两行(或列)加加减减,至多是三行(或列)的加加减减找出 $\lambda-a$ 的公因式,然后再解一个二次方程,就可求出矩阵A的三个特征值 克拉默法则 思路 不用来解大的方程组,常用小的证明题, 齐次方程AX=0有非零解→ |A|=0 齐次方程AX=0没有非零解→ |A|≠0 经典例题 “AB=O” 👉 方程的解(B的列向量是A的解) ​ 👉 秩 r(A)+r(B) ≤ n (n为A的列,B的行)...

Aug 10, 2021 · 1 min · Archai

向量空间管理策略

向量的空间管理,有静态和动态两种策略 静态空间管理策略 开辟内部数组_elem[]并使用一段地址连续的物理空间,_capacity表示总容量 ,_size表示当前的实际规模n,示意图如下: 若采用静态空间管理策略,容量_capacity固定,则有明显的不足… 上溢/overflow: _elem[]不足以存放所有元素,尽管此时系统往往仍有足够的空间 下溢/underflow: _elem[]中的元素寥寥无几,装填因子 λ = _size / _capacity « 50% 动态空间管理策略 在即将上溢时,适当扩大内部数组的容量 递增策略 当需要扩容时,为_capacity追加固定大小的空间,即 T* oldElem = _elem; _elem = new T[ _capacity += INCREMENT ]; 考虑最坏情况,在初始容量为0的空向量中连续插入n = m*I个元素 那么,在第1,I+1,2I+1,3I+1…次插入元素时都需要扩容,表示为 倍增策略 当需要扩容时,增加_capacity 为原来的两倍,即 T* oldElem = _elem; _elem = new T[ _capacity <<= 1 ]; 考虑最坏情况,在初始容量为1的空向量中连续插入n = 2^m个元素 那么,在第1,2,4,8…次插入元素时都需要扩容,表示为 两种策略的复杂度分析 考虑最坏的情况,两种策略的复杂度分别为 递增策略: 为算术级数,0+I+2I+…=O(n ²) 倍增策略: 为几何级数,1+2¹+2²+2³+…=O(2^m)=O(n) 递增策略 倍增策略 累计时间 O(n ²) O(n) 分摊时间 O(n) O(1) 装填因子 λ ≈100% >50% 可以看出,倍增策略在牺牲空间的基础上,换取时间上的巨大提升,可采取√...

Nov 16, 2020 · 1 min · Archai

减而治之与分而治之

减而治之(Decrease and conquer) 什么是“减而治之”? 为求解一个大规模的问题,可以将其划分为两个问题,其一平凡,另一规模缩减 ,分别求解子问题,由子问题的解得原问题的解 比如说,对于一个数组A的求和问题,可以设计如下的算法 sum( int A[], int n ) { return n < 1? 0 : sum(A, n - 1) + A[n - 1]; } 当规模缩减到一定程度后,抵达递归基,返回0 复杂度分析 1. 递归跟踪 绘出计算过程中出现过的所有递归实例(及其调用关系) ,那么它们各自所需时间之总和,即为整体运行时间 上例中,共计n+1个递归实例(分析),各自只需O(1)时间 故总体运行时间为: T(n) =O(1) × (n+1) =O(n) 2.递推方程 对于大规模的问题、复杂的递归算法,递归跟踪不再适用 此时可采用另一抽象的方法… 在本例中,有T(n)=T(n-1) + O(1),T(0)=O(1) 则,T(n) = T(n-2)+O(2) = T(n-3)+O(3) = T(n-n)+O(n)=O(n) 可以看到,两种分析方法的出来复杂度都为O(n) 分而治之(Divide and conquer) 什么是“分而治之”?...

Nov 15, 2020 · 1 min · Archai

DS导论

导论 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列。输入:待处理的信息(问题)输出:经处理的信息(答案) 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序列 可行性 每一基本操作都可实现,且在常数时间内完成 有穷性 对于任何输入,经有穷次基本操作,都可以得到输出 ::: tip Algorithms + Data Structures = Programs (Algorithms + Data Structures) x Efficiency = Computation ::: 如何评判算法的其优劣(计算模型) 实验统计是最直接的方法,但足以准确反映算法的真正效率?不足够! - 不同的算法,可能更适应于不同规模的输入 - 不同的算法,可能更适应于不同类型的输入 - 同一算法,可能由不同程序员、用不同程序语言、经不同编译器生成 - 同一算法,可能实现并运行于不同的体系结构、操作系统… 为给出客观的评判,需要抽象出一个理想的平台或模型 - 不再依赖于上述种种具体的因素 - 从而直接而准确地描述、测量并评价算法 1.图灵机模型(TM) 组成 说明 Tape 依次均匀地划分为单元格 各存有某一字符,初始均为'#' Head 总是对准某一单元格,并可 读取或改写其中的字符。每经过一个节拍,可 转向左侧或右侧的邻格 Alphabet 字符的种类有限 State TM总是处于有限种状态中的某一种 。每经过一个节拍 可按照规则转向另一种状态 。统一约定,‘h’ = halt(停止) 2....

Nov 10, 2020 · 2 min · Archai

PHP语法小结

基本语法 输出语句 语句 功能 echo 输出字符串类型 print_r 输出引用类型(对象,数组等) var_dunp 检测变量类型 ::: tip echo语句可用于给前端返回响应体。比如前端通过ajax请求,可以在xhr.response中直接得到echo的内容 ::: 变量&常量 👉🏼 变量 语句 功能 返回值 isset() 检测变量是否存在 boolean unset() 删除某个变量 none 👉🏼 常量 常量用const 或 define 定义,常量名一般全部大写,不受作用域的限制 ::: tip 一般是define在类外定义常量,const在类内定义常量,并且const必须通过类名::变量名来进行访问。但是php5.3以上支持类外通过const定义常量。 ::: :::danger const不能在条件语句中使用,必出错 ::: 参考文章 《PHP中define() 与 const定义常量的区别详解》...

Oct 14, 2020 · 10 min · Archai

ES6之Promise用法小结

Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值。其目的主要是解决以往回调中嵌套回调的"嵌套地狱"问题,使代码可读性更好,更美观! 基本用法 对于一个标准的Prommise,其基本写法为: new Promise(function (resolve, reject) { //do something... //success resolve('success') //fail & reject // reject('rejected') *resolve和reject只能出现一个 }).then( function (value) { //if succeed,do something... }, function (reason) { //if fail & reject,do something... } ) 如果采用ES6的箭头函数写法,则为: new Promise((resolve, reject) => { resolve('success') //reject('rejected') }).then( value => {}, reason => {} ) 始终牢记,前一个Promise()必须是在后面一个.then()中处理, 如果前一个Promsie()中没有改变状态,即没有resolve()/reject()方法,后面的.then就不会针对这个Promsie()处理 Promise错误处理 Promise()中的错误处理有两种方式,.then()和.catch() .then() 特点: “一一对应”,即一个then()对应处理上一个Promise 用法: new Promise((resolve, reject) => { // 12+p // throw new Error('fail') reject('失败') })....

Aug 18, 2020 · 3 min · Archai