算法
梵谷的忧伤
这个作者很懒,什么都没留下…
展开
-
查找算法1
现代计算机和网络使得我们能够访问海量的信息,高效的检索这些信息的能力是处理它们的重要前提.本章描述的都是数十年来在广泛应用中经过实践检验的经典查找算法,没有这些算法,现代信息世界的基础计算设施都无从谈起.我们会使用符号表这个词来描述一张抽象的表格,我们会将信息存储于其中,然后按照指定的键来搜索并且获取这些信息,键和值的具体意义取决于不同的应用,符号表中可能会保存很多键和很多信息.因此实现一张高效的符号表也是一项很有挑战性的任务.符号表有时候被称为字典,类似于那本将单词的释义按照字母排序顺序排列起来的原创 2022-01-12 20:49:20 · 42 阅读 · 0 评论 -
<<算法>>第二章习题(第三节)
待更新原创 2022-01-11 22:19:29 · 121 阅读 · 0 评论 -
<<算法>>第二章习题(第二节)
练习 按照本书开头指出merge()是如何排序数组A E Q S U Y E I N S O R T排序的 按照算法2.4所示的轨迹给出自顶向下的归并排序是怎样排列一串字母的 用自底向上的方法解答第二题 是否当且仅当两个输入的子数组都有序的时候,原地归并排序方法才能得到正确的结果 当输入的数组大小N是39时,给出自顶向下和自底向上的归并排序中各次归并子数组的大小以及排序 编写一个程序来计算自顶向下和自底向上的归并排序访问数组的准确次数,使用这个程序将N原创 2022-01-10 22:53:48 · 313 阅读 · 0 评论 -
优先队列实现堆排序
待补全原创 2022-01-07 22:39:46 · 308 阅读 · 0 评论 -
快速排序与三取样切分快速排序
本节的主题是快速排序,它可能是运用最为广泛的排序了,因为它很快.相比于其它算法而言,它适用于各种不同的输入数据且在一般应用中比其它算法快得多,快速排序引人注目的是它只需要一个小小的辅助栈,且将长度为N的数组排序所需要的时间和NlogN成正比,我们已经学习过的算法都无法同时结合这两个优点.该算法的关键部分在于切分,这个过程满足以下三个条件: 对于某个j,A[j]已经排定 A[lo]到到A[j-1]所有元素都不大于A[j] A[j+1]到A[hi]所有元素都不小于A[j] ..原创 2022-01-06 23:32:37 · 542 阅读 · 0 评论 -
<<算法>>第二章习题(第一节)
练习2.1.1给出选择排序是如何将数组E A S Y Q U E S T I O N排序的import java.lang.Comparable;public class T_2_1_1 { public static void main(String[] args) { String[] A = {"E","A","S","Y","Q","U","E","S","T","I","O","N"}; sort(A); } public...原创 2022-01-05 21:29:32 · 268 阅读 · 0 评论 -
自顶向下与自底向上的归并排序
自顶向下的归并排序在本节中我们所讨论的算法都基于归并排序这个简单的操作,即将两个有序的数组归并排序成一个有序数组.很快人们就根据这个操作发明了一种简单的归并算法.要将一个数组排序,可以先将它分成两半分别排序,然后将结果归并起来.你将会看到,归并排序吸引人的性质是它能够保证将任意长度为N的数组排序所用的时间和NlogN成正比,它的主要缺点是所利用的额外空间和N成正比.代码格式如下:public class Merge { private static int[] aux; p...原创 2022-01-04 23:11:56 · 659 阅读 · 0 评论 -
由插入排序演变而来的希尔排序
代码实现为了展示初级排序算法的性质,接下来我们将学习一种基于插入排序的快速排序的算法.对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到数组的另一端,例如:如果主键较小的元素正好在数组的尽头,要将它挪到正确的位置就需要N-1次移动.希尔排序为了加快速度,改进了插入排序,交换不相邻的元素以达到整体元素的有序,再进一步使用插入排序.public class Shell { // shell排序算法 public static void main(.原创 2022-01-03 10:39:54 · 750 阅读 · 0 评论 -
排序算法的性能比较
time()实现算法之后,下一步我们要确定一个输入模型.对于排序,在上一节里我们采用的是简单的输入的自然数组,然而要想比较两种算法的性能,我们需要更为复杂的模型.为了比较,我们采用SortCompare类来做几次实验,使用Stopwatch来计时,下面的time()函数的任务是调用本章节中的几种常用的排序算法.SortComparepublic class SortCompare { public static void main(String[] args) { Stri...原创 2022-02-06 10:09:18 · 311 阅读 · 0 评论 -
选择排序 插入排序以及冒泡排序
选择排序一种最简单的排序是这样的:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置.再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换.如此往复,直到将整个数组排好序.代码比较简单.public class Selection { //选择排序算法 public static void main(String[] args) { int[] A = {9, 10, 7, 5, 4, 6, 2, 3, 2, 1, 0, 8}; show(A); ...原创 2022-01-02 23:35:52 · 747 阅读 · 0 评论 -
排序算法0
初级排序算法模板我们关注的主要对象是重新排列数组元素的算法,其中每个元素都有一个主键.排序算法的目标就是将所有元素的主键按照某种方式排列.下面列出排序类算法的模板:public class Example { public static void sort(Comparable[] a) {//排序方法类主体 } public static boolean less(Comparable v, Comparable w) {//比较v和w的大小 retu...原创 2022-01-02 20:41:11 · 60 阅读 · 0 评论 -
<<算法>>
<<算法>>学习过程引作为一名大二学生,在算法的学习上一直没有能够投入时间,从2022年开始,正式开启我学习算法的心路历程,而我选择的算法书是从许多书中甄选出来的.众所周知,算法书中由许多经典著作,从今日起,我将开始潜心钻研,选择的第一本书便是由Robert和Kevin编著的著作<<算法>>,为什么不是<<算法导论>>.究其原因只因为我个人能力有限,觉得这本书更容易理解与学习,排版也深得我心.从即日起,我将经常更新,作为我督促自己原创 2022-01-02 17:04:52 · 386 阅读 · 0 评论