归并排序的算法是分治法的一个范例 Like QuickSort, Merge Sort is a Divide and Conquer algorithm.它被分成两半,调用自己来分两半,最后归并两半。 merge() 功能用于合并两半。The merge (arr,l,m,r)是关键的处理arr[ ...
分类:
编程语言 时间:
2019-12-19 23:46:00
阅读次数:
160
动态规划之斐波那契数列 动态规划是将一个问题切分成子问题并将子问题的结果存储起来避免重复计算的一种算法。 它有两个要件: 1)重复子问题 2)最优子结构 和分治法一样,动态规划也是有自己的子问题,所以如果没有重复子问题,那么动态规划就无法使用,因为动态规划的作用就是存储重复子问题的值;反例是,二分查 ...
分类:
其他好文 时间:
2019-12-16 13:12:46
阅读次数:
116
动态规划算法与分治法类似,其基本思想是将总问题分解成若干个子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,动态规划求解的问题经分解得到的子问题往往不是相互独立的。 基本思想: 将总问题分解成多个子问题(子问题也可以继续分解,直到无法分解),计算子问题,用一个表保存已解决的 ...
分类:
其他好文 时间:
2019-12-15 18:24:59
阅读次数:
109
快速排序属性 上一篇文章介绍了冒泡排序和它的优化。这次介绍的快速排序是冒泡排序演变而来的算法,比冒泡排序要高效的很多。 快速排序之所以快,是因为它使用了分治法。它虽然也是通过不断的比较和移动来实现排序的,只不过它的实现,增大了比较的距离和移动的距离。而冒泡排序只是相邻的比较和交换。 快速排序的思想是 ...
分类:
编程语言 时间:
2019-12-07 19:20:53
阅读次数:
87
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自... ...
分类:
编程语言 时间:
2019-12-02 23:44:29
阅读次数:
109
快速排序 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效... ...
分类:
编程语言 时间:
2019-12-02 23:08:44
阅读次数:
88
题目: 给定一个自然数,可以在其前面增加大小不超过它本身一半的数字,形成的新数字属于半数集,这个数本身也属于半数集 例如set(6)={6,16,26,126,36,136} 求n得半数集的元素个数 思路: getset(n)=getset(1)+getset(2)+...+getset(n/2)+ ...
分类:
其他好文 时间:
2019-11-27 19:13:42
阅读次数:
176
概念 快速排序属于交换排序,主要步骤是使用基准元素进行比较,把小于基准元素的移动到一边,大于基准元素的移动到另一边。从而把数组分成两部分,然后再从这两部分中选取出基准元素,重复上面的步骤。过程如下: 紫色:基准元素 绿色:大于基准元素 黄色:小于基准元素 这种思路叫做分治法。 基准元素 基准元素的选 ...
分类:
编程语言 时间:
2019-11-23 12:50:07
阅读次数:
82
1、教材内容学习 本周主要学习了《计算机科学概论》第八章抽象数据类型与子程序,学习了栈、队列、列表、树、图,通过学习,我认识到分治法能够大大提高检索的效率。此外,我还学到了关于搜索的三种数学算法和有关子程序、参数的一些内容。 2、教材学习中的问题与解决 遇到节点的概念时不太理解,然后在博客园中搜索了 ...
分类:
其他好文 时间:
2019-11-17 17:35:13
阅读次数:
82
"题目描述" 方法一: 直接判断 复杂度 O(n) 考虑一下为什么i与j有时均更新, 有时只更新i 方法二: 动态规划 复杂度 O(nm) 动态规划思想: 将待解决问题分成若干个子问题, 先解决子问题, 然后再从子问题得到原问题;这个时候容易想到分治法, 但是与分治法不同的是, 动态规划分解的子问题 ...
分类:
其他好文 时间:
2019-11-16 19:35:35
阅读次数:
75