错题总结(5)

1.常见的计算排序的复杂度

在这里插入图片描述
在这里插入图片描述
排序方式详解:
1.冒泡排序:添加链接描述
2.选择排序:添加链接描述
3.插入排序:添加链接描述
4.希尔排序:添加链接描述
5.归并排序:添加链接描述
添加链接描述
6.快速排序:添加链接描述
添加链接描述看这比较清楚
下面的是这个里面的,能弄清楚思路的
Demo步骤解析:

1.一开始选定数组的最后一个元素5作为基准值,也就是最终排序结果应该是以5为界限划分为左右两边。

2.从左边开始,寻找比5大的值,然后与5进行调换(因为如果比5小的值本来就应该排在5前面,比5大的值调换之后就去到了5的后面),一路过来找到了7,将7与5调换,结束此次遍历。

3.从右边开始,由于7已经是上一轮排好序的便不再动它,从10开始,一路向左遍历,寻找比5小的值,然后与5进行调换(因为如果比5大的值本来就应该排在5后面,比5小的值调换之后就去到了5的后前面),一路过来找到了4,将4与5调换,结束此次遍历。

4.从左边开始,由于3和4都是前两轮已经排好序的便不再动它,从2开始,一路向右遍历,寻找比5大的值,然后与5进行调换(道理同步骤2),一路过来找到了9,将9与5调换,结束此次遍历。

5.从右边开始,由于排在9后面的那几个数字都是上几轮排好序的便不再动它,从1开始,一路向右遍历,寻找比5小的值,然后与5进行调换(道理同步骤3),一下子就找到了1,将1与5调换,结束此次遍历。

6.这个时候,发现5的左右两边都是排好序了的,所以结束此轮排序,5的左右两边抽出来各自进行下一轮的排序,规则同上,直到无法再拆分下去,即完成了整体的快速排序。
7.堆排序:添加链接描述
添加链接描述推荐这个
8.基数排序:添加链接描述
9.桶排序:添加链接描述
10.计数排序:添加链接描述

排列的大小:2^N>NlogN>NloglogN>N

最短路径算法:一个是迪杰斯特拉算法,求从某个源点到其余各顶点的最短路径,求解过程按路径长度递增的次序产生的最短路径,时间复杂度是O(n^2) ; 另一种算法是弗洛伊德算法,求 每一对顶点之间的最短路径,时间复杂度为O(n^3)。

2.有关于线性结构与非线性结构

广义表是非线性结构的,它也是线性表的一种推广
二叉树是树状结构
稀疏矩阵常用来存储图

数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。
非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。
如树,表,***数组等
在这里插入图片描述
线性表长度的定义是它所包含的元素的个数。
元素的类型决定了元素所占用存储空间的大小,但元素的个数不等价于元素的类型。
广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。
广义表的取表尾运算,其结果通常是个表,但有时也可是个单元素值
广义表的长度:最大括号中的 逗号数+1
广义表的深度:展开后含括号的层数。

3.查找:

分治法:添加链接描述
添加链接描述推荐这个,讲的比较清楚
1.二分查找
二分查找最多查找次数是二分查找树的高度,n个节点的二叉树高度为log2 n
二分查找必须有序!否则没有意义

4.一个容器类数据结构,读写平均,使用锁机制保证线程安全。如果要综合提高该数据结构的访问性能,最好的办法是

1.只对写操作加锁,不对读操作加锁
只对写操作加锁,不对读操作加锁,会造成读到脏数据
2.读操作不加锁,采用copyOnWrite的方式实现写操作
CopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用。这里读写平均,不适用
3.分区段加锁
分段加锁,只在影响读写的地方加锁,锁可以用读写锁,可以提高效率

5.哈夫曼编码

连接1:添加链接描述
连接2:添加链接描述
连接3:添加链接描述
连接4:添加链接描述
上面三个可以看看,这个详细一点

哈夫曼编码:
1)哈夫曼编码是一种无前缀编码,即一组编码中任一编码都不是其他编码的前缀,使得解码时不易混淆。常用于数据压缩,加密解密等场合。
2)哈夫曼编码也是一种可变字长编码,每个字符编码的长度可以是不相等的。
3)哈夫曼编码的过程其实是在构造一棵二叉树,其中每个待编码的字符是这棵二叉树的叶子节点。
注意:1)叶子节点的权值:是对叶子节点赋予的一个有意义的数值量,通常表示对应字符在所在字符串中出现的次数。
2)二叉树的带权路径长度:是从根节点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。
3)给定一组具有确定权值的叶子结点,可以构造处不同的二叉树,其中带权路径长度最小的二叉树就称之为哈夫曼树。

哈夫曼编码流程:
AGDCCDDDGFBBFFGGDDDGGGEFFDDCCCDDDFGAAA
A:4
B:2
C:5
D:12
E:1
F:6
G:8
在这里插入图片描述

6.AEO网

添加链接描述

7.数组A[0…4,-1…-3,5…7]中含有元素的个数

三维数组:
长的边 个数:4-0+1=5
宽的 边 个数 :(-1)-(-3)+1=3
高的边个数 :7-5+1=3
总个数:533

8.二叉排序树(Binary Sort Tree)

又称二叉查找树.它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树

9.线性结构:

线性结构包括顺序存储结构和链接存储结构。所以线性表有两种情况。除了线性结构还有非线性结构,如:树,图。栈和队列就是用线性结构实现的,它本身就是一中种结构。可以把栈和队列归在线性结构中
线性结构与非线性结构,主要看元素之间的关系,如果是一对一的关系则是线性表,如果不是一对一的关系则是非线性表。

10.KMP算法

添加链接描述
其实说白了就是普通的方法减少移动位数
刚开始看的时候感觉好高大,明白了之后就是这种方式,但是确实是比原来的方式节省不少时间

去过说上面的初始接触,下面的就比较的容易接受,代码的话就看第一个的比较合适
上面的一个就是比较适合理解过一边的人再去看的
添加链接描述
直接点击连接描述就可以进行跳转
移动位数 = 已匹配的字符数 - 对应的部分匹配值

“部分匹配值”就是”前缀”和”后缀”的最长的共有元素的长度。以”ABCDABD”为例,
-”A”的前缀和后缀都为空集,共有元素的长度为0;
-”AB”的前缀为[A],后缀为[B],共有元素的长度为0;
-”ABC”的前缀为[A, AB],后缀为[BC, C],共有元素的长度0;
-”ABCD”的前缀为[A, AB, ABC],后缀为[BCD, CD, D],共有元素的长度为0;
-”ABCDA”的前缀为[A, AB, ABC, ABCD],后缀为[BCDA, CDA, DA, A],共有元素为”A”,长度为1;
-”ABCDAB”的前缀为[A, AB, ABC, ABCD, ABCDA],后缀为[BCDAB, CDAB, DAB, AB, B],共有元素为”AB”,长度为2;
-”ABCDABD”的前缀为[A, AB, ABC, ABCD, ABCDA, ABCDAB],后缀为[BCDABD, CDABD, DABD, ABD, BD, D],共有元素的长度为0。

11.PageRank算法

添加链接描述

MFC中CString是类型安全的类。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值