分解:将原问题划分成形式相同的子问题,规模可以不等,对半或2/3对1/3的划分。 解决:对于子问题的解决,很明显,采用的是递归求解的方式,如果子问题足够小了,就停止递归,直接求解。 合并:将子问题的解合并成原问题的解。 这里引出了一个如何求解子问题的问题,显然是采用递归调用栈的方式。因此,递归式与分 ...
分类:
其他好文 时间:
2017-05-14 13:54:42
阅读次数:
228
问题描述: Gray码是一个长度为2n的序列。序列中无相同的原图,每个元素都是长度为n位的串,相邻元素恰好只有一位不同。用分治策略设计一个算法对任意的n构造相应的Gray码。 算法设计: n=1时,Gray码:0,1 n=2时,Gray码:00,10, 11,01 n=3时,Gray码:000,01 ...
分类:
编程语言 时间:
2017-04-21 22:49:40
阅读次数:
867
1. 快速排序算法简介 快速排序方法是对冒泡排序的一种改进,基本思想是将待排序序列分成两部分,使其中一部分的记录都比另一部分的小,随后分别对这两部分再进行重复划分,最终使得整个序列有序。 该方法的基本思想是:(分治策略) 设置low,high两个指针,分别指向序列的第一个记录和最后一个记录。此时lo ...
分类:
编程语言 时间:
2017-04-15 12:26:58
阅读次数:
257
【题目】 设计一个满足以下要求的比赛日程表:(1) 每个选手必须与其他n-1个选手各赛一次;(2) 每个选手一天只能赛一次;(3) 循环赛一共进行n-1天。 传统方法:将比赛日程表设计为:n行 n-1列的表(i,j)表示:第i个选手在第j 天 遇到的选手 【算法解析】 按分治策略,将所有的选手分为两 ...
分类:
其他好文 时间:
2017-04-06 10:09:09
阅读次数:
162
1、二分查找(1)、二分查找递归实现#include<stdio.h>
#defineNOT_FOUND-1;
intbinSearch(int*a,inthead,inttail,intkey);
intbinSearch(int*a,inthead,inttail,intkey){
intmiddle;
if(head<=tail){
middle=(head+tail)/2;
if(key==a[middle]){
returnmiddle;
}
..
分类:
其他好文 时间:
2017-02-17 10:28:56
阅读次数:
213
第一题: 问题名称:整数划分问题。 问题描述:正整数n可以表示为一系列正整数之和:n = n1 + n2 + ... + nk (k>=1, n1>=n2>=nk ),则称这种表示为正整数n的划分,不同的这种表示的个数称为正整数n的划分数,记为p(n)。在所有划分中,将最大加数n1不大于m的划分数, ...
分类:
其他好文 时间:
2017-01-09 20:16:36
阅读次数:
193
思想: 合并排序算法的分治策略是将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。 ...
分类:
编程语言 时间:
2016-12-13 07:02:26
阅读次数:
170
归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。 归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现 ...
分类:
编程语言 时间:
2016-12-03 18:37:36
阅读次数:
162
一、冒泡排序 冒泡排序是一种简单的排序算法。它重复的走访过要排序的数列,一次比较两个元素,如果它们顺序错误就把他们交换过来。 二、快速排序 使用分治策略把一个序列分成两个子序列。 此外还有选择、插入、归并排序。代码如下: ...
分类:
编程语言 时间:
2016-11-24 21:32:23
阅读次数:
254
以下实现最大子数组的分治策略,算法来自《算法导论》 #include<iostream> using namespace std; struct ans { int low; int high; int sum; }; ans MAXIMUM_CROSSING_SBUARRAY(int * A, i ...
分类:
编程语言 时间:
2016-10-11 19:03:02
阅读次数:
319