数据结构
文章平均质量分 79
清风飞阳
这个作者很懒,什么都没留下…
展开
-
《数据结构和Java集合框架第三版》读书笔记(三)回溯算法
回溯就是通过一系列位置选择到达目的位置并且在不能到达目的位置时反向退回的策略回溯算法:Backtrack 使用Backtrack类的用户需要提供:1,应用程序类 实现Application接口。并且要包含内部迭代类,枚举从当前位置开始所有可能的下一步位置2,Position类 定义“位置”在该应用程序中的意思 应用程序类:import java.util.*;原创 2013-10-21 16:18:19 · 819 阅读 · 0 评论 -
(《剑指offer》笔记)打印从1到最大的N位十进制数
输入数字n,按顺序打印出从1到最大的n位十进制数。原创 2014-09-09 22:08:33 · 695 阅读 · 0 评论 -
用PriorityQueue实现哈夫曼编码
哈夫曼编码(Huffman Coding)哈夫曼编码是一种被广泛应用而且非常有效的数据压缩技术,一般用来压缩文本和程序文件。哈夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文本文件中的字符)用一个特定长度的位序列替代。因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列。哈夫曼编码是由一颗满二叉树来实现的,即哈夫曼树。构造哈夫曼树转载 2014-02-21 10:27:14 · 1339 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(七)二叉树
自由树:连通的无回路的无向图有根树:在自由树中选定一顶点做根。考虑根为r的有根树中的一个结点x祖先:从r到x的唯一路径上的结点y称为x的一个祖先,x称为y的一个子孙。如果x≠y,则成为真祖先、真子孙。双亲:从r到x的路径中最后一条边是(y,x),则y是x的双亲,x是y的子女兄弟:具有同样双亲的两个结点互为兄弟结点叶结点:没有子女的结点结点的度:有根树T中结点x的子女数目原创 2013-11-20 16:32:51 · 1133 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(二)——二分法检索
一,在一个数组里搜索某个元素,最容易被想到的是顺序搜索,从头开始搜,直到搜到为止。最坏情况运行时间和平均运行时间都和n成线性关系 二,二叉树搜索的递归算法:要求数组已经进行了排序,一般按照升序基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中原创 2013-10-21 11:02:18 · 1123 阅读 · 1 评论 -
《数据结构和Java集合框架第三版》读书笔记(十二)快速排序
快速排序符合分治法。分解:选择 枢轴,将数组划分成两个子数组,左子数组的每个元素都小于或等于 枢轴元素,右子数组的每个元素都大于或等于 枢轴元素,左子数组的每个元素都小于右子数组。解决:通过递归调用快速排序分别对两个子数组进行排序。合并:由于快速排序是就地排序,不需合并,快速排序进行完后整个数组就已经排序完毕。private static void sort1(int x[ ],原创 2014-02-11 17:11:54 · 756 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(十一)归并排序
排序能有多快用决策树分析。排序n个元素,每种排列有一个叶结点,决策树t总共n!个叶结点。n!≤2^height(t)所以树的高度height(t) ≥log2(n!)O(log(n!))=O(nlogn)所以对于基于比较的排序,最差时间不可能比O(nlogn)小。平均时间也是不可能比O(nlogn)小,不证明了。一,归并排序Merge Sort算法思想:分治法——将原问题划分成原创 2014-01-02 10:52:05 · 887 阅读 · 0 评论 -
HashMap源码解析
HashMap、Hashtable、ConcurrentHashMap原创 2016-09-13 02:26:32 · 1129 阅读 · 0 评论 -
(剑指offer笔记)根据前序遍历和中序遍历重建二叉树
问题:输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树,假设输入的前序遍历和终须遍历的结果原创 2014-05-26 22:30:32 · 775 阅读 · 0 评论 -
(《剑指Offer》笔记)调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得所有奇数位于原创 2014-09-09 22:28:20 · 554 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(八)二叉搜索树
一,二叉搜索树的递归定义t为空。或者t的左子树的每个元素都小于t的根元素;t的右子树的每个元素都大于t的根元素;t的左子树和右子树都是二叉搜索树二叉搜索树不允许树中的元素重复二,BinarySearchTree类的实现Java集合框架里没有二叉搜索树BinarySearchTree,因为Java集合框架里实现了红黑树——TreeSet二叉搜索树不原创 2013-11-28 17:58:27 · 1032 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(五)浅复制(shallow copy)和深复制
今天学习ArrayList它的复制构造函数和clone()函数均为浅复制(shallow copy),即复制对象的引用。相反的深复制,则是复制对象的本身。复制构造函数 ArrayList (Collection c)得到了一个新的ArrayList对象,它包含了对c中元素的复制。但是注意,集合c的元素本质是引用,而不是对象。被引用的对象本身并没有被复制。clone()函数也是如此原创 2013-11-08 15:19:08 · 1200 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(六)LinkedList双向链表
JDK6和JDK7的算法有一些区别。JDK6是:带哨兵的环形双向链表,JDK7是不带哨兵、但是有first(头节点)和last(尾节点)的双向非循环链表。哨兵的好处是使得代码更简洁,但并不能降低对链表的操作的渐进时间界;坏处是如果有很多较短链表,使用哨兵会造成存储空间的浪费(哨兵是需要new一个Entry的)。一,JDK6:带哨兵的环形双向链表哨兵是个哑元,它表示NIL,包含和其他元素一样原创 2013-11-13 21:00:26 · 1177 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(九)平衡二叉搜索树的旋转
平衡二叉搜索树的高度是n的对数。一,旋转旋转式保持树平衡的基本机制。左旋转:将一个元素x移动到它的左子结点位置,而该元素的右子结点y移动到该元素原有的位置,而y的左孩子移动到了x的右孩子位置。(因为x的右孩子y的左子树的任意元素都大于x小于y)旋转中位置的改变的实质是对引用的改变。x.right=y.left;//y的左孩子移动到了x的右孩子位置y.left=x;//将原创 2013-12-25 14:44:40 · 733 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(十)简单排序
对数组x进行排序一,插入排序从数组x左边开始,x[1]和x[0]比较,看插入到x[0]之前还是之后。x[2]和已经排好序的x[0]、x[1]比较,找到x[2]的插入位置。......x[i]和已经排好序的x[0]、x[1]、x[2]...x[i-1]比较,找到x[i]的插入位置。如果用off表示开始插入排序的索引值,用len表示将被排序的元素数量,上述过程可表示为外循环原创 2013-12-27 16:28:50 · 807 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(零)——数组、类、集合
Quick Quiz: Could we implement the Collection interface with an array?a. No, because an array is an object, not aclass.b. No, because an array is not a collection.c. No, because you could转载 2013-10-21 10:57:03 · 975 阅读 · 0 评论 -
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现http://www.ibm.com/developerworks/cn/java/j-lo-tree/TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类转载 2013-12-19 22:43:09 · 717 阅读 · 0 评论 -
堆排序
堆排序是一种选择排序一,二叉堆二叉堆是一棵完全二叉树,除底层外都填满,底层元素从左向右填入,二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。二叉堆简称为堆。堆可以用数组存储。i结点的父结点为(i-1)/2 ,左子结点为2i+1,右子结点为2i+2对于数组A[],长度为n,子数原创 2014-02-19 10:52:46 · 630 阅读 · 0 评论 -
哈希表
转载 2014-03-10 17:37:18 · 546 阅读 · 0 评论 -
《数据结构和Java集合框架第三版》读书笔记(一)递归
一,十进制转二进制计算十进制(12)转二进制递归函数的设计:双层外层getBinary()抓异常内层getBin递归计算 public static String getBin (int n){if (n return Integer.toString (n);return getBin (n / 2) + Integer.toString (原创 2013-10-21 20:06:25 · 1159 阅读 · 0 评论