算法和数据结构
文章平均质量分 51
Findway_
我的博客:lhgaaa.github.io
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
值得每天看一遍的经典代码片段
敲过的好程序容易忘怎么办?每天看就不会忘了。这里我列出了许多很重要但是又容易忘的代码,这些代码都值得每天看一遍。(1).算法排序算法(选择,插入,冒泡,快速,希尔,堆排序,归并...)经典面试题(八皇后,汉诺塔,背包问题...)(2).容器哈希表普通二叉树二叉搜索树AVL树红黑树图(广度遍历,深度遍历,最短路径,最小生成树...) (3).原创 2017-05-16 09:23:02 · 2841 阅读 · 0 评论 -
我理解的剑指offer----字符串的全排列和组合算法
注:在阅读原作者的博客的基础上,我增加了一些我在阅读过程中的理解,便于大家理解,也便于我自己复习。在我自己添加的内容前我会添加【注】标记。全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。转载 2017-08-07 10:41:39 · 611 阅读 · 0 评论 -
树
树可分为普通树和二叉树,二叉树又可以分为完全二叉树和满二叉树。一、树的常见术语。根结点、子树、孩子、双亲、兄弟 结点的度:结点拥有的子树数称为结点的度(Degree) 叶子结点(终端结点):度为0的结点 分支结点(非终端结点):度不为0的结点 祖先:结点的祖先是从根到该结点所经分支上的所有结点 子孙:以某结点为根的子树中的任一结点都称为该结点的子孙 堂兄弟:双亲在同一层的结点互为堂兄弟原创 2017-08-22 11:16:39 · 220 阅读 · 0 评论 -
动态规划
动态规划一、简介动态规划(dynamic programming)与分治方法很像,都是通过组合子问题的解来求解原问题。分治方法将问题划分为互不相交的子问题,递归的求解子问题,再讲它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题)。在这种情况下,分治算法会做许多不必要的工作,他会反复地求解那原创 2017-08-25 16:05:13 · 429 阅读 · 0 评论 -
二叉树前序、中序、后序遍历非递归写法的透彻解析
版权声明:本文为博主原创文章,转载,请注明出处。若是商业用途,请事先联系作者。 本文源地址:http://blog.youkuaiyun.com/zhangxiangdavaid/article/details/37115355前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的转载 2017-08-21 19:48:04 · 220 阅读 · 0 评论 -
2_3查找树
2_3查找树的定义在一棵含有N个结点的二叉查找树中,我们希望树高为lgNlg_N,这样就能保证所有查找都能在lgNlg_N次比较内结束,就和二分查找一样。2_3查找树可以解决这样的问题:定义:一棵2-3查找树或为一棵空树,或由以下结点组成: 2-结点,含有一个键和两条链接,左链接指向的2-3树种的键都小于该结点,右链接指向的2-3树中的键都大于该结点。 3-结点,含有两个键和三条链接,原创 2017-06-05 16:15:40 · 612 阅读 · 0 评论 -
红黑树
红黑树的定义红黑树和AVL树一样,也是一种平衡二叉树,红黑树是满足下列要求的二叉搜索树: 1.每个节点不是红色就是黑色 2.根节点为黑色 3.如果节点为红,其子节点必须为黑 4.任一节点至NULL(树尾端)的任何路径,所含之黑节点树相同NOTE: 根据4,新增节点必须为红;根据3,新增节点之父节点必须为黑。红黑树的分析一、红黑二叉查找树 红黑树的出现功归于2_3查找树,红原创 2017-06-04 16:51:03 · 369 阅读 · 0 评论 -
冒泡、插入、选择排序及其改进
这三种排序方式可以说是最简单,最常用的三种排序方式了。值得说的是,在每种排序之后我都附加了其改进版本。冒泡排序普通冒泡排序void bubble_sort( int *array, int size ){ int i, j, temp; if ( size <= 1 ) return ; //i控制遍历数组的次数 //如果要排序size个数字,只需要原创 2017-08-04 11:21:24 · 289 阅读 · 0 评论 -
归并排序
归并排序就是将要排序的数组分成两部分,每一部分都排好序,再将这两部分归并为一个数组,每一部分的排序又采用归并排序。归并排序按照空间的使用上来分主要分为两种:普通归并和原地归并。按照归并的方向可以分为自顶向下归并和自底向上归并。1.普通归并:需要创建一个新的数组,将两个已经排好序的数组归并到这个新数组中。2.原地归并:归并排序最主要的一个函数就是merge,函数接口如下:void原创 2017-05-16 21:30:15 · 533 阅读 · 0 评论 -
计数排序
计数排序是一种稳定的线性时间排序算法,计数排序不是比较排序,排序的速度快于任何比较排序算法,计数排序可以配合基数排序,能够更有效排序数据范围很大的数组。计数排序步骤: 1.找出待排序的数组中最大和最小的元素 2.统计数组中每个值为i的元素出现的次数,存入数组C的第i项 3.对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加) 反向填充目标数组:将每个元素i原创 2017-06-04 19:53:40 · 297 阅读 · 0 评论 -
基数排序
基数排序是将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,一次进行一次排序。这样从最低位排序一直到最高位排序完成之后,数列就变成一个有序序列。NOTE: 基数排序只能排序非负整数效率基数排序的时间复杂度为O(k∗n)O(k*n),其中n是排序元素个数,k是数字位数。需要注意的是这个时间复杂度不一定优于O(n∗logn)O(n*log_n).实现基数排序的过原创 2017-06-04 18:19:26 · 323 阅读 · 0 评论 -
AVL树
AVL树要解决的问题为了尽量降低二叉搜索树的高度,减少树的平均搜索长度。AVL树定义 或者是空树。 或者是具有下列性质的二叉搜索树:它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。NOTE: AVL树种左子树和右子树高度的差值称为平衡因子,平衡因子的值只能为-1、0和1,如果平衡因子的绝对值大于1,这棵二叉搜索树就失去了平衡,不再是AVL树原创 2017-06-04 14:42:54 · 360 阅读 · 0 评论 -
二叉搜索树
二叉搜索树定义 1.每个结点都有一个作为搜索依据的关键码,所有结点的关键码都不相同。 2.左子树上所有结点的关键码都小于根节点的关键码。 3.右子树上所有结点的关键码都大于根节点的关键码。 4.左子树和右子树也是二叉搜索树。二叉搜索树实现使用c++实现二叉搜索树,这些是必要的声明。#include #include using namespace std原创 2017-06-03 10:14:02 · 434 阅读 · 0 评论 -
八大排序算法的时间复杂度
排序算法的稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。原创 2017-06-01 17:26:23 · 887 阅读 · 0 评论 -
冒泡、插入、选择排序及其改进
这三种排序方式可以说是最简单,最常用的三种排序方式了。值得说的是,在每种排序之后我都附加了其改进版本。冒泡排序普通冒泡排序void bubble_sort( int *array, int size ){ int i, j, temp; if ( size 1 ) return ; //i控制遍历数组的次数 //如果要排序size个原创 2017-05-24 10:19:55 · 338 阅读 · 0 评论 -
优先队列和堆排序
本篇主要包括以下内容 1.优先队列的介绍 2.优先队列的几个初级实现 3.二叉堆实现优先队列 4.堆排序1.优先队列是什么在很多情况下,我们需要处理有序的元素,但是并不一定需要这些元素时时刻刻全部有序,或者并不需要他们一次性全部有序。很多情况下,我们只需要找出一堆元素里面键值最大的那个元素,然后继续收集更多的元素,在我们需要其中最大的元素是,这种原创 2017-05-21 19:18:53 · 592 阅读 · 0 评论 -
快速排序
1.快速排序的介绍: 2.传统快速排序及其时间复杂度。 3.快速排序的几种改进方案。1.快速排序的介绍快速排序可能是应用的最为广泛的排序算法了,快速排序的主要优点有: 1.原地排序. 2.大多数情况下,它的时间复杂度都是NlogN. 但是它的缺点也很明显,它是一个不稳定的算法,在要排序的数组已经有序的情况下,它的效率能降到N的平方。2.传统的快速排序实现及其时间复杂度2.原创 2017-05-17 17:20:08 · 790 阅读 · 0 评论 -
图
图图里面的术语:路径 :由边顺序连接的一系列订单。简单路径 :一条没有重复顶点的路径。环 :一条至少含有一条边且起点和终点相同的路径。简单环 :一条(除了起点和终点必须相同之外)不含有重复顶点和边的环。路径或者环的长度为其中所包含的边数。当两个顶点之间存在一条连接双方的路径时,我们称一个顶点和另一个顶点时连通的。连通图:如果从任意一个顶点都存在一条路径到达另一个任意顶点,我们称这幅图是连通图。树是一原创 2017-09-15 15:38:18 · 493 阅读 · 0 评论
分享