自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 散列表实现符号表

散列表实现符号表使用散列的查找方法分为两步:使用散列函数将被查找的键转化为数组的一个索引处理碰撞冲突散列表是算法在时间和空间上作出权衡的经典例子假设没有内存限制,可以直接将键作为数组的索引,那么所有查找操作只需要访问内存一次如果没有时间限制,我们可以使用无序数组并进行顺序查找,这样就只需要很少的内存散列表则使用了适度的空间和时间并在这两个极端之间找到了一种平衡,而且实现调整时间和空间的取舍十分简单:只需要调整散列算法的参数即可个人理解:假设有一个能够保存M个键值对的数组,调整M的大小就可

2020-11-20 15:55:07 385

原创 红黑二叉查找树的个人理解以及Java实现

红黑二叉查找树红黑二叉查找树是一种能够表达并实现 2-3 树 的简单数据结构。它的实现基于标准的二叉查找树。其需要扩展的功能(性质)是替换 3- 节点。替换 3- 节点将二叉查找树的链接分为两种类型:红链接和黑链接红链接将两个 2- 节点链接起来构成一个 3- 节点,黑链接则是 2-3 树中的普通链接更为确切的说,3- 节点 表示为一条左斜的红色链接(两个 2- 节点其中之一是另一个节点的左子节点)相连的两个 2- 节点如此实现后,假设把红链接拉平,那么它和 2-3 树 其实是等价的与 2-3

2020-11-19 17:21:53 118

原创 2-3树的个人理解

2-3 查找树由于二叉查找树在理想状态下的高效的性能以及无法保证性能下限的缺点,如何去优化它就十分有意义。优化的思路很自然的想到:只要在插入过程中尽量使树保持平衡,就能保证它的性能下限。如何实现这一点,幸运的我们已经由前人想到了非常聪明的解决办法:2-3 查找树。什么是 2-3 查找树一颗2-3 查找树或为空树,或为以下节点组成:2- 节点,含有一个键(以及对应的值)和两条链接,左连接指向的树中节点键都小于该节点,右链接指向的树中节点的键都大于该节点3- 节点,含有两个键(以及对应的值)和三条链

2020-11-19 17:20:19 135

原创 二分查找实现符号表

二分查找实现符号表算法原理使用Keys[]和Values[]两个数组分别存储键和值实现的核心是rank() 方法,它返回表中小于给定键的数量对于get()方法,只要给定键存在于表中,rank()方法就能精确地告诉我们在哪里能够找到它(如果找不到,那么它肯定就不在表中)对于put()方法,只要给定键存在于表中,rank()方法就能精确的告诉我们到哪里去更新它的值,当键不存在表中时也能精确的知道需要将键值对存储于何处。性能分析在NNN 个键的有序数组中进行二分查找最多需要log2N+

2020-11-10 23:55:00 274

原创 二叉查找树实现有序符号表

二叉查找树实现有序符号表二叉查找树的定义一颗二叉查找树(BST)是一颗二叉树,其中每个节点都含有一个Comparable的键(以及相关的值)且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键二叉查找树实现有序符号表的优点结合了链表插入的灵活性和有序数组查找的高效性算法原理查找 get(Node tree, Key key)如果树是空的,则查找未命中如果查找的键和根结点的键相等,查找命中如果被查找的键比根节点的键小,递归查找左子树如果被查找的键比根节点的键大,

2020-11-10 23:30:31 187

原创 链表实现无序符号表(Java)

链表实现无序符号表使用一个私有内部Node类来在链表中保存键值对get()的实现会顺序的搜索链表查找给定的 键put()的实现也会顺序的搜索给定的键,如果找到则更新,否则会将给定的键值对插入链表的开头delete()的实现同样是顺序的搜索给定的键,如果找到则将链表的的next更新为此时它的父级的nextkeys() 的实现使用队列 FIFO 的特性保证当前符号表中Key的位置;队列实现/** * 链表实现的(顺序查找)符号表 */public class LinkedSequentia

2020-11-08 23:16:23 146

原创 符号表的理解及基本行为测试用例

我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储其中,然后按照指定的键来搜索并获取这些信息(值)。有时被称为字典有时被称为索引符号表中可能保存很多的键值对,如何让实现一张高效的符号表将时一项很有挑战性的任务成本模型比较的次数(等价性比较或者键的相互比较)在内循环不进行

2020-11-08 22:16:25 316

原创 快速排序

快速排序流行原因实现简单适用于各种不同的输入数据在一般应用中比其他的排序算法要快得多显著特点省空间: 原地排序(只需要一个很小的辅助栈)省时间: 长度为NNN的数组排序所需时间和Nlog2NNlog_2NNlog2​N成正比将长度为NNN的无重复数组排序,快速排序平均需要 2NlnN~2NlnN 2NlnN次比较(以及1/61/61/6的交换)快速排序比归并排序一般更快(尽管它的比较次数多39%),因为它移动数据的次数更少理想状态每次都正好能将数组对半分。此

2020-11-04 06:41:50 84

原创 归并排序

归并排序要将一个数组排序,可以先(递归地)将他分成两半分别排序,然后将结果归并起来归并排序能够保证将任意长度为 NNN 的数组排序所需 时间 和 Nlog2NNlog_2NNlog2​N 成正比主要缺点: 归并排序所需的 额外空间 和 NNN 成正比自顶向下对于长度为 NNN 的任意数组,自顶向下的归并排序需要 1/2Nlog2N1/2Nlog_2N1/2Nlog2​N 至 Nlog2NNlog_2NNlog2​N 次比较对于长度为 NNN 的任意数组,自顶向下的归并排序最多需要访问数组

2020-11-04 06:40:49 106 1

原创 希尔排序

希尔排序我的理解,希尔排序是增加了步长的插入排序。有经验的程序员有时会选择希尔排序,因为对于中等大小的数组它的运行时间是可以接受的。它的代码量很小,且不需要使用额外的内存空间如果你需要解决一个排序问题而又没有系统排序函数可用(例如直接接触硬件或是运行于嵌入式系统中的代码),可以先用希尔排序,然后再考虑是否值得将它替换为更加复杂的排序算法/** * @author 陈航 * @date 2020/10/30 */public class Shell { public static vo

2020-11-04 06:39:35 64

原创 插入排序

插入排序当倒置的数量很少时,插入排序很可能比其他任何基础排序算法都要快插入排序对于部分有序的数组十分高效,也很适合小规模数组对于随机排列的长度为 NNN 且主键不重复的数组,平均情况下插入排序需要~N2/4~ N^2/4~N2/4 次比较以及$~ N^2/4 次交换。最坏情况下需要次交换。最坏情况下需要次交换。最坏情况下需要~ N^2/2 次比较和次比较和次比较和~ N^2/2 $ 次交换,最好情况下需要 N−1N-1N−1 次比较和 $0 $ 次交换插入排序需要的交换操作和数组中倒置的数量相同,

2020-11-04 06:38:28 125

原创 选择排序

选择排序public class Selection { public static void sort(Comparable[] a) { int length = a.length; // 每一次循环都将最小的元素选择出来放到数组的最前,所以是叫 选择排序 // 每一次循环都会有一次交换 // 每次循环都有 N-1-i 次比较 // 总计 N 此交换 // (N-1) + (N-2) + ...

2020-11-04 06:36:38 52

原创 数据结构 - 树

树结点的层次:从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推一棵树的深度(高度)是树中结点所在的最大的层次叶子结点:如果结点没有任何子结点,那么此结点称为叶子结点(叶结点)对于一个结点,拥有的子树数(结点有多少分支)称为结点的度二叉树本身是有序树各个节点的度最多为2性质二叉树中,第 iii 层最多有 2i−12^{i-1}2i−1 个结点如果二叉树的深度为 kkk ,那么此二叉树最多有 2k−12^k-12k−1 个结点。

2020-11-04 06:34:42 59

原创 优先队列的Java二叉堆实现

优先队列接口接口见 队列的Java实现基于***二叉堆*** 的实现import java.util.Iterator;import java.util.NoSuchElementException;/** * 基于二叉堆的优先队列实现 */public class BiMaxPq<Key extends Comparable<Key>> implements IQueue<Key> { // 当一颗二叉树的每个节点都大于等于它的子节点时,它

2020-11-04 06:31:21 119

原创 队列的Java数组与链表实现

队列FIFO接口public interface IQueue<Item> extends Iterable<Item> { /** * 入队;添加一个元素 * * @param item * 元素 */ void enqueue(Item item); /** * 出队;删除最近添加的元素并返回它 * * @return 元素 */

2020-11-04 06:01:12 123

原创 背包的Java数组与链表实现

背包背包是一种只存不取的数据结构接口public interface IBag<Item> extends Iterable<Item> { /** * 添加元素 * * @param item * 元素 */ void add(Item item); /** * 返回是否为空 * * @return boolean */ boo

2020-11-04 05:59:25 92

原创 栈的Java数组与链表实现

栈LIFO接口public interface IStack<Item> extends Iterable<Item> { /** * 添加一个元素 * * @param item * 元素 */ void push(Item item); /** * 删除最近添加的元素并返回它 * * @return 元素 */ Item po

2020-11-04 05:43:42 81

gvim _vimrc

本人用来顺手的gvim设置文件 windows下 完美运行 大家要的 下载吧吧

2014-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除