随笔分类 -  数据结构和算法

摘要:深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 阅读全文
posted @ 2018-08-30 00:55 郝云峰 阅读(2628) 评论(0) 推荐(0)
摘要:概述因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结,强行学习。首先罗列一下常见的十大排序算法:直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序我们讨论的这八大排序算法的... 阅读全文
posted @ 2018-08-28 01:09 郝云峰 阅读(324) 评论(0) 推荐(0)
摘要:最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。有两种实现思路:1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。2... 阅读全文
posted @ 2018-08-28 00:56 郝云峰 阅读(223) 评论(0) 推荐(0)
摘要:从这篇文章开始介绍图相关的算法,这也是Algorithms在线课程第二部分的第一次课程笔记。图的应用很广泛,也有很多非常有用的算法,当然也有很多待解决的问题,根据性质,图可以分为无向图和有向图。本文先介绍无向图,后文再介绍有向图。之所以要研究图,是因为图在生活中应用比... 阅读全文
posted @ 2018-08-26 23:39 郝云峰 阅读(361) 评论(0) 推荐(0)
摘要:在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度:可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度。那么有没有查找效率更高的数据结构... 阅读全文
posted @ 2018-08-26 23:38 郝云峰 阅读(258) 评论(0) 推荐(0)
摘要:前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时... 阅读全文
posted @ 2018-08-26 23:38 郝云峰 阅读(164) 评论(0) 推荐(0)
摘要:前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(... 阅读全文
posted @ 2018-08-26 23:37 郝云峰 阅读(162) 评论(0) 推荐(0)
摘要:前面介绍了二叉查找树(Binary Search Tree),他对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。本文及后面文章介绍的平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入... 阅读全文
posted @ 2018-08-26 23:32 郝云峰 阅读(160) 评论(0) 推荐(0)
摘要:前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点。二叉查找树具有很高的灵活性,对其优化可... 阅读全文
posted @ 2018-08-26 23:32 郝云峰 阅读(251) 评论(0) 推荐(0)
摘要:前面几篇文章介绍了基本的排序算法,排序通常是查找的前奏操作。从本文开始介绍基本的查找算法。在介绍查找算法,首先需要了解符号表这一抽象数据结构,本文首先介绍了什么是符号表,以及这一抽象数据结构的的API,然后介绍了两种简单的符号表的实现方式。一符号表在开始介绍查找算法之... 阅读全文
posted @ 2018-08-26 23:31 郝云峰 阅读(190) 评论(0) 推荐(0)
摘要:在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象。最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最... 阅读全文
posted @ 2018-08-25 10:57 郝云峰 阅读(289) 评论(0) 推荐(0)
摘要:上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort)。快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序。... 阅读全文
posted @ 2018-08-25 10:56 郝云峰 阅读(251) 评论(0) 推荐(0)
摘要:合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择... 阅读全文
posted @ 2018-08-25 10:55 郝云峰 阅读(250) 评论(0) 推荐(0)
摘要:本篇开始学习排序算法。排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算... 阅读全文
posted @ 2018-08-25 10:54 郝云峰 阅读(174) 评论(0) 推荐(0)
摘要:最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因。另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还... 阅读全文
posted @ 2018-08-25 10:53 郝云峰 阅读(305) 评论(0) 推荐(0)
摘要:前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(... 阅读全文
posted @ 2018-08-25 10:44 郝云峰 阅读(186) 评论(0) 推荐(0)