自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

何哥的博客

Bug工程师,面向浏览器编程

  • 博客(14)
  • 收藏
  • 关注

原创 数据结构基础27: DFS和BFS算法总结

前言:图的遍历算法DFS和BFS是许多图算法的基础,所以有必要单独拎出来总结一下。DFS和BFS主要是运用于对于图和树的搜索,很多问题模型都是可以建模变成一个图或者树的,所以差不多不少问题都会涉及到这两个。比如求二叉树深度,可以是递归的方法,属于DFS(深度优先搜索);另一种方法是按照层次遍历,属于BFS(广度优先搜索),想看代码的可以看《剑指Offer(三十八):二叉树的深度》。再比如寻找一条路...

2019-02-16 05:06:04 5718 2

原创 数据结构基础26:图

前言:线性表和树两类数据结构,线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系。而图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关,图是一种“多对多”的数据结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如:生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子...

2019-02-15 05:36:23 878

原创 Mysql创建索引

一、MySQL 索引1、MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。比如以WordPres...

2019-02-14 09:38:47 929

原创 Mysql最常用的Innodb和MyISAM存储引擎

前言:在MySQL数据库中,常用的存储引擎主要就是2个:Innodb和MyISAM。一、为什么要合理选择数据库存储引擎?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MyS...

2019-02-14 08:38:49 758

原创 深入理解数据库索引

前言:数据库和数据库索引这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是后端开发人员在行业内生存的必备技能。数据库索引是用来提高数据库表的数据查询速度的。一、索引出现背景在数据库系统的使用过程当中,数据的查询是使用最频繁的一种数据操作。最基本的查询算法当然是顺序查找(linear search),遍历表然后逐行匹配行值是否等于待查找的关键字,其时间复杂度为...

2019-02-14 07:19:17 3038

原创 数据结构基础25:B树和B+树的区别

前言:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树。数据库索引的数据结构基础就是B+树,B+树是平衡n叉排序树,属于B树的变种,通常用于数据库和操作系统的文件系统中,比B树更适合作索引的存储结构。一、出现背景...

2019-02-13 05:43:05 900

原创 数据结构基础24:索引查找和二分查找

一、查找技术的分类图片转自网络二、顺序查找(无序表)顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。时间复杂度是O(n)三、二分查找(有序表)前提就是有序表,二分查找的基本思想是:在有序表中,取中间记录作...

2019-02-13 05:42:58 1837

原创 数据结构基础23:TopN问题

前言:如果实时展现热门文章,比如近8小时点击量最大的文章前100名。如果是你来开发这个功能,你怎么做?1、TopN排行榜问题描述:在系统中,我们经常会遇到这样的需求:将大量(比如几十万、甚至上百万)的对象进行排序,然后只需要取出最Top的前N名作为排行榜的数据,这即是一个TopN算法。常见的解决方案有三种:(1)直接使用List的Sort方法进行处理。(2)使用排序二叉树进行排序,...

2019-02-13 05:42:45 1369

原创 数据结构基础22:堆应用之堆排序

前言:堆可以用来实现n个元素的排序,所需时间为O(nlogn)。先用n个待排序的元素来初始化一个大根堆,然后从堆中逐个提取(即删除)最大元素。结果,这些元素按照非递增的顺序排列。初始化的时间为O(n),每次删除的时间为O(logn),因此总时间为O(nlogn)。这个排序时间比普通排序算法的如冒泡排序、插入排序等的时间O(n^2)要快。一、堆排序的定义堆排序(Heapsort)是指利用堆...

2019-02-12 02:38:22 715

原创 数据结构基础21:堆

前言:堆是实现优先级队列效率很高的数据结构,堆其实是一颗特殊的完全二叉树,用下标从1开始的数组表示最有效率。在JVM中,堆是用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配。堆是所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致new对象的开销比较大。栈:内存空间小一些,栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈很快就...

2019-02-12 01:53:59 1545

转载 数据结构基础20:字典树的应用场景

(1) 字符串检索事先将已知的一些字符串(字典)的有关信息保存到trie树里,查找另外一些未知字符串是否出现过或者出现频率。举例:1.给出N 个单词组成的熟词表,以及一篇全用小写英文书写的文章,请你按最早出现的顺序写出所有不在熟词表中的生词。2.给出一个词典,其中的单词为不良单词。单词均为小写字母。再给出一段文本,文本的每一行也由小写字母构成。判断文本中是否含有任何不良单词。例如,若ro...

2019-02-03 01:25:48 2077

原创 数据结构基础19:字典树

前言:字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。Trie 的强大之处就在于它的时间复杂度。它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 Trie 中保存了多少个元素无关。Hash 表号称是 O(1) 的,但在计算 hash...

2019-02-03 01:21:56 473

原创 数据结构基础18:二叉搜索树的搜索、插入、删除和升序输出

前言: HashMap 的底层实现中用到了红黑树,红黑树其实是二叉搜索平衡树,我们先了解一下二叉搜索树。哈希表的字典操作(查找、插入和删除)的平均时间复杂度为Θ(1),而这些操作在坏的情况下能的时间与字典的元素个数呈线性关系。当HashMap的链表长度超过8时,就需要用到平衡二叉搜索树红黑树,红黑树的字典操作时间复杂度为o(logN),能保证哈希冲突过多时的性能;而且二叉搜索树中的节点是有顺序...

2019-02-02 23:26:29 1602

原创 数据结构基础17:二叉树应用之算术表达式求值

前言:二叉树的一种应用是无歧义地表示代数、关系或逻辑表达式。在上个世纪20年代初期,波兰的逻辑学家发明了一种命题逻辑的特殊表示方法,允许从公式中删除所有括号,称之为波兰表示法。但是,与原来带括号的公式相比,使用波兰表示法降低了公式的可读性,没有得到广泛的使用。在计算机出现后,这一表示法就很有用了,特别是用于编写编译器和解释器。用户输入的待求表达式,也就是中缀表达式,对于人来说,这个很好理解,但是对...

2019-02-01 02:33:28 10535

空空如也

空空如也

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

TA关注的人

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