数据结构与算法
猫小呆
编程是一种美德,是促使一个人不断向上发展的一种原动力。
展开
-
递归思想和准则
基本法则:1.基准情形(base case):必须存在基准情形,他们不用递归就能求解。2.不断推进(making progress):对于需要递归求解的情形,递归调用必须朝着基准情形推进。3.设计法则(disign rule):假设所有的递归调用都能运行。4.合成效益法则(compound interest rule):在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工...原创 2019-07-16 18:26:18 · 247 阅读 · 0 评论 -
树的解析(二):二叉查找树
二叉查找树二叉查找树是两种库集合:TreeSet和TreeMap的实现基础。二叉查找树的性质是:(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值;(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值;(3)左、右子树也分别为二叉查找(排序)树;(4)没有键值相等的节点。该树中所有元素可以用某种一致的方式排序。二叉查找树的部分方法实现...原创 2019-07-04 15:30:35 · 159 阅读 · 0 评论 -
集合类解析(二):散列数据集合-HashMap(Set)源码拆解与Set,Map解析
原码拆解与流程图为原创,转载请注明。本文为集合类解析(二),从根本上了解集合类,请先移步:Collection 集合类、Iterator 迭代器、List解析移步:集合类解析(一):表结构与集合类Collection,Iterator,List基础讲解集合类之Set与Map阅读Set与Map的实现类源码即可发现,为何set与Map要一起描述,主要的Set实现类如HashSet...原创 2019-07-08 09:51:00 · 262 阅读 · 0 评论 -
一个泛型集合类示例与相关ArrayList实现
要求:设计一个泛型类Collection,它存储object对象的集合(在数组中),以及该集合当前的大小。提供public方法isEmpty,makeEmpty,insert,remove,isPresent.方法isPresent(x)当且仅当在集合中存在(由equals定义) 等于x的一个object时返回true实现如下:package Algorithm.Generic...原创 2019-06-27 15:54:07 · 468 阅读 · 0 评论 -
优先队列(堆)与TopK问题
优先队列是允许至少下列两种操作的数据结构:insert和deleteMin。使用场景例如打印机排队打印,和操作系统调用执行时,一有空闲就执行的任务、短且快的任务、长任务,优先级高的任务、优先级低的任务之间的调度。同时也是贪心算法的实现基础。插入的操作等价于入队enqueue,而删除最小值是dequeue(出队)在优先队列中的等价操作。优先队里的几种实现:1.链表方式O(1)插...原创 2019-07-10 16:11:35 · 533 阅读 · 0 评论 -
集合类解析(一):表结构与集合类Collection,Iterator,List基础讲解。
之前一直在寻找一本集合类系统讲解的书籍,问了身边的人好像没有具体推荐。意外的在《数据结构与算法-Java语言描述》这本书里把集合类了解的明明白白。。。推荐阅读。下面的内容是阅读过程中根据自己的理解,把重点内容实现了一下。希望对阅读的人有帮助。抽象数据类型(abstract data type)抽象数据类型,是带有一组操作的一些对象的集合。下面讲解一下抽象数据类型的第一部分:表...原创 2019-07-02 03:38:47 · 239 阅读 · 0 评论 -
树的解析(一):基本概念和应用遍历方式
树的概念对于大量输入数据,链表的访问时间太慢。树是非常有用的抽象概念。递归是定义树的一种自然方式。一棵树是节点的集合。这个集合可以是空集。若不是空集,则树由根(root)节点及0-多个非空子树组成,这些子树每一棵的根都被来自根root的有向边(edge)所连接。每一棵子树的根叫做root的child,而root是每一棵子树的根的parent。一棵树是N个节点和N-1条边的集合,...原创 2019-07-02 03:36:39 · 663 阅读 · 0 评论 -
树&集合类解析(三):基于树结构的集合-TreeMap(TreeSet)与其实现基础-红黑树。
红黑树红黑树是AVL树(平衡二叉查找树)的一个变种。对红黑树的操作在最坏情形下花费O(logN)时间。也是TreeMap的实现基础。我们先来了解红黑树的性质,才能理解树结构集合类的实现方法。有关二叉查找树请移步:二叉查找树结构解析。红黑树具是具有下列着色性质的二叉查找树:1.每一个节点是红色或是黑色。2.根是黑色的。3.如果一个节点是红色的,那么他的子节点必须是黑...原创 2019-07-10 17:31:59 · 662 阅读 · 0 评论 -
数据结构与算法之-几种常见的排序算法(插入,归并,快排)
排序是计算机科学的最基础的根基之一。基本的排序方法以O()排序。存在几种排序算法, 以O(NlogN)为时间界。任何通用的算法均需要次比较。插入排序:对于少量元素的排序,它是一个有效的算法。插入排序的工作方式像许多人排序一手扑克牌。开始时,我们左手为空并且桌子的牌面向下。然后我们每次从桌子上拿走一张牌并将它插入左手的正确位置。我们从右向左将它与已在手中的每张牌进行比较,拿...原创 2019-07-15 17:14:42 · 429 阅读 · 0 评论