毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

反转表算法示例 第2页

更新时间:2012-6-30:  来源:毕业论文
数学归纳法,先口算+笔算,得到规律,再实验,也有人称“驴式思考”: 

1,从输入2 3 6 4 0 2 2 1 0 看,第一个数字是2,那么得到了a是{??1?????? },因为1前边有2个比1大的,所以1只能排在第3个。
  //得到了a是{??1?????? }
2,第二个数字是3,那么得到了a是{??1?2???? }
依次口算,用笔记录得到
a是{??1?2???3 }
得到了a是{??1?2?4?3 }
得到了a是{5?1?2?4?3 }
得到了a是{5?1?264?3 }
得到了a是{5?1?26473 }
得到了a是{5?1?26473 }
3,根据规律,心中有个大概的公式,尝试写代码

using System;
namespace ConsoleApplication3
{
  class Program
  {
  static void Main(string[] args)
  {

  int[] b = new int[] { 2, 3, 6, 4, 0, 2, 2, 1, 0 };
  int n = b.Length;
  int[] a = new int[n];

  for (int i = 0; i < n; i++)
  {
  //假设索引是这个数字
  int index = b[i] ;
  for (int j = 0; j <= index ; j++)
  {
  if (a[j]!=0)
  {
  index++;
  }
  }
  a[index] = i + 1;
   
  }
  for (int i = 0; i < a.Length; i++)
  {
  Console.WriteLine(a[i]);
  }
  Console.ReadLine();

  }
  }
}

//实验成功


数学归纳法是常用的一种证明算法正确性的方法。
同样的,可以作为一种常见方法应用于程序正确性的证明 
1.初始条件成立 
2.程序执行过程中每一步符合某个不变式,这个不变式通常与程序期望结果符合的。
3.程序能够终止,并且终止的时候不变式的成立能够 和程序的期望结果符合。
(例如:一个满头秀发的人,不管他掉多少根头发,都不会不是秃头,这样就是悖论,因为不满足第3条)

这是很重要的思维方式,希望LZ以后多加利用,例如:
排列: 从n个对象中选出m个作为一种排列, 有A(n,m)种; 当m=n时,相当于求n个对象的全排列, 有n!种
组合: 从n个对象中选出m个作为一种组合, 有C(n,m)种; 当m=n时,只有一种.
这样的思路就可以写出排列和组合的输出算法。


归纳法的思想是很强的, c 程序书上, 简单的如求n的阶乘, 复杂的如汉诺塔. 特别是汉诺塔,九连环的问题, 
不用递归的方法,很难解决这个古典难题. 但是汉诺塔的递归程序只有不到6,7行.
(这里不讨论非递归可以解决的问题和递归引起的时间空间开销)

以上程序复杂度是O(n*Σ(bi))
至于Σ(bi)是什么规律,我现在还没想清楚,这个题目是n=9,Σ(bi)=20
当n趋向无穷大的时候,可能最终总的复杂度接近O(n*n)吧,可以用大量数据画一下曲线观察一下。

上一页  [1] [2] 

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。