zoukankan      html  css  js  c++  java
  • java数据结构和算法--------第六章

    三角数字

    给定一串数字1,3,6,10,15,21.......是否能推出后面几项的值呢。

    显然第N项的值等于第N-1项+N

    a[N]=a[N-1]+N该种数列被称为三角形数字。

    由此可以根据规律计算第N项的值。可以使用循环的方法来计算第N项的值

    int triangle(int n)

    {

       int total=0;

       while(n>0)

         {

             total=total+n;

             --n;

          }

        return total;

    }

    使用循环的方法来算挺好,但是可以考虑用递归,正如两幅图之间对比的那样。

    int triangle(int n)

    {

       return (n+triangle(n-1));

    }

    但是显然上面的程序永远不会结束,陷入了一个庞氏骗局,因为没有终止的条件。

    int triangle(int n)

    {

       if(n=1)

       return 1;

    else

       return (n+triangle(n-1));

    }

    为了清楚地观察到递归函数的执行过程,程序中加入了测试语句。可以看到整个递归的调用过程。

    通过上面的三幅图看到整个递归程序的执行过程。

    阶乘

    阶乘实际上就是把上面三角形的问题,稍微改变一下。

    递归的二分查找

    下面两幅图对比,可以看到我们将递归插入到了二分查找中

    图二实质上是一种分治算法,把原来的大问题,细分为一个个的小问题。这样小问题便于求解。

    汉诺塔问题

    递归的算法

    归并排序

    冒泡排序,插入排序,选择排序三者的时间复杂性是O(N^2)

    归并排序的时间复杂性是O(N*lgN),显然它比前面几个都要快,但是归并排序有一个缺点

    需要较大的存储空间。

    归并两个有序数组

    归并算法的中心是归并两个各自有序的数组,将其合成一个全新的按大小顺序排列的数组。

    一般的归并排序,两个指针指向各自的元素,小的进来,指针后移。直到其中一方数据为空。复制另一方剩余的数据。

    通过归并进行排序

  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/6434821.html
Copyright © 2011-2022 走看看