递推算法二(幂积数列)
幂积数列: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]);
}
分享到:
相关推荐
1. 递推算法 递推算法是一种通过已知的数列来递推整个数列的算法。它根据问题的特点和求解过程,采用从已知到未知,逐步计算的策略。递推算法通常分为前向递推和后向递推,其中前向递推是从已知项开始,逐项推出后续...
**归纳策略之递推算法详解** 递推算法是一种在解决问题时,通过定义当前状态与前一个或几个状态之间关系的方法。这种关系通常被表述为一个递推公式,用于描述序列中每一项如何由前面的项计算得出。在给定的描述中,...
"allan 递推算法.rar_ALLAN方差递推算法_Allan方差_allan_递推" 这个标题提到了“ALLAN方差递推算法”,这是信号处理领域中用于评估时间稳定性(特别是对于时钟频率稳定性和随机漂移)的一种方法。"ALLAN方差"通常...
### 信息学奥赛之递推算法(C++版) #### 一、递推算法概述 递推算法是一种基于已知初始值并通过一个递推公式计算后续值的算法。它广泛应用于数学与计算机科学中,特别是在解决序列问题时非常有效。 #### 二、递推...
二、递推算法的方法 递推算法有多种方法,包括: 1. 动态规划法:这是最常用的递推算法方法,将问题分解成更小的子问题,并通过递推关系式将子问题的解答组合起来获得最终的解答。 2. 递推关系式法:这种方法是...
Matlab 实现最小二乘递推算法辨识系统参数 本设计报告旨在使用 Matlab 实现最小二乘递推算法辨识系统参数,旨在熟悉 Matlab 的界面及基本操作,并了解 Matlab 中的一些函数的作用与使用。 一、设计目的 * 学会用 ...
递推算法是一种基于序列中前后项关系解决问题的方法,它通常涉及定义初始条件(边界)和递推关系,然后通过这些规则逐步计算出序列中的任意一项。在给定的资料中,递推算法被应用于各种不同的场景,如求和、计算阶乘...
### 2维最大类间平均离差阈值选取快速递推算法 #### 一、引言 在图像处理领域,阈值分割作为一种重要的图像分割手段,被广泛应用在多个场景之中,如红外目标检测、车牌识别以及指纹识别等。在阈值分割过程中,选择...
递推算法是一种在编程中广泛使用的解决问题的方法,它通过定义一系列的递推关系来求解问题。在本程序中,我们关注的是C#语言实现的递推算法。递推算法通常涉及将复杂问题分解为更小的部分,然后通过定义一个或多个...
"递推算法" 递推算法是数学中的一种重要方法,在计算机科学中也是一种重要的算法,广泛应用于数学的各个领域。递推算法的特点是,一个问题的求解需要一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的...
从提供的文件名来看,“day2 函数的递推讲稿.docx”和“day2 函数的递推.ppt”应该是关于递推算法的详细讲解材料。这些文档可能包含了递推算法的定义、实例、解题技巧以及如何从实际问题中抽象出递推关系等内容,对...
《算法-基础算法- 递推算法(包含源程序)》这个压缩包文件是一个关于递推算法的学习资源,其中包含了详细的理论讲解以及源程序实例,旨在帮助学习者深入理解和掌握递推算法。递推算法是计算机科学中的一种常用解决...
2.内容:基于最小二乘递推算法的参数估计matlab仿真+操作视频 3.用处:用于最小二乘递推算法的参数估计算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,...
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用。递推算法适合有明显公式规律的场合。 递推算法基本思想递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果。递推算法的...
#### 二、递推算法原理 为了解决上述问题,本文提出了一种新的递推算法,该算法通过同时考虑系统参数和噪声参数来提高估计精度。具体而言,算法分为两个主要部分: 1. **系统参数估计**:采用了包含当前预报误差和...
递推算法是一种在计算机科学中用于解决问题的有效方法,特别是在处理序列、计数问题以及组合优化问题时。递推算法的核心思想是通过定义序列中每一项与前几项之间的关系来求解序列的后续项。在信息学竞赛中,递推算法...
本文将深入探讨二维熵阈值分割的快速递推算法,以及其在实际应用中的优势。 首先,我们要理解“熵”这个概念。在信息论中,熵被用来衡量信息的不确定性。在图像处理中,熵通常用来描述图像的复杂性或信息含量。二维...
数据结构与算法 递推算法,Devc++环境,数据结构基础算法
C++ 递推算法详解 递推算法是指在解决问题时,通过不断地将问题分解为更小的子问题,并使用递推关系来解决这些子问题,从而解决原来的问题的方法。这种算法的时间复杂度通常是指数级的,但可以通过使用memoization...