
数据结构与算法分析
天空灬之城
这个作者很懒,什么都没留下…
展开
-
AVL树
1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。本文介绍了AVL树的设计思想和基本操作。2.转载 2017-04-07 11:22:29 · 389 阅读 · 0 评论 -
程序员必知8大排序3大查找(一)
程序员必知!1、直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例 2、希尔排序(也称最小增量排序)(1)基本思想:算法先转载 2017-07-01 10:14:41 · 389 阅读 · 0 评论 -
程序员必知8大排序3大查找(三)
三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈)一、顺序查找的基本思想:从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明转载 2017-07-01 10:20:49 · 321 阅读 · 0 评论 -
深入浅析动态规划算法
转载自:http://blog.youkuaiyun.com/baidu_28312631/article/details/47418773 动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现转载 2017-05-31 21:36:23 · 807 阅读 · 0 评论 -
二分查找法注意事项
使用二分查找,必须要满足:存储在数组中(不可以是链表);有序排列public class BinarySearch{ public static int BinarySearch(int [] list , int key ){ int low = 0,high = list.length -1; while( low //转载 2017-05-24 16:41:12 · 622 阅读 · 0 评论 -
手把手教你<leetcode>中的回溯算法——多一点套路
是一个很强大的OJ(OnlineJudge)算法平台,其中不少题目都很经典。其中有一个系列的考察回溯算法,例如Combination Sum 系列 Subsets系列等。根据百度百科定义:回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件转载 2017-05-24 16:05:13 · 1005 阅读 · 0 评论 -
二叉树遍历的解释
已知两种二叉树求原始二叉树通过先序和中序 或者 中序和后序 可以还原出原始二叉树通过先序和后序无法还原出原始二叉树已知先序中序求后序例1:先序:ABCDEFGH中序:BDCEAFHG求后序 思路:1,先序中第一个出现的一定为根节点->A 2,在中序中找出A,A的左边为左子树,A的右边为右子树 -> BDCE A FHG原创 2017-04-06 17:04:08 · 649 阅读 · 1 评论 -
Java常用的八种排序算法与代码实现
目录:1.直接插入排序2.希尔排序3.简单选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序8.基数排序1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对转载 2017-04-18 12:05:05 · 620 阅读 · 0 评论 -
欧几里德算法(幂运算)
文中X(N) 表示X的N次方; 计算X(N) 的明显算法是使用N-1次乘法自乘,有一种递归算法更好:N≤1是这种递归的基准情形,否则若N为偶数,我们有X(N) = X(N/2) × X(N/2),若X为奇数,则X(N) = X((N-1)/2) × X((N-1)/2) × X 例如:为了计算X(62),算法将如下进行,它只用到9次乘法: X(62) = (原创 2017-04-03 18:42:25 · 632 阅读 · 0 评论 -
欧几里德算法(求两数最大公因数)
两个整数的最大公因数(gcd)是同时整除两个大最大整数。即gcd(50,15)=5. 算法连续计算余数直到除数为0,最后的非0余数就是最大公因数。因此若M=1989,N=1590,则余数是399,393,6,3,0,从而gcd(1989,1590)=3,这是一个快速算法。public static long gcd(long m,long n){while(n !=原创 2017-04-03 18:07:09 · 1558 阅读 · 0 评论 -
GC参数
1.串行收集器:1,最古老,最稳定2,效率高3,可能会产生较长的停顿 -XX:+UseSerialGC --新生代,年老代使用串行回收 --新生代复制算法 --年老代标记-压缩 应用程序线程可能有多个,一旦回收开始,这些线程全部暂停,由GC线程接替运行,在串行回收器中,gc线程只有一个,原创 2017-04-12 17:10:17 · 781 阅读 · 0 评论 -
GC算法和种类
GC:Garbage Collection 垃圾收集Java中,GC的对象是堆空间和永久区一,引用计数法老牌垃圾回收算法,通过引用计算来回收垃圾。为每个对象都标记使用数量,即只要有一个人使用这个对象,就在这个对象的引用数量上+1,释放则-1,引用数量为0则空间释放。存在的问题:1,引用和去引用伴随加法和减法,影响性能2,很难处理循环引用二,标记-清除原创 2017-04-07 13:04:15 · 452 阅读 · 0 评论 -
程序员必知8大排序3大查找(二)
本文我们先把剩余的三大排序说完,然后讨论一下排序的稳定性问题,最后再总结一下排序的时间复杂度和空间复杂度。(1到5见上篇)6、快速排序 (1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。转载 2017-07-01 10:17:37 · 284 阅读 · 0 评论