随笔分类 -  Java数据结构和集合框架

摘要:贪心算法 贪心算法简介: 贪心算法是指:在每一步求解的步骤中,它要求“贪婪”的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。 贪心算法每一步必须满足一下条件: 1、可行的:即它必须满足问题的约束。 2、局部最优:他是当前步骤中所有可行选择中最佳的局部选择。 3、不可取 阅读全文
posted @ 2017-06-05 23:30 Will_Don 阅读(74474) 评论(2) 推荐(6)
摘要:动态规划算法: 基本思想: 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是 阅读全文
posted @ 2017-06-03 21:33 Will_Don 阅读(13632) 评论(1) 推荐(1)
摘要:分治算法: 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归 阅读全文
posted @ 2017-05-31 13:53 Will_Don 阅读(39481) 评论(0) 推荐(11)
摘要:Stack介绍: 堆栈(Stack)是一个元素序列。盾战中唯一能被删除、访问或修改的元素是最近插入的元素。这个元素就是位于堆栈顶部的那个元素。 举例来说,自助餐厅的盘子架就是一个由盘子构成的堆栈。增加和移除操作只能在顶部进行。为了把它重新摆放,刚刚放到架子上的盘子将在下一次被移动。这种堆栈属性的定义 阅读全文
posted @ 2017-05-30 14:59 Will_Don 阅读(467) 评论(0) 推荐(0)
摘要:Vector源码解析 在之前文章ArrayList源码解析中分析了一下 ArrayList的源码和一些重要方法,现在对比 ArrayList,总结一下 Vector和 ArrayList的不同。 1 Vector介绍 1 public class Vector<E> 2 extends Abstra 阅读全文
posted @ 2017-05-30 13:56 Will_Don 阅读(349) 评论(0) 推荐(0)
摘要:概要 前面,我们已经学习了ArrayList。这一章我们接着学习List的实现类——LinkedList。和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码;最后再通过实例来学会使用LinkedList。内容包括 1、LinkedList介绍 1、L 阅读全文
posted @ 2017-05-29 09:59 Will_Don 阅读(273) 评论(0) 推荐(0)
摘要:ArrayList源码解析 ArrayList简介: ArrayList 是list接口的一个常用实现类。它的对象可以认为是一维数组的“类版本”。我们很快就可以看到,ArrayList 对象可以看做是一维数组的改良版本。类似于数组,ArrayList 对象支持元素的随机访问;也就是说,只要给出元素的 阅读全文
posted @ 2017-05-28 20:12 Will_Don 阅读(305) 评论(0) 推荐(0)
摘要:基本思想: 基数排序是另外一种比较有特色的排序方式,它不需要直接对元素进行相互比较,也不需要将元素相互交换,你需要做的就是对元素进行“分类”。它是怎么排序的呢? 基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程: (1)分配,先从个位开始,根据位值( 阅读全文
posted @ 2017-05-26 16:44 Will_Don 阅读(396) 评论(0) 推荐(0)
摘要:基本思想: 归并排序是将两个或两个以上的有序表组合成一个新的有序表。其基本思想是:先将N个数据看成N个长度为1的表,将相邻两个表合并,得到长度为2的N/2个有序表,进一步将相邻的表合并,得到长度为4的N/4个有序表,以此类推,知道所有数据合并成一个长度为N的有序表位置。没一次归并称为一趟。 要解决归 阅读全文
posted @ 2017-05-25 21:11 Will_Don 阅读(4076) 评论(0) 推荐(0)
摘要:一、快速排序的基本思想: 快速排序使用了分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 二、快速排序的三个步骤 1) 选择基准:在待排序列中,按照某种方式挑出一个元素,作为 “基准”(p 阅读全文
posted @ 2017-05-24 22:20 Will_Don 阅读(3350) 评论(0) 推荐(1)
摘要:冒泡排序的基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大 的数往下沉 ,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 关于程序中4中冒泡排序写法的说明: bubble_sort1:基本的冒泡排 阅读全文
posted @ 2017-05-23 09:29 Will_Don 阅读(583) 评论(0) 推荐(0)
摘要:堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 1. 若array[0,...,n-1]表示一颗 阅读全文
posted @ 2017-05-22 09:54 Will_Don 阅读(314) 评论(0) 推荐(0)
摘要:算法简介 简单选择排序是一种选择排序。 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 白话理解 依然已排队为例,在排队时,有的老师可能会选择这样排序,先在一列中选出最矮的,放在第一位,然后选出第二矮的,放在第二位。队伍完成排序。而这就是选择 阅读全文
posted @ 2017-05-17 21:55 Will_Don 阅读(662) 评论(0) 推荐(0)
摘要:算法简介 希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序。 白话理解: 我们依然已排队为例,加入队伍中,有一些小个子站在了队伍的后面,而一些大个子又站在了队伍的前面,这是如果再使用插入排序,那就太没有效率了。通常情况下,老师会先看一眼,然后将 阅读全文
posted @ 2017-05-17 21:19 Will_Don 阅读(410) 评论(0) 推荐(0)
摘要:算法描述: 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的 阅读全文
posted @ 2017-05-17 20:35 Will_Don 阅读(6568) 评论(0) 推荐(0)