算法学习
dzx357137634
这个作者很懒,什么都没留下…
展开
-
算法学习-1
插入排序是学习算法时最先学到的一个算法,很简单,也许看一遍就会理解,从而觉得自己掌握这个基本的算法。但是很多人可能会像我一样,过了一段时间,提笔来写一下插入排序的伪代码,就很难写出书本上如此优雅的伪代码。INSERTION_SORT(A): For j=2 to A.length key=A[j] //insert A[j] to A[1,..,j-1]原创 2017-01-17 00:04:14 · 281 阅读 · 0 评论 -
算法学习-2
当我们在没有学习算法之前,在做排序问题的时候,首先想到的应该是选择排序或者是冒泡排序。其中选择排序可能是大脑最自然的思考方式。在学校操场上,同学们零零散散站着,老师扫了一眼,叫了最高个同学站在到前面,然后依次剩余同学中最高的依次站成一排,重复此过程直到最后一个同学也站入队伍了后,队伍也就按高矮顺序排好了,这种场景我们在小学的时候可以经历的比较多,自此我们潜意识的学习了选择排序法。一碰到排序问题,潜意原创 2017-01-17 16:49:19 · 266 阅读 · 0 评论 -
算法学习-4
随机算法在算法导论书本中,会看到随机算法这个词。什么是随机算法?书本中没有给出很明确的定义,夹杂了很多概率分析的东西。这就让人在对这个词的理解上很模糊。这里我把我自己的理解写出来做个记录。一般在讲到算法,我会认为是一种解决特定问题的方法,是一系列操作,是一段程序,输入数据,能得到预期的结果。随机算法又是什么呢?一般意义上的算法,同样的输入数据,输出结果是固定的。对了,随机算法就是对于一个固定输入,多原创 2017-01-18 23:17:36 · 334 阅读 · 0 评论 -
算法学习-4
堆排序算法排序是算法学习中最基础的内容,也有很多中排序算法,这里简单介绍学一下堆排序。理解堆排序之前,一定要先明白什么是堆,其实它就是一个数组或者是数组的一部分,一定要记住明白这一点,不然容易有一种树结构的错觉。它就是在数组的元素间定义一些关系,让这些元素看起来近似一个二叉树。这些元素组成的数组就叫做堆。堆排序的具体流程: 1,使A.heap-size = A.length,把数组A 转换为最大堆原创 2017-01-20 23:35:40 · 269 阅读 · 0 评论 -
算法学习-3
求解最大子数组问题最大子数组问题就是寻找数组A的和最大的非空连续子数组。当然数组A必须包含正负数,如果全是负数或正数则没有意义了,最大子数组显然是数组A本身。当然我们可以设计一个暴力方法来求解,穷举所以可能的情况。但是这里我们用算法学习2中学过的分治法来求解。但是这个跟归并排序有点不一样,归并排序求解的子问题结果可以直接处理得到原问题的结果,这里并不能通过处理分解后的子问题的解来得到原问题的答案。图原创 2017-01-17 23:54:36 · 371 阅读 · 0 评论 -
算法学习-5
快速排序快速排序也是一种采用分治策略的算法,它与归并排序不同的是,它是原址排序,不需要额外的空间。如果把要排序的数组简单划分成两个子数组,对子数组排序后,又因为是原址排序,排序后的两个子数组是如何保证作为一个整体也是有序的呢?很显然无法保证。分解肯定就不是简单的把数组拆分成两个子数组,而是首先找一个数组元素作为主元,然后找出比主元小的元素放到主元的坐边,大的数放到右边,然后对左边的子数组和右边的子数原创 2017-01-21 21:37:52 · 348 阅读 · 0 评论 -
算法学习-6
三种最基本的线性排序算法计数排序计数排序是假设数组A中的元素都是在0到K区间内的整数。构建一个数组C[0,..,k]初始化为-1,如果数组A中的元素互异的话,那么把A的元素拷贝到C中:C[A[i]] = A[i],然后遍历C,把非-1的元素依次拷贝到数组A中即可完成排序。但数组有元素相等要怎么处理了。元素互异的做法,还可以是C[0,..,k]初始化为0,使C[A[i]] = 1,然后遍历C如果C[i原创 2017-01-22 23:34:02 · 310 阅读 · 0 评论