0%

经典算法

算法基础

排序算法:

  • 插入算法:从前向后遍历,按顺序插入元素
  • 希尔排序:类似插入排序,但是遍历元素过程中存在间隔,减少了插入排序的元素移动次数
  • 冒泡排序:类似插入算法,但数据更加相邻
  • 选择排序:依次取出最小元素
  • 归并排序:递归拆分数组,拆分后一层层合并。分治策略,简化问题
  • 堆排序:将数组构建成小根堆,依次取出堆顶元素并更新小根堆
  • 快速排序:取出最左侧元素,从右向左查找,若查找的元素小于当前元素则交换位置,并变更查找方向。一次遍历后效果为比当前元素小的在左边,反之在右边,递归进行
  • 计数排序:桶思想,每个值对应一个桶,桶内数据存在多个
  • 桶排序:每个桶存储一段范围,桶内使用简单的排序算法
  • 基数排序:依次按个位、十位、百位排序,避免数据不均匀问题

基础查找算法:

  • 顺序查找:适用无序数据结构,其它方法均要求有序
  • 二分查找:适用于数组、二叉树
  • 插值查找:类似二分查找,但是通过启发式的公式计算拆分点
  • 分块查找:类似桶排序的查找思路,先分块再查找,适用于数组、桶、多叉树

字符串查找:

  • 暴力逐个字符匹配
  • KMP算法:利用字符串的前缀特征加速比较,复杂度稳定
  • Boyer-Moore算法:利用字符串后缀特征、字符出现位置加速比较,一般情况下性能更好
  • Sunday算法:利用字符出现位置加速比较,在被查找字符串较短时存在优势
  • Rabin-Karp算法:将字符串压缩为hash值再比较,对hash策略有较高要求,适合同时查找多个子串

图算法:

  • 广度优先搜索(BFS)
  • 深度优先搜索(DFS)
  • A*算法:启发式搜索算法,使用某个公式计算下一步应该查找哪个节点
  • Dijkstra算法:查找从某个节点到另一节点的最短路径。贪心搜索最近节点
  • Bellman-Ford算法:查找从某个节点到另一节点的最短路径,支持负权边。遍历所有节点
  • Floyd-Warshall算法:统计任意两点间的最短路径。使用临接矩阵与状态转移的思路实现,类似Bellman-Ford算法
  • Prim算法:将图转换为最小生成树的算法,类似Dijkstra算法
  • 匈牙利算法:二分图算法

差错检测:

  • 奇偶校验:计算每段数据中bit值为1的数量
  • 校验和:简单的字节累加
  • 块和校验:对数据块逐行逐列进行奇偶校验
  • 循环冗余校验(CRC):对数据取模,更标准常用,检查的错误类型更多
  • 汉明校验码:块和校验的优化版本,提高校验效率
  • 哈希函数:MD5、SHA-1、SHA-256

操作系统

计算机组成原理

计算机网络

计算机图形学

  • 抗锯齿优化方案
    • SSAA:超采样抗锯齿,等同于UE中调整屏幕百分比

    • FXAA:快速近视抗锯齿,对渲染后的图片边缘进行模糊平滑处理,可能导致高频信号丢失

    • MSAA:多采样抗锯齿,光栅化阶段在物体的边缘进行超采样

    • TAA:时间抗锯齿,结合前后多帧的采样,并修正物体移动的影响

    • SMAA:子像素形态抗锯齿,类似FXAA进行边缘模糊处理,但是通过更复杂的算法对边缘进行更准确的识别,避免整体效果模糊的问题

    • DLSS:深度学习上采样,通过AI完成抗锯齿。这个功能不只是抗锯齿,重点是上采样

  • 近岸波浪曲线:
    参数定义:$ A=2; B_0=2; B_1=5; $
    波的前半部分与后半部分:$ F_a=x^A; F_b=(\frac{x-1}{B_1-1}-1)^{B_0};$
    通过分段函数组合为完整的函数:$ F_c={x<=1:F_a(x), 1<x:F_b(x)}$
    改造为最终的周期函数:$ F_d = F_c(mod(x,B_1)) $
  • 线或线段是否相交:判断点是否在线的两侧(叉乘结果同号)
  • Point In Polygon(PIP问题):判断点是否在平面图形内
    • 光线投射算法:先判断点是否在多边形包围框内,再判断点是否在多边形上。从点作为启动,取多边形上两点的中点作为射线目标方向,注意多边形上取的两点不得与起点共线。若射线与多边形有奇数个交点,则证明在多边形内。
    • 回转数算法:逐个顶点按顺序遍历,记录遍历过程中点与当前顶点到点与下一个顶点的夹角,夹角总和为0时点在多边形外,2π时在多边形内。角度计算开销很高。
    • 凸多边形:按照顺时针或逆时针,判断点是否在所有边的同一侧(叉乘结果同号)。
  • 多边形内缩或外扩算法
  • Delaunay三角剖分算法: 将点连接成3角面
  • 其它算法查看《UE/引擎目录/Runtime/更详细的文件解析/FMath相关函数.md》

神经网络

最小化问题:

  • 梯度下降算法:从某个自变量开始,查找函数局部最小值,不断向因变量减小的方向迭代自变量

回归:

  • 线性回归:通过直线方程拟合自变量与因变量之间的关系。一种典型的监督学习方法,使用均方差等指标作为损失函数,使用梯度下降等算法作为优化算法。

  • 一元线性回归:最简单的线性回归形式,一个自变量一个因变量

  • 多元线性回归:多个自变量共同影响一个因变量,存在多重共线性、异常值、非线性关系、自相关等多种工程挑战

其它

  • Halton:伪随机数生成算法,具有较强的均匀性质,生成多维数据是,建议采用不同基数
  • RSA算法:非对称加密算法,若数据使用公钥加密,则除暴力破解外只能使用私钥解密,反之亦然

插值

  • 线性插值:前后两个点之间使用线性系数进行插值
  • 曲线插值:前后两个点之间使用曲线系数进行插值
  • 多项式插值:利用前后多个点拟和多项式曲线,再在多项式曲线采样
  • 其它拟和曲线插值:利用贝塞尔、样条线等方法拟和曲线并采样
  • 双线性插值:对于多维度数据,需要在多个方向上进行插值,再对多个方向插值的结果进行插值。共需要n+n-1+n-2+ … +1次
  • DLSS超分辨率:深度学习超级采样
  • 帧生成/插帧:基于光流等属性判断像素两帧间移动的方向与距离,对前后两帧进行插值

平滑

  • 移动平均:取最新的多个点进行平均。可以对最新点进行加权。称为加权移动平均

  • 二次移动平均:普通的平均方法在快速增长或减小的曲线上存在数据误差,可以对数据的斜率进行平均

  • 滤波:均值滤波、高斯滤波、中值滤波等。

  • 电容电感:平滑电压,按照指数曲线渐进