随笔分类 -  五大算法

摘要:基本思想: 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规 阅读全文
posted @ 2017-02-08 17:01 wj_hubei 阅读(15298) 评论(1) 推荐(1) 编辑
摘要:一,贪心算法的设计思想 • 从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解。当达到某算法中的某一步不需要再继续前进时,算法停止。 二,贪心算法的基本性质 1)贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择 阅读全文
posted @ 2017-02-07 22:11 wj_hubei 阅读(7924) 评论(3) 推荐(2) 编辑
摘要:查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 顺序查找 针对无序序列的一种最简单的查找方式。 时间复杂度为O(n)。 查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = (1+2+3+…+n)/n = (n+1)/2 ; 当查找不成功 阅读全文
posted @ 2016-12-04 15:59 wj_hubei 阅读(443) 评论(0) 推荐(0) 编辑
摘要:基数排序(radix sorting)将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。 然后 从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 假设我们有一些二元组(a,b),要对它们进行以a为首要关键字,b为次要关键字的排序 阅读全文
posted @ 2016-12-03 22:54 wj_hubei 阅读(529) 评论(0) 推荐(0) 编辑
摘要:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 希尔排序是不稳定的排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序 阅读全文
posted @ 2016-12-03 21:32 wj_hubei 阅读(201) 评论(0) 推荐(0) 编辑
摘要:最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。 最差复杂度:当输入数组为倒序时,复杂度为O(n^2) 其实插入排序的复杂度和逆序对的个数一样,当数组倒序时,逆序对的个数为n(n-1)/2,因此插入排序复杂度为O(n^2)。 插入排序比较适 阅读全文
posted @ 2016-12-03 19:13 wj_hubei 阅读(319) 评论(0) 推荐(0) 编辑
摘要:归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。 归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现 阅读全文
posted @ 2016-12-03 16:25 wj_hubei 阅读(184) 评论(0) 推荐(0) 编辑
摘要:基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换; 阅读全文
posted @ 2016-12-03 15:54 wj_hubei 阅读(323) 评论(0) 推荐(0) 编辑
摘要:泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法。它重复地走访过要排序的元素,一次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 时间复杂度 最 阅读全文
posted @ 2016-12-03 15:24 wj_hubei 阅读(281) 评论(0) 推荐(0) 编辑
摘要:我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度最少可达到O(n log n),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数 阅读全文
posted @ 2016-12-03 14:59 wj_hubei 阅读(336) 评论(0) 推荐(0) 编辑
摘要:堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。 堆排序有点类似选择排序,都是每次选出最大的数或最小的数。 对于堆,由于其根节点为堆中最大的节点,因此每次只需取出其根节点,然后重新建堆,再重复前面操作 故按如下步骤: 首先可以看到堆建好之后堆中第0个数据是堆中最大 阅读全文
posted @ 2016-11-16 23:24 wj_hubei 阅读(266) 评论(0) 推荐(0) 编辑
摘要:算法学习笔记之三:八皇后问题(递归、回溯) - 只要踏出一步,路就在前方——zssure - 博客频道 - CSDN.NET http://blog.csdn.net/zssureqh/article/details/21116883 八皇后问题 回溯法 - qinyg - 博客园 http://w 阅读全文
posted @ 2016-11-15 23:40 wj_hubei 阅读(135) 评论(0) 推荐(0) 编辑
摘要:五大常用算法之四:回溯法 - 红脸书生 - 博客园 http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 穷举递归和回溯算法终结篇 - python27 - 博客园 http://www.cnblogs.com/pytho 阅读全文
posted @ 2016-11-14 23:12 wj_hubei 阅读(132) 评论(0) 推荐(0) 编辑
摘要:无向图最短路径问题 - jphaoren的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/jphaoren/article/details/6285783 无向图的最短路径求解算法之——Dijkstra算法(转载)_清风明月_新浪博客 http://blog.si 阅读全文
posted @ 2016-09-13 22:16 wj_hubei 阅读(169) 评论(0) 推荐(0) 编辑
摘要:排序算法——快速排序 - ~大器晚成~ - 博客园 http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html 坐在马桶上看算法:快速排序 - 51CTO.COM http://developer.51cto.com/art/20 阅读全文
posted @ 2016-09-13 22:14 wj_hubei 阅读(149) 评论(0) 推荐(0) 编辑