递归与分治
little pepper
哒哒!!!
展开
-
给定一个顺序表,编写一个求出其最大值和最小值的分治算法
由于顺序表的jieg结构没有给出,作为演示分治法,假定数据存储在一个整形数组中,大小由用户定义,数据随机生成。如果数组大小为1则可以直接给出结果,如果大小为2则一次比较即可得出结果,如果求解的问题数组长度比2大就分治,算法如下。//s为当前分治段的开始下标;e为当前分治段的结束下标//*meter为表的地址;*max为存储当前搜索到的最大值;*min为存储当前搜索到的最小值void Pa...原创 2018-09-27 19:56:32 · 4654 阅读 · 1 评论 -
合并排序
合并排序是采用分治法的一种非常dian典型的应用,它是建立在归并操作上的一种有效的排序算法。合并排序是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列fenc分成为若干个子序列,每个子序列是有序的,然后再把有序的子序列合并为整体有序的序列。将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,成为二路归并。合并排序也称为归...原创 2018-09-27 20:16:40 · 2451 阅读 · 0 评论 -
快速排序
快速排序是对ma冒泡排序的一种改进,假设将要排序的数组是A[0],...,A[n-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟kuai快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同值的相对位置也许会在算法结束时产生变动。void quicksort(int r[],in...原创 2018-09-27 20:21:16 · 112 阅读 · 0 评论 -
给出一个分治算法来找出n个元素序列中第2大的元素
题目:给出一个分治算法来找出n个元素序列中的第2大的元素。如果不是题目要求用分治法,用遍历或排序都比这个分治法要快。下面说说解题思路吧解题思路:当序列A[1..n]中元素的个数n=2时,通过直接比较即可找出序列的第2大元素。当n>2时,先求出序列A[1..n-1]中的第1大元素x1和第2大元素x2;然后,通过2次比较即可在三个元素x1,x2和A[n]中找出第2大元素,该元素即为A[1...原创 2018-10-06 16:47:54 · 9968 阅读 · 2 评论 -
递归
基本思想: 生活中有这样的例子:假如一个人站在两面相对的镜子之间,那么可以在其中一面镜子中看到自己,同时镜子中的自己后面又有一面镜子,镜子里面又是自己,这样重叠反复下去;再如,有些家庭喜欢每年照一副团圆照,每年照相时都拿着上一年的照片,这样第二年的照片中就会出现照片中的人拿着的照片里面有人拿着照片这样的现象,多年之后,这样现象更加重重叠叠……以上两种情况其实都是递归的表现。 ...原创 2018-09-28 15:52:04 · 173 阅读 · 0 评论 -
汉诺塔问题
问题描述:古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如果所示,有一个和尚想把这n个盘子从A盘移到C盘,但每次只能移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。要求输出移动的步骤。输入数据:汉诺塔内的盘子个数n(1<=n<=64)。输出要求:输出移动的步骤,每行一步,...原创 2018-09-28 16:27:14 · 809 阅读 · 0 评论 -
斐波那契的余数
分析这个题目:P的取值是(1,500),所以f(4999)很大很大了,根本就long long型都无法表示,不过,K的取值为[ 1,15),最大2^14=16384, 这个还好处理。然后结合本题斐波那契的余数,首先,斐波那契应该采取怎样的算法求解,目前,我知道的两种,一种是我将要采用的递推法,还有一种是递归法。(注意,尽管这两个方法一字之差,可是完全不一样的),至于我为什么选择递推法,请看ht...原创 2018-09-30 16:30:19 · 1052 阅读 · 0 评论 -
Fib数之奇偶性
分析这个题目:其实跟斐波那契数列中的数据真的没关系,只考 奇+偶=奇,偶+奇=奇,奇+奇=偶,偶+偶=偶。具体这个题目:f(1)=1奇, f(2)=1奇, f(3)=f(1)+f(2)=奇+奇=偶,f(4)=f(2)+f(3)=奇+偶=奇, f(5)=f(3)+f...原创 2018-09-30 16:45:53 · 470 阅读 · 0 评论 -
斐波那契数
这个题相当简单,只是题目没有描述清楚,没有结束条件;#include<stdio.h>int f(int n){ int fa=0,fb=1,f; if(n==0) return 0; if(n==1) return 1; for(int i=2;i<=n;i++) { f=fa+fb; fa=fb; fb=f; } return f;...原创 2018-09-30 16:58:16 · 202 阅读 · 0 评论