第一章数据结构
1.链表
1、数据结构之一,线性排列数据,指针链接数据;访问O(n),删除/添加O(1)
2、类似链条。
2.数组
1、线性排列数据,含数据下标(即索引);访问(O1),删除/添加O(n)
3.链表与数组对比
4.栈
1、线性排列数据,后进先出LIFO;最新值O(1),最先值O(n)
2、只需访问最新数据时使用方便。
3、类似杯子
4、算法:深度优先搜索
5.队列
1、线性排列数据,先进先出FIFO;最新值O(n),最先值O(1)
2、类似排队。
3、算法:广度优先搜索
6.哈希表
1、键和值组成的数据,存储在数组中,需要设定数组大小mod;查询O(n)
2、当键重复时,数据冲突,可用方法解决冲突:链地址法、开放地址法等
3、链地址法(见下图1):冲突数据存在链表中,查找时,查键而后顺着链表查询。结合了数组的快速查询和链表的快速增删两种优势。
4、开放地址法(最广泛的方法):多次使用哈希函数或线性探测法等将冲突数据重新分配至数组上的下一个候补地址。
5、算法:哈希函数
7.堆
1、图的树形结构;用于优先队列,可自由添加数据,从最小值桉顺序提取数据;数据存储于结点中;取最小/大值O(1),查询/增删O(logn).。
2、必须子结点>父结点。数据添加时,子结点<父结点,则交换位置,直至所有子结点>父结点。
3、频繁取最小值时,全为O(1)。
4、算法:狄克斯特拉算法。
8.二叉查找树
1、又叫二叉搜索树或二叉排序树;图的树形结构;数据存储在结点中,每个结点最多两个结结点;增删O(logn)。
2、性质:每个结点值>左子树任一结点值;结点值<右子树任一值
3、相当于多个堆的组合。
第二章排序
1.冒泡排序
1、通过不断交换最小值至最左端实现顺序排序;时间O(n^2)。
2.选择排序
1、线性查找最小值,挪至最左端,而后不断重复;时间O(n^2)。
3.插入排序
1、从左边开始比较,依次往右排序;时间O(n^2)。
4.堆排序
1、按降序构建堆而后取出数据;时间O(nlogn)。
2、比冒泡排序、选择排序、插入排序快,但是数据结构比较复杂。
5.归并排序
1、把数据分裂,而后按顺序合并;时间O(nlogn)。
6.快速排序
1、随机选择基准值(pivot),在基准值左右排序;属于分治法,将一个问题分成2个子问题分别求解;O(nlogn)。
2、算法:汉诺塔
第三章数组的查找
1.线性查找
1、按照下标,从头往下找;O(n)。
2.二分查找
1、取中间下标,两边查找;O(logn)。
2、数据必须事先排好序。
第四章图的搜索
1.什么是图
1、结点连接形成的图形;连接顶点的线叫边;
2、加权图:在边加值,值为权重/权。
3、有向图:边加箭头,只可单向;无箭头为无向图,双箭头为双向图。
4、图的作用:基于权重可以解决最短路径问题
2.广度优先搜索
1、对图进行搜索的算法;从起点开始,由近及远搜索。
3.深度优先搜索
1、对图进行搜索的算法;从起点开始,沿着一条路不断往下。
?4.贝尔曼 - 福特算法
1、在加权图指定起点和终点的前提下,求解最短路径问题的算法;O(nm),m为边数。
2、所有边重复计算权重和更新权重
3、有负数权重时,可用该方法。
4.狄克斯特拉算法
1、求解最短路径问题的算法;计算起点到终点的最小权重和;O(n^2),数据结构优化后O(m+nlogn)
2、若有负数权重,则无法得出答案。
3、无负数权重时,相较于贝尔曼 - 福特算法,狄克斯特拉算法效率更高。
5.A*算法
1、求解最短路径问题的算法;先估算一个值,然后计算;
2、常用于游戏中计算敌人追赶玩家时的行动路线。
第五章安全算法
1.安全和算法
1、互联网中不可或缺的安全技术,防止他人窃取数据。
2、传输数据时的四个问题:
1.窃听;
2.假冒;
3.篡改
4.事后否认
3、安全技术:
1.窃取:加密
2.假冒、篡改、事后否认:消息认证码、数字签名
2.加密的基础知识
1、将原数据使用二进制表达,生成一个密钥添加到原数据加密,接收端拿到密钥和原数据二进制数据解密。
3.哈希函数
1、哈希函数可以把给定的数据转换成固定长度的无规律数值。
2、特征:数据长度固定不变;同一算法,相同数据输出的哈希值相同;数据相似,哈希值不会相似;数据完全不同,哈希值可能相同(哈希冲突);不可从哈希值得到原数据(输入输出不可逆);
3、哈希函数的实现算法:MD5、SHA-1、SHA-2等;MD5、SHA-1存在隐患;SHA-2应用最广泛。
4、应用:用户密码认证中,因为输入输出不可逆,将密码哈希值存至服务器,客户输入函数后计算哈希值,而后和服务器比对,避免密码被人窃取。
4.共享密钥加密(对称加密)
1、加密数据分类:加密和解密用相同密钥的“共享密钥加密”(也叫对称加密);分别使用不同密钥的“公开密钥加密”。
2、实现算法:凯撒密码、AES、DES、动态口令等
3、缺点:密钥可能会被第三者窃取进而被解密,数据被窃听;密钥数随着人数增多而增多n(n-1)/2。
5.公开密钥加密(非对称加密)
1、加密密钥为公开密钥,解密密钥为私有密钥
2、实现算法:RSA算法、椭圆曲线加密算法等;RSA使用最广泛;
3、缺点:公共密钥被替换后,密钥被篡改,致使数据被窃取(中间人攻击);加密解密耗时长,不适用于频繁使用的数据。
6.混合加密
1、结合共享密钥加密和公开密钥加密;
2、安全性和处理速度都有优势;
3、应用:SSL协议(安全套接层)、TLS协议(传输层安全);
7.迪菲 - 赫尔曼密钥交换
1、通信双方之间安全交换密钥的方法,隐藏密钥数值在公开数值相关的运算中实现密钥安全交换。
2、特征:密钥可呵成但无法分解;可以继续合成新的密钥;密钥合成结果与和合成顺序无关。
8.消息认证码
1、实现认证和检测篡改功能。
2、将共享密钥生成MAC,接受信息时验证MAC是否正确以实现检测篡改功能;
3、MAC的实现算法:HMAC、OMAC、CMAC;HMAC使用最广泛,使用哈希函数实现。
4、缺点:无法确认MAC是谁生成。
9.数字签名
1、实现消息认证码认证、检验篡改、预防事后否认。
2、使用私有密钥生成签名,公开密钥解密签名。
3、实现算法:RSA加密算法
4、缺点:可能会被假冒数字签名
10.数字证书
1、在认证中心申请发行证书,形成包含发送者信息和公开密钥的数字签名。
2、缺点:接收者无法确认公开密钥是否真的来自认真中心。
3、数字证书通过认证中心担保公开密钥的制作者,称为公钥基础设施。
第六章聚类
1.什么是聚类
1、一种算法,实现输入多个数据时,将相似数据分为一组的操作。
2、实现算法:k-means算法、层次聚类算法
2.k-means算法
1、根据事先给定的数据进行聚类。
第七章其他算法
1.欧几里得算法
1、又称辗转相除法,计算两个数的最大公约数。
2.素性测试
1、判断一个自然数是否为素数。
3.网页排名
1、又称佩奇排名,搜索网页时对搜索结果排序的算法。
4.汉诺塔
1、简单易懂的递归算法应用实例。