`

经典算法问题的Java实现(转)

 
阅读更多

1.数值转换(System Conversion) 
1.1 r进制数 
  数N的r进制可以表示为: 
 

1.2 十进制转换为r进制 
  十进制数N和其他r进制数的转换是计算机实现计算的基本问题,基解决方案很多,其中一个简单算法基于下列原理: 
  N = (N div d) * r + N mod r (其中: div为整除运算,mod为求余运算) 
 
  问题:如何将非负十进制(Decimal)整数转化为八进制数(Octonary Number)? 
  将十进制转化为r进制: 

Java代码  收藏代码
  1. /** 
  2.  * 非负十进制整数转换为r进制数 
  3.  * @param n 待转换的十进制数 
  4.  * @param r 进制数(基数) 
  5.  * @return 返回转换后对应r进制数各位数字。 
  6.  */  
  7. byte [] dec2RNumber(int n,byte r) {  
  8.     if(n < 0 || r < 0) {  
  9.         throw new IllegalArgumentException(" the parameter is valid!");  
  10.     }  
  11.     Stack<Byte> s = new Stack<Byte>();  
  12.     while( n != 0){  
  13.         s.push(Byte.valueOf((byte) (n%r)));//求余  
  14.         n = n/r;//求商  
  15.     }  
  16.     byte [] rr  = new byte[s.size()];  
  17.     for (int i = 0; i < rr.length; i++) {  
  18.         rr[i] = s.pop();  
  19.     }  
  20.     return rr;  
  21. }  


  十进制非负整数转换为八进制: 

Java代码  收藏代码
  1. dec2RNumber(1348,8)  


2.斐波那契数列(Fibonacci Sequence) 
2.1 斐波那契数列是以递归的方法来定义: 
 
  斐波那契数列是从第0项和第1项开始,之后的项等于其前面相邻两项之和。 
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,...... 

2.2 兔子生育问题: 

  • 第一个月初有一对刚诞生的兔子
  • 第二个月之后(第三个月初)它们可以生育
  • 每月每对可生育的兔子会诞生下一对新兔子
  • 兔子永不死去

2.3 兔子问题的分析: 

  斐波那契数列的java非递归实现: 

Java代码  收藏代码
  1. int Fibs(int n) {  
  2.     if(n < 0) {  
  3.         throw new IllegalArgumentException(" the parameter is valid!");  
  4.     }  
  5.     int n1 = 0;//F(n-2)  
  6.     int n2 = 1;//F(n-1)  
  7.     int r = n1;//F(n)  
  8.     if(n == 1) {  
  9.         r = n2;  
  10.     }  
  11.     for (int i = 2; i <= n; i++) {  
  12.         r = n1 + n2 ;//F(n)=F(n-1)+F(n-2)  
  13.         n1 = n2;  
  14.         n2 = r;  
  15.     }  
  16.     return r;  
  17. }  



参照资料:http://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97#.E6.87.89.E7.94.A8

3.秦九韶算法求一元n次多项式的值(Compute Polynomial's value) 
3.1 秦九韶算法介绍: 
  秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。在西方被称作霍纳算法。 
  秦九韶算法: 
   
  一般地,一元n次多项式的求值需要经过[n(n+2)]/2次乘法和n次加法,而从上面的演算可以看出秦九韶算法只需要n次乘法和n次加法。极大地降低了算法复杂度。 
  参照:http://zh.wikipedia.org/wiki/%E9%9C%8D%E7%B4%8D%E6%BC%94%E7%AE%97%E6%B3%95 

3.2 秦九韶算法实现: 

Java代码  收藏代码
  1. /** 
  2.  * 秦九绍算法求一元n次多项式的值 
  3.  * f(x) = a[0]*x^n + a[1]*x^(n-1) + ... + a[n] 
  4.  * @param a 系数 
  5.  * @param x 基数 
  6.  * @return 
  7.  */  
  8. double qinjiushao(double [] a ,double x) {  
  9.     double v = a[0];  
  10.     for (int i = 1; i < a.length; i++) {  
  11.         v = v * x + a[i];  
  12.     }  
  13.     return v;  
  14. }  



3.3 秦九韶算法应用: 
  在Java中字符串的hashcode计算中就用到了秦九韶算法。其中基数为31(质数),系数为字符串对应的ASCII值。 

Java代码  收藏代码
  1. public int hashCode() {  
  2. int h = hash;  
  3. if (h == 0) {  
  4.     int off = offset;  
  5.     char val[] = value;  
  6.     int len = count;  
  7.   
  8.         for (int i = 0; i < len; i++) {  
  9.             h = 31*h + val[off++];  
  10.         }  
  11.         hash = h;  
  12.     }  
  13.     return h;  
  14. }  


  测试: 

Java代码  收藏代码
  1. System.out.println("abc".hashCode());  
  2.  结果:96354 = ax^2 + bx +c //其中( [a,b,c]=[97,98,99];x =31)  
  3.             = 97 * 961 + 98 * 31 +99  
分享到:
评论

相关推荐

    经典算法的Java实现.zip

    "经典算法的Java实现.zip"这个压缩包包含了一个PDF文档和一个readme文本,提供了Java语言实现的经典算法实例。 首先,我们要了解“排序”在计算机科学中的重要性。排序算法是数据处理的基础,它允许我们将一组无序...

    几个推荐算法的java实现

    本项目提供了一些推荐算法的Java实现,包括slopeone、SVD(奇异值分解)以及基于物品邻接的SVD(ItemNeighborSVD)。下面我们将详细探讨这些算法及其在Java中的实现。 1. **slopeone**: - Slope One是一种简单的...

    经典算法 C语言和Java实现

    经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法...

    经典算法问题的java实现<二>

    【标题】:“经典算法问题的Java实现&lt;二&gt;” 在这个主题中,我们将深入探讨Java编程语言在解决经典算法问题上的应用。算法是计算机科学的基础,它们是解决问题的步骤和方法,而Java作为一种强大的面向对象的语言,...

    装载问题-分支限界算法-java实现

    装载问题-分支限界算法-java实现 装载问题 装载问题是一种经典的组合优化问题,目的是在有限的容量内装载尽可能多的物品,以达到最大化总重量或总价值。装载问题有多种变种,包括0/1背包问题、分支限界问题、动态...

    BP算法的java实现

    BP算法的JAVA实现,BP神经网络的数学原理及其算法实现,实验使用IRIS数据集,BP神经网络,BP即Back Propagation的缩写,也就是反向传播的意思,顾名思义,将什么反向传播?文中将会解答。不仅如此,关于隐层的含义...

    道格拉斯-普克抽稀算法,java 实现

    道格拉斯-普克抽稀算法,java 实现

    FP树增长算法的java实现

    在提供的`fpgrowth`文件中,可能包含了FP树算法的具体Java实现代码,包括类定义、方法实现以及可能的数据示例。通过阅读和理解这段代码,我们可以深入学习FP树算法的内部工作机制,并将其应用到实际的数据挖掘项目中...

    经典算法问题的java实现<一>

    在本资源中,我们关注的是"经典算法问题的java实现&lt;一&gt;",这通常涉及到计算机科学中的基础算法,特别是那些用Java编程语言实现的。这些算法是解决各种计算问题的关键,包括排序、搜索、图论、动态规划等。Java作为一...

    经典算法Java实现

    这些经典算法Java实现不仅有助于提升编程技能,而且对解决实际问题大有裨益。无论是面试准备,还是项目开发,熟悉并掌握这些算法都将大大提高开发者的能力。通过深入学习和实践,你将能够更好地理解和运用这些算法,...

    祖冲之密码算法Java实现

    9. **性能优化**:虽然祖冲之算法本身已经设计得很高效,但在Java中实现时,仍需要注意内存管理和计算性能,以适应可能的大规模数据加密需求。 10. **文档编写**:为了方便其他开发者理解和使用你的实现,需要编写...

    遗传算法经典Java实现

    总之,这个“遗传算法经典Java实现”提供了一个实用的工具,帮助开发者理解和应用遗传算法,解决实际问题。通过学习和实践这个实现,不仅可以掌握遗传算法的基础知识,还能提升在Java编程和优化问题解决方面的能力。

    DBSCAN聚类算法java实现

    java版的DBSCAN聚类算法实现,是典型的算法思路实现,遍历未访问的所有点,如果是核心点,就新建一个簇,然后遍历其邻域内的所有点集A,不断扩展,如果簇内的点时核心点,就将其邻域所有点纳入点集A,并从点集移除已...

    java经典算法汇总.pdf

    Java经典算法汇总.pdf中提供了多种排序算法的实现,包括冒泡排序、选择排序和插入排序。这些算法都是Java语言中最基本和最常用的排序算法。 冒泡排序算法 冒泡排序算法是一种简单的排序算法,它通过反复比较和交换...

    Apriori算法 java实现

    `apriori.java`是Apriori算法的Java实现文件。这个文件可能包含了以下关键部分: 1. 数据预处理:从Excel文件中读取数据,转换成项集(如商品列表)。 2. 支持度计算:定义一个函数来计算项集的支持度,这是评估项集...

    simhash算法的java实现simhash-java.zip

    simhash 算法的 java 实现。特点计算字符串的 simhash通过构建智能索引来计算所有字符串之间的相似性,因此可以处理大数据使用使用输入文件和输出文件运行 Maininputfile 的格式(参见 src / test_in):一个文件每...

    JAVA实现的A*算法

    利用JAVA语言编程实现的经典A*算法,复制到eclipse即可运行

    java中的经典算法经典算法

    在"AlgorithmGossip"这个压缩包中,可能包含了这些算法的Java实现代码、示例和解释,对于学习和提升Java算法能力非常有价值。深入理解和掌握这些算法,不仅可以提升编程技巧,还能帮助解决实际问题,提升工作效率。...

    java国密算法实现

    总的来说,Java国密算法实现涉及了椭圆曲线加密和哈希函数两大核心概念,通过合理运用这些算法,可以构建安全可靠的加密通信和数据保护系统。在具体编程时,需要对算法原理有深入理解,并熟练掌握相关库的使用,以...

    各种算法的java实现

    在《各种算法java实现.docx》这个文档中,你可能会找到以上算法的详细解释和Java代码示例。通过学习这些内容,不仅可以加深对算法的理解,还能提升Java编程能力,对日后的软件开发工作大有裨益。对于初学者来说,这...

Global site tag (gtag.js) - Google Analytics