- 博客(13)
- 资源 (5)
- 收藏
- 关注
原创 十一、二叉查找(排序)树(符号表的实现)
二叉查找树基本实现部分讲解分析跟有序性有关的API解释性能分析二叉查找树能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号表实现(链表)。具体来说,就是使用每个结点含有两个链接的二叉查找树来高效地实现符号表。定义一些术语:数据结构由结点组成,结点包含的链接可以指向空或者其他结点。在二叉树中,每个结点只能有一个父节点(根结点例外),每个结点只有左右两个链接,分别指向左子节点和右子节点。
2016-03-18 23:37:10 1155
原创 十、查找算法(Map的实现以及对比)
查找符号表部分API有序符号表的实现应用基于无序链表中的顺序查找实现基于有序数组中的二分查找实现核心问题以及各种Map实现方法优缺点查找这里使用符号表这个词来描述一张抽象的表格,我们会将信息存储在其中(值),然后按照指定的键来搜索并获取这些信息。符号表有时也被称为字典或者索引(说白了就是Map)符号表部分API实现的注意事项: 每个键只对应着一个值; 当插入键值重复时,覆盖旧值;
2016-03-16 23:45:59 3734
原创 九、排序算法的应用(找中位数、重复统计、Kendall tau距离等)
应用将各种数据排序该使用哪种排序算法问题的归约找出数组中重复元素排名优先队列中位数与顺序统计应用将各种数据排序注意:想在忽略大小写的情况下比较字符串进行排序,可以使用Java类型中定义的CASE_INSENSITIVE比较器,例如:Insertion.sort(a, String.CASE_INSENSITIVE_ORDER)排序的稳定性:如果一个排序算法能够保留数组中重复元素的相
2016-03-16 04:05:48 2050
原创 Transaction类
源代码:public class Transaction implements Comparable<Transaction> { private final String who; // customer private final Date when; // date private final double amount; // amou
2016-03-09 23:25:29 1784
原创 八、优先队列、堆排序
优先队列API初级实现堆得定义堆的算法索引优先队列索引优先队列的使用案例堆排序优先队列一种常见的数据结构,需要支持两种操作:删除最大(最小)元素和插入元素。这种数据类型叫做优先队列。APIMaxPQ()//创建一个优先队列MaxPQ(int max)//创建一个最大容量为max的优先队列MaxPQ(key[] a)//用a[]中的元素创建一个优先队列void Insert()//
2016-03-09 23:23:47 1605
原创 七、快速排序
快速排序快速排序引人注目的特点包括它是原地排序(只需要一个很小的辅助栈),且将长度为N的数组排序所需的时间和NlogN成正比。之前的算法都无法结合这两个优点。 另外快速排序的内循环比大多数排序算法都要短小,这意味着它无论是在理论上还是在实际中都要更快。缺点是有可能会导致平方级别基本算法快速排序是一种分治的排序算法。它将一个数组分成两个数组,将两部分独立地排序。快速排序和归并排序是互补的;归并排序将
2016-03-09 12:53:41 608
原创 六、归并排序
归并排序要将一个数组排序,可以先(递归的)将它分成层两半分别排序,然后将结果归并起来。 它能保证任意长度为N的数组排序所需时间和NlogN成正比;它的缺点则是它所需的额外空间和N成正比。 原地归并的抽象方法实现归并的一种直截了当的办法是将两个不同的有序数组归并到第三个数组中,两个数组中的元素应该都实现了Comparable借口。实现的方法很简单,创建一个适当大小的数组然后将两个输入数组的元素从一
2016-03-09 00:11:10 756
原创 五、排序算法(选择排序、插入排序、希尔排序)
排序初级排序算法通用API: less():比较 exch():交换 show():输出 sort:排序 为了验证是不是成功,加上 assert isSorted(a) 成本模型: 在研究排序算法时,我们需要计算比较和交换的数量,对于不交换元素的算法,会计算访问数组的次数选择排序找到最小的元素,和第一个交换,再在剩下的元素中找到最小的元素,与第二个交换,一次进行下去。 代码(含有多个重载方
2016-03-06 15:03:18 619
原创 四、union-find算法
union-find算法动态连通性问题: 设计一个数据结构来保存程序已知的所有整数对的足够多的信息,并用它们来判断一个新对象是否相连。这个问题也称为动态连通性问题可能的应用:网络(计算机之间的连接)变量名的等价性数学集合这里使用网络方面的术语,将对象称为融点,将整数对称为连接,将等价类称为连通分量 或者简称分量。假设用0到N-1的整数表示N个融点代码定义的API : 最终代码:pub
2016-03-04 14:18:35 2154 1
原创 自带类库StdRandom
uniform public static int uniform(int n) { if (n <= 0) throw new IllegalArgumentException("Parameter N must be positive"); return random.nextInt(n); } public static int unifo
2016-03-01 21:17:23 3516
原创 三、算法分析(three-sum算法)
算法分析计时类设计public class Stopwatch { private final long start; public Stopwatch() { start = System.currentTimeMillis(); } public double elapsedTime() { long now = System.c
2016-03-01 20:42:19 7885
原创 二、LinkedQueue、LinkedStack
LinkedQueue相对于之前的Queue带有check()package queue;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.introcs.StdIn;import edu.princeton.cs.introcs.StdOut;public c
2016-03-01 19:37:31 625
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人