数据结构与算法
文章平均质量分 70
sbq63683210
这个作者很懒,什么都没留下…
展开
-
常用树类数据结构总结-二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的性能分析
原文链接:http://www.iteye.com/topic/614070我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势:(1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的形态。而这些操作转载 2016-06-05 23:13:39 · 689 阅读 · 0 评论 -
最美房子编程题
题目描述有一个n*m的数组grid,数组值为0或1,为1之处代表房间,相邻的1是同一所屋子的房间(斜线相邻不算),求一共有多少屋子?如0 0 0 0 0 0 1 1 0 00 0 0 0 00 0 0 1 10 0 0 0 0则图中屋子总数则为2个。分析一开始想到的是利用并查集的想法来做,考虑到时间复杂度,原创 2016-08-18 15:42:25 · 1246 阅读 · 0 评论 -
一致性哈希算法(consistent hashing)
本文要解决的问题:从原理上理解一致性哈希算法。转自:http://blog.csdn.net/cywosp/article/details/23397179/一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法转载 2016-08-06 10:17:47 · 720 阅读 · 0 评论 -
各种排序算法的总结和比较
本文要解决的问题:总结一下各种排序算法的特点。1 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据原创 2016-08-03 22:34:43 · 1862 阅读 · 1 评论 -
归并排序
import java.util.Arrays;public class MergeSort { /** * 归并排序 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列 * 时间复杂度为O(nlogn) * 稳定排序方式 * @p原创 2016-08-03 22:23:07 · 321 阅读 · 0 评论 -
快速排序
主要写一下快速排序,基本思想就是: 随机取一个值作为中间值,此处我们取第一个,然后按照大于中间值得数放到其右边,小于中间值的数放到其左边,依次下去,知道排序完成。 时间复杂度为:O(nlogN) 空间复杂度:O(N)public class quickSort { /** * @param args */ public static void main(St原创 2016-08-03 22:19:25 · 347 阅读 · 0 评论 -
图的广度优先遍历
本文要解决的问题:总结一下图的广度优先遍历简述广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问。以迷宫为例,深度优先搜索更像是一个人在走迷宫,遇到没有走过就标记,遇到走过就退一步重新走;而广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方向走,,当相遇的原创 2016-06-19 22:07:36 · 7425 阅读 · 0 评论 -
图的深度优先遍历
本文要解决的问题:总结一下图的深度优先遍历算法简述图的遍历与前面文章中的二叉树遍历还是存在很大区别的。所谓图的遍历指的是从图中的某一个顶点出发访问图中的其余顶点,并且需要保证每个顶点只被访问一次。由于图比二叉树复杂得多,所以前面二叉树的遍历算法在图中是行不通的。因为对于任意一个顶点来讲,都可能与其余的顶点发生连接。如果不对访问的顶点做一些处理,出发重复访问的几率是很高的。因原创 2016-06-19 22:01:52 · 4389 阅读 · 2 评论 -
我的算法学习之路
转自:http://zh.lucida.me/blog/on-learning-algorithms/关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。这篇文章讲了什么?我这些年学习数据结构和算法的总结。一些不错的算法书籍和转载 2016-07-25 11:25:28 · 1212 阅读 · 0 评论 -
堆排序
堆的定义如下: n个元素的序列{k0,k1,…,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。 ” ki<=k2i,ki<=k2i+1;或ki>=k2i,ki>=k2i+1.(i=1,2,…,[n/2])” 若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树, 则完全二叉树中每一个节点的值的都大于或等于任意一个字节的值(如果有的话),称之为大原创 2016-08-26 23:43:05 · 1681 阅读 · 0 评论