数据结构与算法
数据结构与算法
Damon_zqt
心累,因为常常徘徊在坚持和放弃之间,举棋不定。烦恼,因为记性太好,该记的,不该记的都会留在记忆里。痛苦,因为追求的太多。难过,因为计较的太多
展开
-
数据结构与算法(十四)一致性哈希
1、分布式缓存问题在做服务器负载均衡时可供选择的负载均衡的算法有很多,如:轮循算法(Round Robin)哈希算法(HASH)最少连接算法(Least Connection)响应速度算法(Response Time)加权法(Weighted )假如现在有这样的应用场景:有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。现在我...原创 2020-04-30 09:24:32 · 360 阅读 · 0 评论 -
数据结构与算法(十三)归并、基数排序及算法总结
归并排序1、基本思想分析归并排序之前,我们先来了解一下分治算法。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。分治算法的一般步骤:分解,将要解决的问题划分成若干规模较小的同类问题;求解,当子问题划分得足够小时,用较简单的方法解决;合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。...原创 2020-04-29 22:39:56 · 312 阅读 · 0 评论 -
数据结构与算法(十二)插入、希尔排序
插入排序1、基本思想在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数找到相应位置并插入,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。2、实例 public void insertionSort() { int len = array.length; int counter = 1;...原创 2020-04-29 17:52:19 · 293 阅读 · 0 评论 -
数据结构与算法(十一)选择、堆排序
选择排序1、基本思想冒泡排序中有一个缺点,比如,我们比较第一个数a1与第二个数a2的时候,只要a1比a2大就会交换位置,但是我们并不能确定a2是最小的元素,假如后面还有比它更小的,该元素还会与a2再次进行交换,而且这种交换有可能发生多次才能确定a2的最终位置。选择排序可以避免这种耗费时间的交换操作,从第一个元素开始,扫描整个待排数组,找到最小的元素放之后再与第一个元素交换位置,然后再从第二个...原创 2020-04-29 17:42:58 · 185 阅读 · 0 评论 -
数据结构与算法(十)排序算法概述、冒泡、快速排序
1、排序算法概述所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。如果算法是稳定的有什么好处呢?排序算法如果是稳定的,那么...原创 2020-04-29 12:58:00 · 178 阅读 · 0 评论 -
数据结构与算法(九)红黑树
1、引言在二叉树中已经探讨过,如果按照随机顺序插入树节点,绝大多数都会出现不平衡的情况。最坏的情况,插入的数据时有序的,二叉树将会变成链表,插入、删除的效率将会严重地降低。下图就是按照数据升序的顺序插入二叉树的情况:红黑树就是一种解决非平衡树的方法,它是增加了某些特点的二叉搜索树。为了能较快的时间来搜索一颗树,需要保证树总是平衡的(或者至少大部分是平衡的),就是说对树中的每个节点,它左边...原创 2020-04-29 09:58:28 · 252 阅读 · 0 评论 -
数据结构与算法(八)霍夫曼树
1、霍夫曼编码计算机里每个字符在没有压缩的文本文件中都由一个字节(如ASCII码)或两个字节(如Unicode码)表示。这些方案中,每个字符需要相同的位数。字母对应的ASCII码类似这样:字母 十进制 二进制A 65 01000000B 66 01000001C 67 01000001… … …X 88 01001100Y 89 01001100Z 90 01011010S出...原创 2020-04-28 14:13:19 · 436 阅读 · 0 评论 -
数据结构与算法(七)AVL树
1、概述AVL树由两位科学家在1962年发表的论文《An algorithm for the organization of information》当中提出,其命名来自于它的发明者G.M. Adelson-Velsky和E.M. Landis的名字缩写。AVL树是最先发明的自平衡二叉查找树,也被称为高度平衡树。相比于二叉查找树,它的特点是:任何节点的两个子树的最大高度差为1。上面的两张图...原创 2020-04-28 13:57:54 · 793 阅读 · 0 评论 -
数据结构与算法(六)2-3-4树与2-3树
1、2-3-4树在二叉树中,每个节点有一个数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree)。2-3-4树就是一种阶为4的多叉树,它像红黑树一样是平衡树,可以保证在O(lgn)的时间内完成查找、插入和删除操作,容易实现,但是效率比红黑树稍差。下图展示了一颗2-3-4树:1.png它有如下特点:每个节点可以保存一个、两个...原创 2020-04-28 11:54:53 · 288 阅读 · 0 评论 -
数据结构与算法(五)B树、B+树、B*树
1、应用背景二叉查找树、AVL树、红黑树等都属于二叉树的范围,查找的时间复杂度是O(log 2N),与树的深度相关,那么降低树的深度自然会提高查找效率。但是我们面对这样一个实际问题:大规模数据存储中,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。因此,为了减少...原创 2020-04-28 11:05:45 · 425 阅读 · 0 评论 -
数据结构与算法(四)二叉搜索树
概述有序数组可以利用二分查找法快速的查找特定的值,时间复杂度为O(log2N),但是插入数据时很慢,时间复杂度为O(N);链表的插入和删除速度都很快,时间复杂度为O(1),但是查找特定值很慢,时间复杂度为O(N)。那么,有没有一种数据结构既能像有序数组那样快速的查找数据,又能像链表那样快速的插入数据呢?树就能满足这种要求,不过依然是以算法的复杂度为代价。在程序中,节点一般用来表示实体,也...原创 2020-04-27 13:01:44 · 564 阅读 · 0 评论 -
数据结构与算法(三)栈和队列
栈概述数组、链表、树等数据结构适用于存储数据库应用中的数据记录,它们常常用于记录那些现实世界的对象和活动的数据,便于数据的访问:插入、删除和查找特定数据项。而栈和队列更多的是作为程序员的工具来使用。他们主要作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生命周期比那些数据库类型的结构要短很多。在程序操作执行期间它们才被创建,通常它们去执行某项特殊的任务,当任务完成后就被销毁。...原创 2020-04-27 10:19:14 · 296 阅读 · 0 评论 -
数据结构与算法(二)线性表
线性表线性表是最常用且最简单的一种数据结构,它是n个数据元素的有限序列。实现线性表的方式一般有两种,一种是使用数组存储线性表的元素,即用一组连续的存储单元依次存储线性表的数据元素。另一种是使用链表存储线性表的元素,即用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的)。数组数组是一种大小固定的数据结构,对线性表的所有操作都可以通过数组来实现。虽然数组一旦创建之...原创 2020-04-27 09:41:29 · 176 阅读 · 0 评论 -
数据结构与算法(一)基础概念篇
数据结构数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储、组织数据的方式。数据结构分别为逻辑结构、(存储)物理结构和数据的运算三个部分。1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种。线性结构和非线性结构根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结...原创 2020-04-26 20:43:09 · 437 阅读 · 0 评论 -
算法复杂度o(1), o(n), o(logn), o(nlogn)等简介
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度,它们代表的含义:这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。O(n),就代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。O(n2),就代表数...原创 2020-04-10 11:00:29 · 389 阅读 · 0 评论