![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 65
与数据结构与算法有关的学习记录
阿猪12138
小谷围中环西十三郎
展开
-
《算法》1.4算法分析
1科学方法观察,测量提出假设模型预测未来事件反馈矫正假设模型1.1计算运行时间的计时器实现:/** * 计时器 * @Author: AZhu * @Date: 2021/2/6 20:42 */public class Stopwatch { private final long start;//开始时间 public Stopwatch() { start = System.currentTimeMillis(); } /原创 2021-02-06 21:45:48 · 123 阅读 · 0 评论 -
《算法》1.3背包、队列和栈
1、基本概念背包:Bag背包是一种不支持从中删除元素的集合类型。目的是收集元素并迭代遍历所有收集到的元素。迭代的顺序不确定且与用例无关。队列:Queue先进先出入列顺序与出列顺序相同栈:Stack后进先出元素的处理顺序与他们被压入的顺序正好相反2、实现2.1基于数组实现栈:import java.util.Iterator;import java.util.Objects;/** * 基于数组实现的栈,能够动态调整数组大小。 * @Author: AZhu1原创 2021-02-06 01:16:54 · 76 阅读 · 0 评论 -
《算法》3.4散列表
1散列表用算术操作将键转化为数组的索引来访问数组中的键值对。散列表的查找算法分两步:用散列函数将键转化为数组的索引处理碰撞冲突(常用的两种方法)拉链法线性探测法使用散列表:可以实现在一般应用中拥有(均摊后)常数级别的查找和插入操作的符号表。但是散列表不支持有序性操作。1.1散列函数将键转化为数组的索引。严格来说:对于每种类型的键我们都需要一个与之对应的散列函数。正整数:除留余数法。(k对数组大小M取余)浮点数:将键转化为二进制再用除留余数法。字符串:将字符串当做原创 2021-03-08 00:31:03 · 90 阅读 · 0 评论 -
《算法》3.3平衡查找树
平衡查找树1、2-3查找树定义:一棵2-3查找树或为一棵空树。或又以下结点组成:2-结点:含有一个键和两条连接3-结点:含有两个键和三条连接1.1查找和标准的二叉查找树类似1.2插入有以下几种情况:1、向2-结点中插入新键把这个2-结点替换为一个3-结点2、向一棵只含有一个3-结点的树中插入新键先将新键存入该结点,成为一个4-结点**(新建4-结点)**转换为3个2-结点**(分解)**3、向一个父结点为2-结点的3-结点插入新键新建4-结点分解:将中键插入到原创 2021-03-06 00:10:55 · 125 阅读 · 0 评论 -
《算法》3.2二叉查找树
1二叉查找树二叉查找树定义:是一棵二叉树每个结点含有一个键和对应的值每个结点的键都大于其左子树的的任意结点,小于右子树的任意结点。1.1基本实现/** * 基于二叉查找树的符号表 * @Author: AZhu * @Date: 2021/3/3 10:29 */public class BST<Key extends Comparable<Key>, Value> { private Node root;//二叉查找树的根结点 priv原创 2021-03-04 10:57:22 · 105 阅读 · 1 评论 -
《算法》3.1符号表
1符号表符号表就是一种存储键值对的数据结构,支持两种操作:插入(put):即将一组新的键值对存入表中;查找(get):即根据给定的键得到相应的值。1.1特点每个键只对应着一个值(表中不允许存在重复的键)当插入新的键值对与已有的键冲突时,新的值会代替旧的值键不能为空值不能为空删除的两种方法:延时删除:将值置为空,之后某个时间在删除即时删除:直接删除键值对1.2有序符号表许多符号表的实现都利用了Comparable接口带来的键的有序性来更好地实现put()和get()方原创 2021-02-28 22:23:57 · 212 阅读 · 0 评论 -
《算法》2.5应用
1将各种数据排序在一个有序的数组中查找一个元素比在一个无序的数组中查找要简单得多。也就是说:排序是为了查找而服务的。1.1交易事务排序算法的一种典型应用就是商业数据的处理。一家成功的商业公司需要能够处理数百万的交易数据。1.2指针排序我们全书基于java的算法都被称为“指针排序”。因为我们只处理了元素的引用,而并没有移动数据本身。除了原始数据类型之外,我们的操作总是数据的引用,而不是数据的本身。1.3不可变的键如果在排序之后,用例还能够修改元素的键值,那么数据就很可能不再是有原创 2021-02-24 20:27:24 · 103 阅读 · 0 评论 -
《算法》2.4优先队列
1优先队列很多情况下,我们会收集一些元素,处理当前键值最大的元素,然后在收集更多的元素,再处理当前键值最大的元素,如此这般。1.1定义在上述情况下,一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。这种数据类型就是优先队列。1.2实现方式实现方式有两种类型:初级方式:使用无序或有序的数组和链表,其一或两种操作能在线性时间内完成。高级方式:使用堆,两种操作都能在对数时间内完成。为了保证灵活性,我们在实现中使用了泛型,将实现了Comparable接口的数据的类型作为参原创 2021-02-23 17:58:42 · 104 阅读 · 0 评论 -
《算法》2.3快速排序
1快速排序1.1快速和归并的比较归并排序快速排序排序方式将数组分成两个子数组分别排序,并将两个有序的子数组归并以将整个数组排序当两个子数组都有序时整个数组就自然有序了递归调用的时机发生在处理整个数组之前发生在处理整个数组之后数组切分方式一个数组被分为两半切分的位置取决于数组的内容1.2快排基本算法快速排序递归地将子数组a[lo..hi]排序,先用partition()方法将a[j]放到一个合适的位置,然后再用递归调用将其他位置的元素排序。该方法的关原创 2021-02-22 21:04:52 · 89 阅读 · 0 评论 -
《算法》2.2归并排序
1原地归并的抽象方法实现:/*** 将a[lo...mid]和a[mid+1...hi]归并* @param a 数组* @param lo lo* @param mid mid* @param hi hi*/public static void merge(Comparable[] a, int lo, int mid, int hi) { int i = lo, j = mid + 1; //将a[lo...hi]复制到aux[lo...hi] for (int原创 2021-02-15 15:50:55 · 82 阅读 · 0 评论 -
《算法》2.1初级排序算法
1前言排序算法的目的就是将所有的元素的主键按照某种方式排列(通常是从小到大或者字母顺序)。排序后索引较大的主键大于等于索引较小的主键。元素和主键的具体性质在不同的应用中千差万别,在java中,元素通常都是对象,对主键的抽象描述则需要通过一种内置机制(Comparable接口)来完成。因此,需要进行排序的元素(对象)必须实现了Comparable接口。2排序算法的基本模板/** * 所有排序算法的抽象父类,规定了具体排序算法的格式。 * @Author: AZhu * @Date: 2021原创 2021-02-11 12:03:06 · 130 阅读 · 1 评论 -
《算法》1.5union-find算法
1动态连通性1.1提出问题当程序从输入中读取了整数对p和q时,如果从已知的所有整数对中都不能说明p和q是相连的,那么就将p和q相连接,并放到输出。如果从已知的所有整数对中都可以说明p和q是相连的,那么就忽略p和q,继续处理下一对整数对。1.2问题的应用大型网络中链路的连接和通信问题电子电路中的触点和电路问题社交网络中的人的关系问题1.3专用术语将每一个数或者对象称为触点将整数对称为连接将等价类称为连通分量,简称分量2实现2.1抽象层的实现/** * union-f原创 2021-02-09 19:50:39 · 163 阅读 · 0 评论