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

排序算法入门之堆排序
摘要:预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 阅读全文

posted @ 2018-06-30 15:44 夜的第八章 阅读(266) 评论(0) 推荐(0)

二叉树的先序中序后续遍历(递归非递归)
摘要:转载:http://blog.csdn.net/jssongwei/article/details/50790253 首先来看一棵二叉树: 1、前序遍历: 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。 若二叉树为空则结束 阅读全文

posted @ 2018-01-08 14:27 夜的第八章 阅读(1130) 评论(0) 推荐(0)

五大常用算法:分治、动态规划、贪心、回溯和分支界定
摘要:分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并 阅读全文

posted @ 2017-12-25 10:22 夜的第八章 阅读(624) 评论(0) 推荐(0)

排序算法入门之堆排序(Java实现)
摘要:堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序。堆排序总的运行时间为O(NlonN)。 堆的概念 堆是以数组作为存储结构。 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那么(下标从0开始), (1) 它的左孩子结点是:R[2*i+1]; (2) 它的右孩子结点是:R[2 阅读全文

posted @ 2017-12-23 10:16 夜的第八章 阅读(624) 评论(0) 推荐(0)

二叉堆
摘要:二叉堆 我们知道堆栈是一种LIFO(后进先出)结构,队列是一种FIFO(先进先出)结构,而二叉堆是一种最小值先出的数据结构,因此二叉堆很适合用来做排序。 二叉堆的性质:二叉堆是一棵完全二叉树。 二叉堆采用数组来存储(按广度优先遍历的顺序),而没有像普通的树结构使用指针来表示节点间的关系。 如下图所示 阅读全文

posted @ 2017-12-21 11:01 夜的第八章 阅读(370) 评论(1) 推荐(0)

线性表,线性表和链表的区别
摘要:转载:https://www.cnblogs.com/wincai/p/5893475.html 存储类别 顺序存储结构单链表 存储分配方式 用一段连续的存储单元依次存储线性表的数据元素 采用链式存储结构,用一组任意的存储单元存放线性表的元素 时间性能 查找O(1)、插入和删除O(n) 查找O(n) 阅读全文

posted @ 2017-12-19 21:52 夜的第八章 阅读(492) 评论(0) 推荐(0)

伸展树--java
摘要:文字转载自:http://www.cnblogs.com/vamei 代码转载自:http://www.blogjava.net/javacap/archive/2007/12/19/168627.html 我们讨论过,树的搜索效率与树的深度有关。二叉搜索树的深度可能为n,这种情况下,每次搜索的复杂 阅读全文

posted @ 2017-12-19 09:27 夜的第八章 阅读(661) 评论(0) 推荐(0)

各种排序算法的比较
摘要: 阅读全文

posted @ 2017-12-14 19:17 夜的第八章 阅读(147) 评论(0) 推荐(0)

哈夫曼编码
摘要:转载:http://blog.csdn.net/xgf415/article/details/52628073 霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。 霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一 阅读全文

posted @ 2017-12-14 19:10 夜的第八章 阅读(423) 评论(0) 推荐(0)

完全二叉树和满二叉树
摘要:满二叉树: 一颗深度为k且有2^k-1个结点的二叉树称为满二叉树。 除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上。每一层节点数都是2^(h-1) 完全二叉树: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有 阅读全文

posted @ 2017-12-14 19:02 夜的第八章 阅读(509) 评论(0) 推荐(0)

最大公约数
摘要:转载:https://www.cnblogs.com/hexiaochun/archive/2012/09/03/2668250.html 今天研究了一下最大公约数的求法,在网上也找了不同的解法,现在就想总结一下,拿出来分享给大家,共同 学习首先讲一个什么是公约数,这个问题我们小学都学过,可能有一部 阅读全文

posted @ 2017-12-14 15:07 夜的第八章 阅读(200) 评论(0) 推荐(0)

AVL树之 Java的实现
摘要:AVL树的介绍 AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1;而右边的不是AVL树,因为7的两颗子树的高度相差为2(以2为根节点的树的高度是3,而以8为根节点的树的高度是1)。 阅读全文

posted @ 2017-12-13 17:00 夜的第八章 阅读(770) 评论(0) 推荐(0)

二叉查找树之 Java的实现
摘要:参考:http://www.cnblogs.com/skywang12345/p/3576452.html 二叉查找树简介 二叉查找树(Binary Search Tree),又被称为二叉搜索树。它是特殊的二叉树:对于二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记 阅读全文

posted @ 2017-12-11 15:03 夜的第八章 阅读(252) 评论(0) 推荐(0)

数据结构与算法系列 目录
摘要:转载:http://www.cnblogs.com/skywang12345/p/3603935.html 最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C++"和"Java"这三种语言的实现;实现语言虽不同,但原理如出一辙。因此,读者在了解和学习 阅读全文

posted @ 2017-12-06 09:25 夜的第八章 阅读(242) 评论(0) 推荐(0)

二分查找
摘要://n表示A的大小,A是有序数组且不包含重复元素 public int getPos(int[] A,int n,int val){ if(n==0||A==null) return -1; int left=0; int right=n-1; int mid; while(right>=left) 阅读全文

posted @ 2017-11-16 21:16 夜的第八章 阅读(222) 评论(3) 推荐(0)

树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
摘要:在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程。现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.广度优先遍历 英文缩写为BFS即Breadth FirstSearch。其过程检验来说是对每一层节点依次访问,访问完一层进入下一层,而 阅读全文

posted @ 2017-10-31 21:36 夜的第八章 阅读(63311) 评论(1) 推荐(6)

排序算法入门之快速排序(java实现)
摘要:快速排序也是一种分治的排序算法。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序,会需要一个额外的数组;而快速排序的排序方式是当两个子数组都有序时,整个数组就自然有序了,快速排序可以不产生额外的数组。 对于小数组(N<=20),快速排序不如插入排 阅读全文

posted @ 2017-09-23 13:15 夜的第八章 阅读(467) 评论(0) 推荐(0)

排序算法入门之归并排序(java实现)
摘要:归并排序是采用分治法的典型应用。 参考《数据结构与算法分析-Java语言描述》 归并排序其实要做两件事: (1)“分解”——将序列每次折半划分。 (2)“合并”——合并两个已排序的表。 合并:对于两个输入数组A和B,一个输出数组C,以及3个计数器Actr、Bctr、Cctr,他们的初始置于对应数组的 阅读全文

posted @ 2017-09-21 19:45 夜的第八章 阅读(224) 评论(0) 推荐(0)

排序算法入门之希尔排序(java实现)
摘要:希尔排序是对插入排序的改进。插入排序是前面元素已经有序了,移动元素是一个一个一次往后移动,当插入的元素比前面排好序的所有元素都小时,则需要将前面所有元素都往后移动。希尔排序有了自己的增量,可以理解为插入排序的增量为1,希尔排序增量是gap。代码就是在插入排序代码的基础上多了一层增量变化的循环。可以参 阅读全文

posted @ 2017-09-20 21:42 夜的第八章

排序算法入门之插入排序(java实现)
摘要:插入排序思想:相当于插入元素,对于第i个元素,i之前的元素已经是有序的了,这时候将第i个元素依次与前面元素比较,插入合适的位置。 阅读全文

posted @ 2017-09-19 20:44 夜的第八章 阅读(213) 评论(0) 推荐(0)

导航