`
heisedeyueya
  • 浏览: 96614 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

递推算法二

阅读更多
递推算法二(幂积数列)
幂积数列:M={2^x * 3^y|x>=0,y>=0},输入整数n,m求小于n的按从小到大的第m个元素
分析:
  • 穷尽法:从2开始到n,如果n%2==0,n=n/2一直循环的直到不能除尽、n%3(同理),最后的商等于1则说明这个数在数列中。
  • 算法分析:可以很清楚的得出时间复杂度 = O(n)


private static void power(int n, int m) {
		int f[] = new int[1000], index = 2;
		f[1] = 1;
		f[2] = 2;
		for (int i = 3; i <= n; i++) {
			int j = i;
			while (j % 2 == 0) {
				j = j / 2;
			}
			while (j % 3 == 0) {
				j = j / 3;
			}
			if (j == 1) {
				index++;
				f[index] = i;
			}
		}
		System.out.println("数列中小于" + n + "的共有" + index + "项");
		System.out.println("数列中的第" + m + "项为:" + f[m]);
	}


  • 递推法:
  • 寻求递推关系:寻求x+y =i;和x+y = i-1之间的关系,不难看出第i行有i+1个元素,第行的前i个元素等于第i-1行对应列的2倍,而第i+1个元素等于3倍前一行的最后一个元素。
  •       x+y=0;1
         x+y=1;2*1=2,3*1=3
         x+y=2;2*2=4,3*2=6,3*3=9
         x+y=3;4*2=8,6*2=12,9*2=18,9*3=27
  • 排序后输出第m项。
  • 算法分析:党n从分大时项数index<n^(1/4)的,冒泡排序的时间复杂度=O(n^2) = O(index^2)——>排序的时间复杂度=O(n^1/2),总的来说时间复杂度是<<O(n)的。


private static void power1(int n, int m) {
		int i = 1, flag = 0, k = 1, rowMax = 1, j = 0, temp = 0;
		int f[] = new int[1000];
		int row[] = new int[100];
		f[1] = 1;
		row[0] = 1;
		while (true) {
			//当元素不满足递推的条件时,结束递推,初始时falg=0
			flag = 0;
			for (j = 0; j <= i - 1; j++) {
				int h = row[i - 1] + j;
				//递归的条件:当前的数>0&&<=n
				if (2 * f[h] <= n && f[h] > 0) {
					k++;
					f[k] = 2 * f[h];
					//这一行有满足条件的递推关系成立
					flag = 1;
					if (j == 0) {
						//记录每行第一个元素的位置
						row[i] = k;
					}
				} else {
					break;
				}
			}
			rowMax = rowMax * 3;
			if (rowMax <= n && rowMax > 0) {
				k++;
				f[k] = rowMax;
			}
			//递推结束推出while循环
			if (flag == 0)
				break;
			i++;
		}
		//冒泡排序
		for (i = 1; i < k; i++) {
			for (j = i + 1; j <= k; j++) {
				if (f[i] > f[j]) {
					temp = f[i];
					f[i] = f[j];
					f[j] = temp;
				}
			}
		}
		System.out.println("数列中小于" + n + "的共有:" + k + "项");
		System.out.println("数列中的第" + m + "项为:" + f[m]);
	}
0
0
分享到:
评论

相关推荐

    基于最小二乘递推算法的参数估计matlab仿真+操作视频

    2.内容:基于最小二乘递推算法的参数估计matlab仿真+操作视频 3.用处:用于最小二乘递推算法的参数估计算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,...

    C++基本算法思想之递推算法思想

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用。递推算法适合有明显公式规律的场合。 递推算法基本思想递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果。递推算法的...

    数据结构与算法 递推算法

    数据结构与算法 递推算法,Devc++环境,数据结构基础算法

    C语言递推算法汇总大作业

    中北大学我们组的C语言递推算法汇总大作业,压缩包里有.exe执行文件,该压缩文件包含了16个递推算法问题,每个问题有各自的界面,界面里有问题的描述、例子、算法说明等等,在界面中还具有 2 个可执行的选项:第一个...

    第二讲:递推算法详解.pptx

    第二讲:递推算法详解.pptx

    2维最大类间平均离差阈值选取快速递推算法

    阈值分割是广泛使用的最为有效的图像分割方法之一。阈值选取是阈值分割的关键。Otsu提出的基于范数的最大类间...提出了2维最大类间平均离差阈值选取的两种不同的快速递推算法,都可将计算复杂性由O(r)减少为0(£2)。

    二维熵阈值分割的快速递推算法

    该程序为二维熵阈值分割的快速递推算法,又好又快,是一种很优秀的图像分割算法

    系统辨识部分算法matlab程序

    二、 基本最小二乘法递推算法 三、 最小二乘遗忘因子一次完成算法 四、 最小二乘遗忘因子递推算法 五、 最小二乘限定记忆算法 六、 最小二乘偏差补偿算法 七、 增广最小二乘算法 八、 广义最小二乘算法 test3: 一、 ...

    有色噪声十扰系统的参数辨识递推算法 (2009年)

    为了辨识受有色噪声干扰的系统参数,提出一种递推算法。该算法由系统部分的参数估计和噪声部分的参数估计2部分组成。系统参数估计采用的是包含当前预报误差和之前估计误差的递推算法辨识。噪声部分参数则是采用扩展的...

    最小二乘算法总结(算法+程序)

    附录2、最小二乘递推算法 25 附录3、遗忘因子最小二乘一次计算法 26 附录4、遗忘因子最小二乘递推算法 27 附录5、限定记忆最小二乘递推算法 29 附录6、偏差补偿最小二乘递推算法 31 附录7、增广最小二乘递推算法 32 ...

    各种最小二乘法汇总(算例及MATLAB程序)

    附录2、最小二乘递推算法 25 附录3、遗忘因子最小二乘一次计算法 26 附录4、遗忘因子最小二乘递推算法 27 附录5、限定记忆最小二乘递推算法 29 附录6、偏差补偿最小二乘递推算法 31 附录7、增广最小二乘递推算法 32 ...

    第二部分 基础算法 -> 第三章 递推算法 信息学奥赛一本通

Global site tag (gtag.js) - Google Analytics