From 06c4ca49b76cfd43e53240bd7026da99a1cd5f5e Mon Sep 17 00:00:00 2001 From: zhenda Date: Tue, 24 Dec 2024 15:50:41 +0800 Subject: [PATCH] update: 3md --- content/posts/algorithm.md | 521 ++++++++++++++++++++++++++++++ content/posts/fastapi-tutorial.md | 11 +- content/posts/win-shell.md | 42 ++- 3 files changed, 558 insertions(+), 16 deletions(-) create mode 100644 content/posts/algorithm.md diff --git a/content/posts/algorithm.md b/content/posts/algorithm.md new file mode 100644 index 0000000..b206373 --- /dev/null +++ b/content/posts/algorithm.md @@ -0,0 +1,521 @@ ++++ +title = 'Algorithm' +subtitle = "" +date = 2024-12-24T11:08:01+08:00 +draft = true +toc = true +tags = [] ++++ + +数据结构和算法 + +## 重要性 + +使用良好的逻辑和设计, 解决复杂的难题 + +## 思想 + +从易到难 +动画逐步推理 +逆向推理 +使用合理的数据结构, 事半功倍 + +## 数据结构 + +数组 +哈希表 +链表 +树 +图 + +## 算法 + +递归 +回溯 +动态规划 +滚动数组 +快慢指针 + + + + +数据结构 + 一维度 + 线性表 + 顺序表 + 典型例子 + 列表 + 分离式的元素外置的顺序表 + 类型 + 元素外置顺序表 + 实际存储元素的地址,可以存储任意类型元素 + 一体式的 + 便于查找 + 分离式的 + 便于修改 + 链表 + 组成 + 节点 + 数据 + next + 存储结构 + 物理存储单元上 非连续,非顺序的 + 可以计算节点个数 + 判断是否为None + 功能设计 + 设计节点 + 设计链表 + 三种情况 + 0节点 + 1节点 + 多节点 + 受限制的 + 栈stack,又名堆栈 + 可以理解成往杯子放东西 + 栈顶 + 进出的端口 + 也是最后进来的那个元素 + 实际应用 + 列表 + 扩展 + 共享栈 + 两个栈模拟队列 + 队列queue + 可以理解成排队 + 先进先出,及时排出去,需要计数 + 队尾 + 进入 + 队头 + 出去 + 实际使用 + from collections import deque + 列表 + 其他分裂 + 循环队列 + 取余,可以实现循环 + 哈希表(散列表) + 由寻址表和哈希函数组成 + 获取key,通过哈希函数计算得到寻址表的唯一地址,将value存到这个地址 + 哈希函数 + 常用方法 + 除留余数法 + 对寻址表长度取余 + 对最大的质数取余 + 减少偶数的哈希冲突 + 直接定址法 + 关键字分步均匀的情况下使用 + 数字分析法 + 平方取中法 + 装填因子 + 存储的数据个数/寻址表的表长 + 问题 + 哈希冲突 + 得到的地址是重复的 + 解决方法 + 开链表法 + 出现哈希冲突就添加节点 + java的hashmap + 开放寻址法 + 线性探测 + i+1,i+2... + 查找效率低下 + 删除需要逻辑删除,不能置空 + 平方探测 + 1^2, -1^2,2^2, -2^2, 3^2, -3^2... + 出现哈希冲突就把地址加上平方数,继续哈希函数处理 + 需要寻址表的长度是4i+3 + 双重哈希 + 再来一次哈希 + 位图 + 相关学科 + 数论 + 二维度 + 树 + 概念 + 根 + 最上层 + 叶 + 最下层 + 上下层关系 + 子节点 + 父节点 + 节点的度 + 节点的孩子数量 + 树的度 + 最大的节点的度 + 树的深度 + 层级总数 + 同一层级的 + 兄弟节点 + 父节点相同 + 堂兄弟节点 + 分类 + 二叉树 + 遍历方式 + 广度 + queue + 深度 + 根节点的遍历顺序 + 先序 + 节点,左,右 + 人类易读 + 中序 + 左,节点,右 + 二叉搜索树 + 后序 + 左,右,节点 + 递归 + 树的度最大是2 + 存储结构 + 顺序 + 链式 + 分类 + 满二叉树 + 叶子节点长全了 + 完全二叉树 + 完全二叉树的叶子没长全 + 堆 + 作用 + 排序工具 + 取最大值最小值的 + 概念 + 子节点>=或<=父节点的完全二叉树 + 分类 + 优先级队列 + 操作系统的消息,按照重要级别执行 + 二叉堆 + 大根堆 + 根节点是最大值,可以等于子节点 + 小根堆 + 根节点是最小值,可以等于子节点 + 二项堆 + 斐波那契堆 + 特点 + 2p+1 + 左子树 + 2p+2 + 右子树 + 排序 + 步骤 + 根节点和最后的节点交换 + 根节点下沉 + 二叉搜索树 + 左<中<右 + 中序遍历 + 结果为升序数组 + 节点不重复,唯一性 + 可以不是完全二叉树 + 兄弟节点有排序 + 作用 + 大小有序,便于二分查找,提高查找速度 + 操作 + 创建 + + 删除节点 + 方法 + 当节点只有一个孩子 + 直接替换 + 当节点有两个孩子 + 要么用左子树的最右下的节点替换 + 要么用右子树最左下的节点替换 + 查找的效率和树的深度一致 + 分类 + 平衡二叉查找树 + 核心算法 + 维持树的平衡 + 分类 + 红黑树 + 特点 + 从根到叶,路径差小于2倍 + 应用场景 + 数据全部放在内存 + linux中进程的调度 + avl树 + 特点 + 左右子树的深度不能超过1 + 维持树的平衡的方法 + 修改最小不平衡子树 + 插入左孩子出现不平衡 + ll + 右上旋转 + rl + 右上旋加左上旋 + 插入右孩子出现不平衡 + rr + 左上旋转 + lr + 左上旋加右上旋 + 多路查找树 + 矮胖型的树 + 效率取决于访问磁盘的次数 + 深度小,有利于提高效率 + 分之多,层数少 + 绝对平衡 + 子树的深度相同 + b+树 + 应用场景 + 数据大部分放在磁盘 + mysql + 适合文件搜索系统,数据库系统 + 特点 + 结构 + 一个节点的子树和关键字的数量相同 + 叶子节点 + 叶子结点存储的是key + 用链表连接所有叶子节点 + 通过叶子结点获取值 + 分支节点 + 所有分支节点只包含子节点中关键字的最大值 + 因为分支节点不存储信息,只是索引的作用 ,所以一个节点存储的关键字更多,分支更多,读取磁盘次数越少,效率更高 + 两种查找 + 从根节点开始查找 + 头叶子结点的头结点开始遍历 + b树 + 特点 + 数据存储在每个节点上 + 查找速度等价于二分查找 + 定义 + 多路平衡查找树 + 规定节点是分叉下限和上限【m/2, m】 + 2-3树 + 2-3-4树 + redis + 跳表 + 链表添加多层索引和边界 + 实现二分查找的效果 + log2n层 + 插值 + 记录节点 + 维护指针 + 操作 + 右移动, + 下移动 + 哈夫曼树 + 特点 + 树的节点拥有权重值 + 概念 + 带权路径长度最小的二叉树 + 相关概念 + 带权路径长度 + 目标结点的权重值*路径长度 + 路径长度 + 根节点到目标节点的长度 + 哈夫曼编码 + 只能是叶子节点存储信息 + 实际使用 + treelib + Tree() + create_node() + paths_to_leaves() + leaves + show() + save2file() + to_dict() + to_json() + to_graphviz() + Node() + anytree + binarytree + 图 + 概念 + 顶点 + 边 + 邻接 + 两个顶点有边相连,这两个顶点是邻接关系 + 路径 + 从一个顶点到另一个顶点走过的顶点序列 + 度 + 一个顶点有多少条边 + 入度 + 多少条边从该顶点指入 + 出度 + 多少条边从该顶点指出 + 图的存储 + 邻接矩阵 + 就是dataframe + 邻接表 + 就是字典 + + 遍历 + dfs + 定方向搜索,没有路之后返回 + 栈 + bfs + 最短路径 + 计算每一种可能性,标记步数 + 队列 + 拓扑排序 + 关键路径 + 最小生成树 + 二分图 + 最大流 + + + + +算法 + 算法主流思想 + 本质的数据结构 + 树 + 递归 + 问题 + 子问题重复求解 + 终止条件 + 可以转化为使用栈,来减小空间复杂度 + 生成器 + 记忆法 + 空间换时间,存储计算值 + 尾递归 + 降低空间复杂度 + 如果可能尽量使用 + 回溯算法 + 概念 + 强大的暴力解法 + 递归的返回值天然是回溯 + 相当于 二叉树 从下到上的过程 + 用处 + 排列 + 组合 + 优化操作 + 剪枝 + 没有用的搜索分支提前干掉! + 一种优化速度 的操作 + 操作 + 递归后 回退 到之前状态 + 记忆化搜索 + 递归+记录 + 动态规划 + 解决一个大问题,里面的小问题相互联系 + 分析出 转换方程 + 分析出子问题 + 分治算法 + 贪心算法 + 思想原理 + 局部最优解 + 当前最好的选择 + 找到解决问题的极端逻辑 + 最多 + 最少 + 最大 + 最小 + 有手就行 + 枚举算法 + 二进制 + & + | + ^ + 相同为0,不同为1 + ~ + << + 左移 + >> + 右移 + 算法主要应用 + 排序 + 当两个指相等时,是否改变次序 + 稳定 + 冒泡 + n个元素比较n-1次 + 得出最大的 + 时间复杂度 + O(n^2) + 插入排序 + 时间复杂度 + O(n^2) + 插扑克牌一样的排序 + 归并排序 + 时间复杂度 + O(nlogn) + 桶排序 + 时间复杂度 + O(n) + 设置几个桶,有序放入,最后汇总起来 + 不稳定 + 选择排序 + 时间复杂度 + O(n^2) + 选出最小值或最大值,和开始元素交换顺序 + 希尔排序 + 分组来插入 + 时间复杂度 + O(nlogn) + 快速排序 + 时间复杂度 + O(nlogn) + 逻辑 + 标准值 + 分成左边和右边 + 递归 + 查找 + 顺序查找 + 哈希查找 + 二分查找 + 要求有序的数组 + 双指针 + mid + 判断这个 + 树表查找 + dfs + bfs + 前缀树 + 应用 + 自动补全 + 拼写检查 + 结构 + 节点 + A*启发式搜索 + 贝叶斯 + + + + + + +复杂类型 + 回文 + 回文的倒序等于回文 + 子串 + 连续的 + 子序列 + 是排列 + 排列组合 + 两种思想 + 分步加法 + 单步可以完成任务 + 分步乘法 + 需要组合完成任务 + 排列 + 特点 + 有顺序 + Amn + 计算公式 + n*(n-1)(n-2)...(n-(m-1)) + n!/(n-m)! + 数学规定 + 0!=1 + 含义 + 从n个元素取出m个,进行排列 + 全排列 + m=n的时候 + n! + 递归条件 + 1 + 组合 + 特点 + 没顺序 + Cmn + 计算公式 + Amn/Amm + n!/(n-m)!m! + Cmn = C(n-m)n + 递归条件 + 0 + 插空法 + 一起插空 + 分步插空 + 倍缩法 + 除法 + 排列/组合 + 填空法 + 先填变量,忽略不变 + 回溯大法 \ No newline at end of file diff --git a/content/posts/fastapi-tutorial.md b/content/posts/fastapi-tutorial.md index 831cd24..c413436 100644 --- a/content/posts/fastapi-tutorial.md +++ b/content/posts/fastapi-tutorial.md @@ -29,9 +29,18 @@ async await ### pydantic 类型 -``` + + + +Annotated 和 pydantic 结合: + +```python +from typing import Annotated +from pydantic import BaseModel, Field +Annotated[str, Field(min_length=2, max_length=5)] ``` + ## view函数 ### 请求参数和校验 diff --git a/content/posts/win-shell.md b/content/posts/win-shell.md index 1f59edb..f83f851 100644 --- a/content/posts/win-shell.md +++ b/content/posts/win-shell.md @@ -7,9 +7,33 @@ toc = true tags = [] +++ -## powershell +## windows系统的终端 -### 自定义 +- cmd +- windows powershell + +## 环境变量的增删改查 + +```cmd +set +set Path + +set Path=xxx +set Path=xxx;%Path% +``` + +```windows powershell +ls env: +$env:MY_VAR +Get-Command -Name node -All + +$env:MY_VAR = "InitialValue" +$env:MY_VAR = "InitialValue;$env:MY_VAR" +$env:PYTHONPATH = "$env:PYTHONPATH;$(Get-Location)" +rm env:MY_VAR +``` + +## 自定义 powershell ```powershell notepad $PROFILE @@ -52,16 +76,4 @@ Set-Alias -Name kill -Value Stop-Process # 网络操作 Set-Alias -Name ping -Value Test-Connection Set-Alias -Name wget -Value Invoke-WebRequest -``` - -### 环境变量 - -```powershell -ls Env: -$Env:MY_VAR = "InitialValue" -$Env:MY_VAR -rm Env:MY_VAR - - -$env:PYTHONPATH = "$env:PYTHONPATH;$(Get-Location)" -``` +``` \ No newline at end of file