`

Tribonacci 数字序列的计算

阅读更多
/**  
 * 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开发-数字编码,数字序列,数字表示

    在MATLAB开发中,涉及数字编码、数字序列和数字表示的知识点广泛且深入。这些概念在混沌博弈理论、离散傅立叶变换以及系统建模等领域有着重要应用。以下是关于这些主题的详细解释: 1. **数字编码**:数字编码是指...

    基于FPGA的数字序列检测系统的建模与仿真.pdf

    数字序列检测系统是一种在数字通信中广泛使用的技术,主要用于检测数据流中的特定模式或序列。在数字序列检测系统中,FPGA(现场可编程门阵列)因其高性能、可编程性及灵活性,成为实现这类系统的重要硬件平台。本文...

    图像情境下的数字序列逻辑学习.pdf

    【图像情境下的数字序列逻辑学习】这一研究主要探讨如何在图像环境中进行数字序列的逻辑学习,这是一种解决未知数字和规则模式构建问题的新方法。研究者梁慧、曹峰、钱宇华等人通过构建四个大型数据集——Linear序列...

    数字序列补零后的频谱变化

    DFT 可用于计算序列的频谱信息,包括幅度谱和相位谱。 #### 补零及其对频谱的影响 补零是指在原始序列的前端或后端添加零值样本。根据补零的位置不同,可以分为前端补零、后端补零和前后两端同时补零。 1. **后端...

    python把0到n-1这些数随机打乱得到的一个数字序列

    get unique random integer from 0, ... 是把0到n-1这些数随机打乱得到的一个数字序列 类似matlab中的randperm函数,只是matlab是从1到n python 随机矩阵,随机整数矩阵 见:https://github.com/gongchunye/randomperm

    数字信号处理 计算两个序列的线性卷积Matlab算法

    本示例主要介绍了如何使用Matlab计算两个序列的线性卷积,通过具体代码来演示这一过程。 首先,让我们深入理解线性卷积的概念。线性卷积是将一个序列(称为输入序列x[n])与另一个序列(称为滤波器或 impulse ...

    基于Keras和TensorFlow的SVHN四位数字序列预测CNN设计源码

    本项目是基于Keras和TensorFlow的SVHN四位数字序列预测CNN设计源码,主要使用Python进行开发。项目共包含52个文件,其中PNG图片文件43个,Python源代码文件4个,MP4视频文件2个,Markdown文档文件1个,PDF文档文件1...

    FFT序列周期计算

    根据快速傅里叶变换计算方法,编写的计算长时间序列的周期代码,计算简便快捷

    基于Python自相关法时间序列的时间延迟计算

    在时间序列分析中,时间延迟计算是一个关键步骤,特别是在研究混沌系统和进行故障诊断时。本文将深入探讨如何使用Python实现自相关法来确定时间序列的时间延迟。自相关函数是衡量一个时间序列与自身不同时间间隔滞后...

    基于时间序列的李雅普若夫指数计算

    基于时间序列的李雅普入夫指数求解是目前的难点,我们可以通过非线性映射来获得其雅克比矩阵来求解李雅普入夫指数

    行业文档-设计装置-一种基于移动终端的全数字序列存储方法及系统.zip

    2. **移动终端处理**:移动设备上的处理器和内存资源有限,因此,设计适合移动环境的序列存储方法需要优化计算效率和内存利用率,同时确保数据的准确性和完整性。 3. **全数字存储**:全数字存储是指所有数据都以二...

    基带数字信号m序列的扩频以及解扩

    本项目聚焦于基带数字信号的m序列扩频及其解扩过程,这是扩频通信系统的核心部分。以下是关于m序列、DSSS直扩、FIR匹配滤波器以及解扩的相关知识点: 1. **m序列**:m序列(Maximum Length Sequence)又称为伪随机...

    N点离散傅里叶变换同时计算两个N点实序列的离散傅里叶变换

    ### N点离散傅里叶变换同时计算两个N点实序列的离散傅里叶变换 #### 知识点概述 在数字信号处理领域中,离散傅里叶变换(Discrete Fourier Transform, DFT)是一种重要的数学工具,用于将时间域的信号转换到频域。...

    MATLAB编写计算有限长序列的DFT和IDFT函数

    在数字信号处理领域,离散傅里叶变换(DFT)和逆离散傅里叶变换(IDFT)是至关重要的工具。它们被广泛应用于频谱分析、滤波器设计、图像处理等多个方面。MATLAB作为一款强大的数学计算软件,提供了便捷的接口来计算...

    数字序列中某一位的数字.md

    数字序列中某一位的数字.md

    数字信号处理实验序列的DTFT

    数字信号处理实验序列的DTFT 数字信号处理实验序列的DTFT是数字信号处理课程的基本实验之一。该实验的主要目标是使用MATLAB仿真实验平台,通过编写子函数计算给定序列的DTFT,并对长度为N的矩形序列进行频谱分析。 ...

    计算两个序列的线性卷积程序

    本主题将深入探讨如何在MATLAB环境下计算两个序列的线性卷积。MATLAB是一个强大的数学软件,提供了丰富的函数和工具箱,使得进行这类计算变得非常便捷。 线性卷积是两个有限序列的乘积在时间域或频域内的一种加权...

    基于序列到序列学习的数字加法.py

    基于序列到序列学习的数字加法的源码

    sequence_m-sequence_5阶m序列_gold_goldsequence_m序列_

    在数字通信和信号处理领域,M序列(M-sequence)是一种重要的伪随机噪声(PN)序列,具有良好的统计特性,广泛应用于同步、编码、检测等多个方面。标题中的"5阶m序列"指的是生成器的反馈多项式阶数为5的M序列。这种...

Global site tag (gtag.js) - Google Analytics