Algorithms, Part I 8-ElementarySymbolTables
8-ElementarySymbolTables符号表以 Key-value pair 的形式存储数据插入 Key-value给定 Key 搜索对应的 valueAPIget() 如果键不存在则返回 nullput() 方法会用新值覆盖旧值delete() 只需要将值设为 null 就行Key 特性
8-ElementarySymbolTables符号表以 Key-value pair 的形式存储数据插入 Key-value给定 Key 搜索对应的 valueAPIget() 如果键不存在则返回 nullput() 方法会用新值覆盖旧值delete() 只需要将值设为 null 就行Key 特性
7-PriorityQueues优先队列 PQ API 和基本实现和队列 Quene 类似,不同的地方在于我们希望可以移除队列中的最大(最小)的元素。注意泛型元素必须满足 Comparable基本实现无序数组,删除时遍历寻找最大有序数组,插入时完成排序目标,插入、删除的操作复杂度都是对数级别的二叉堆
6-Quicksort快速排序快排是20世纪十大算法之一。实际应用中快排的综合速度最快。基本思想对数组进行 Suffle对于某个给定的元素,将所有比其小的放在它左边,比其大的放在它右边对左右两部分分别进行递归排序代码实现i从左往右找到第一个大于基准元素的j从右往左找到第一个小于基准元素的交换i和j直
5-Mergesort插入排序基本做法将数组分成两半递归地对这两部分排序将已排好序的两部分合并合并的代码实现 // stably merge a[lo .. mid] with a[mid+1 ..hi] using aux[lo .. hi] private static void m
4-Elementary sorts引言回调函数为了能够对不同的数据类型进行排序(Double, String, File等)比较时调用compareTo()方法交换次数反对称:若$a \leq b$且$b \leq a$ 则 $a = b$传递:若$a \leq b$且$b \leq c$ 则 $
3-Stacks And Queues可变长数组 Resizing arrays为了实现变长数组,同时尽可能降低增删元素的时间复杂度,我们需要对数组的大小做动态的调整。以Stack实现中的push 和 pop 方法为例:Push如果数组元素已满,那么我们创建一个长度为原来数组长两倍的数组,并把所有的
2-Analysis of Algorithms引言我们为什么要分析算法预测程序性能对比不同算法之间的差异在最坏情况下算法性能的底线了解算法运行的理论基础观察3-Sum 问题给定 N 个不同的数,哪三个数和为零?找出所有这样的三个数。分析暴力算法可以使用 Java 类 Stopwatch 以分析运
1-Union-FindSteps to developing a usable algorithm对问题建立数学模型寻找解决问题的算法算法可能效率不够高找出造成这些问题的源头提出新的算法循环直到满意为止Dynamic connectivityUnion command: 合并两个对象Find/co