/**
* Tribonacci 数字序列的计算。<br>
* 规则是T(n) = T(n - 1) + T(n - 2) + T(n -3)<br>
* 其中T(0) = T(1) = 1,T(2) = 2<br>
* 不考虑整数的溢出问题。
*
* @author 老紫竹(java2000.net, laozizhu.com)
*/
public class TribonacciNumber {
public static void main(String[] args) {
TribonacciNumber tn = new TribonacciNumber();
int number = 32;
long begin = System.currentTimeMillis();
System.out.println(tn.calTribonacci(number));
long end = System.currentTimeMillis();
System.out.println(end - begin);
begin = System.currentTimeMillis();
System.out.println(tn.calTribonacciCache(number));
end = System.currentTimeMillis();
System.out.println(end - begin);
}
/**
* 普通算法,有重复计算。
*
* @param n
* @return
*/
public int calTribonacci(int n) {
if (n == 0) {
return 1;
}
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
return calTribonacci(n - 1) + calTribonacci(n - 2) + calTribonacci(n - 3);
}
// 缓冲区
private int[] nums = new int[3];
{
nums[0] = 1;
nums[1] = 1;
nums[2] = 2;
}
// 当前最大的缓冲数字
private int maxCached = 2;
/**
* 带缓冲的计算,减少了大量的重复计算。<br>
* 效率极大提高。
*
* @param n
* @return
*/
public int calTribonacciCache(int n)
{
// 小于的,直接用缓冲
if (n <= maxCached) {
return nums[n % 3];
}
// 否则计算
nums[n % 3] = calTribonacciCache(n - 3) + calTribonacciCache(n - 2) + calTribonacciCache(n - 1);
maxCached = n;
return nums[n % 3];
}
}
这个算法的核心思想是在于:
把num[n]存储了计算的值!所以以后用时就不用再 计算了!!
计算了 T[5]那么 计算T【6】可以直接用!!
这个算法很强!!
分享到:
相关推荐
在MATLAB开发中,涉及数字编码、数字序列和数字表示的知识点广泛且深入。这些概念在混沌博弈理论、离散傅立叶变换以及系统建模等领域有着重要应用。以下是关于这些主题的详细解释: 1. **数字编码**:数字编码是指...
数字序列检测系统是一种在数字通信中广泛使用的技术,主要用于检测数据流中的特定模式或序列。在数字序列检测系统中,FPGA(现场可编程门阵列)因其高性能、可编程性及灵活性,成为实现这类系统的重要硬件平台。本文...
题目要求编写一个名为`findNthDigit`的函数,该函数接收一个整数`n`作为参数,返回数字序列中的第`n`个数字。这个序列由0到9的数字依次组成,形成一个无限长的字符串,如"012345678910111213..."。 首先,我们需要...
通过传入序列计算移动平均线序列。 使用方法: static funcMa<double> ma60; static funcMa<double> ma2; static funcMa<double> ma22; static vector<double> C;//收盘价序列 vector<double> ma60temp = ma60....
C/C++,数字序列——计算伯努利数(Bernoulli Number)的计算方法与源程序
DFT 可用于计算序列的频谱信息,包括幅度谱和相位谱。 #### 补零及其对频谱的影响 补零是指在原始序列的前端或后端添加零值样本。根据补零的位置不同,可以分为前端补零、后端补零和前后两端同时补零。 1. **后端...
主要进行基因序列分析计算。OpenGL架构显示。用户在此原码基础上还可进行二次开发。
本示例主要介绍了如何使用Matlab计算两个序列的线性卷积,通过具体代码来演示这一过程。 首先,让我们深入理解线性卷积的概念。线性卷积是将一个序列(称为输入序列x[n])与另一个序列(称为滤波器或 impulse ...
根据快速傅里叶变换计算方法,编写的计算长时间序列的周期代码,计算简便快捷
C/C++,数字序列——查找第n个鲍姆甜序列(Baum Sweet Sequence)的计算方法与源程序
在时间序列分析中,时间延迟计算是一个关键步骤,特别是在研究混沌系统和进行故障诊断时。本文将深入探讨如何使用Python实现自相关法来确定时间序列的时间延迟。自相关函数是衡量一个时间序列与自身不同时间间隔滞后...
数字信号处理时间序列相乘
本项目聚焦于基带数字信号的m序列扩频及其解扩过程,这是扩频通信系统的核心部分。以下是关于m序列、DSSS直扩、FIR匹配滤波器以及解扩的相关知识点: 1. **m序列**:m序列(Maximum Length Sequence)又称为伪随机...
2. **移动终端处理**:移动设备上的处理器和内存资源有限,因此,设计适合移动环境的序列存储方法需要优化计算效率和内存利用率,同时确保数据的准确性和完整性。 3. **全数字存储**:全数字存储是指所有数据都以二...
### N点离散傅里叶变换同时计算两个N点实序列的离散傅里叶变换 #### 知识点概述 在数字信号处理领域中,离散傅里叶变换(Discrete Fourier Transform, DFT)是一种重要的数学工具,用于将时间域的信号转换到频域。...
在数字信号处理领域,离散傅里叶变换(DFT)和逆离散傅里叶变换(IDFT)是至关重要的工具。它们被广泛应用于频谱分析、滤波器设计、图像处理等多个方面。MATLAB作为一款强大的数学计算软件,提供了便捷的接口来计算...
基于时间序列的李雅普入夫指数求解是目前的难点,我们可以通过非线性映射来获得其雅克比矩阵来求解李雅普入夫指数
数字序列中某一位的数字.md
数字信号处理实验序列的DTFT 数字信号处理实验序列的DTFT是数字信号处理课程的基本实验之一。该实验的主要目标是使用MATLAB仿真实验平台,通过编写子函数计算给定序列的DTFT,并对长度为N的矩形序列进行频谱分析。 ...