算法
Andy_96
学如逆水行舟,不进则退!
展开
-
五大常用算法——动态规划
基本概念: 动态规划过程:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。基本思想: 类似于分治算法(后续博客介绍),将一个待求解的问题分解成若干个子问题,顺序求解每个子问题,前一个子问题的解包含后一个子问题有用的信息。求解每一个子问题的最优解,则最后一个子问题的解就是初始问题的解。 动态规划问题求解过程中会出现子问题重叠的问题(就是重复计算子问题),我们可以利用一个二维数组将每一个子问题的解记录下原创 2020-05-24 12:30:57 · 555 阅读 · 0 评论 -
排序算法——堆排序
堆排序是指利用堆这种数据结构所设计的一种选择排序算法。堆是一种近似完全二叉树的结构(通常堆是通过一维数组来实现的),并满足性质:以最大堆(也叫大根堆、大顶堆)为例,其中父结点的值总是大于它的孩子节点。 我们可以很容易的定义堆排序的过程:由输入的无序数组构造一个最大堆,作为初始的无序区 把堆顶元素(最大值)和堆尾元素互换 把堆(无序区)的尺寸缩小1,并调用heapify(A...原创 2018-06-21 19:58:42 · 196 阅读 · 0 评论 -
排序算法——快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:从序列中挑...原创 2018-06-20 10:06:00 · 224 阅读 · 0 评论 -
排序算法——归并排序
1、基本思想:归并排序就是利用归并的思想实现的排序方法。而且充分利用了完全二叉树的深度是的特性,因此效率比较高。其基本原理如下:对于给定的一组记录,利用递归与分治技术将数据序列划分成为越来越小的半子表,在对半子表排序,最后再用递归方法将排好序的半子表合并成为越来越大的有序序列。 经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行...转载 2018-05-31 16:57:14 · 211 阅读 · 0 评论 -
排序算法——插入排序
插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌 对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好序的手牌)中从后向前扫描,找到相应位置并插入。 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 具体算法描...原创 2018-05-24 19:13:59 · 168 阅读 · 0 评论 -
排序算法——选择排序
选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记...原创 2018-05-23 18:15:23 · 172 阅读 · 0 评论 -
排序算法——冒泡排序
冒泡排序算法的运作如下:比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的代码...原创 2018-05-18 21:14:06 · 225 阅读 · 0 评论