图论
BFS(breadth)广度优先搜索->最短路径问题
贪婪算法
快速找到NP完全问题(没有快速算法的问题)的近似解
动态规划
将一个问题分成小问题,并先着手解决这些小问题 这些子问题必须都是离散的且完整的,不依赖其他子问题,动态规划才管用
K最近邻算法(KNN)
聚类
k-means算法
k-means算法中,随着中心点的位置不断迭代,其必将在某处收敛(数学层面上已证明)
簇的数量需要事先确定
中心点初始位置的不同会导致结果的不同
(通过随机设定初始中心点位置不断尝试k-means算法,从结果中选取最适合的聚类结果)
层次聚类算法
不需要事先设置簇的数量
一开始每个数据自称一类,每个阶段不断合并,选取最合适的阶段作为聚类结果
距离的算法
- 最短距离法
- 最长距离法
- 中间距离法
如何确定相似程度?
=》特征抽取
- 分类
- 回归(预测结果)
简单介绍
- 二叉查找树
- 反向索引
- 傅里叶变换
- 并行算法
安全算法
在互联网交互数据,数据要经过各种各样的网络和设备。
传输数据时的四个问题:
- 窃听
- 假冒
- 篡改
- 事后否认
加密后的数据称为密文
加密和解密就是通过密钥
对二进制文件进行数值计算
散列表(Hash Table)
散列函数+数组
e.g.python里的字典
Hash函数:可以把给定的数据转换成固定长度的无规律数值
- 哈希值多用十六进制表示(在计算机内部仍然是二进制)
- 如果输入的数据相同, 输出的哈希值也必定相同
- 输出相似的数据,并不会导致输出的哈希值相似
哈希冲突
:即使输入的数据不同,哈希值也可能相同- 不可能从哈希值逆向运算出数据
- 哈希值的计算相对容易
实现哈希函数的算法有很多:MD5,SHA-1,SHA-2
密钥
- 共享密钥加密(加密解密使用相同密钥)
- 缺点1:不安全==>
- 实现方法:凯撒密码,AES,DES,动态口令
==>密钥分配问题:找到把密钥安全送出的办法==>
- ==>公开密钥加密(加密解密使用不同密钥)
- 加密使用
公开密钥
,解密使用私有密钥
- 在和多人传输数据时十分便捷
- 缺点1:加密解密耗时
- 实现算法:RAS算法,椭圆曲线加密算法
- 缺点2:中间人攻击:替换密钥(无法显示自己是由谁生成的)==>
- 加密使用
- ==>混合加密
- 共享密钥对数据加密
- 公开密钥对共享密钥加密
- 不会被中间人嘛?
- 共享密钥对数据加密
密钥交换协议
消息认证码MAC
(Message Authentication Code)
- 认证
- 检测篡改
数字签名
- 预防事后否认
- 数字证书
聚类