2016/01/29 13:56
一.算法的有穷性
1.序列Hailstone(n)={1} n<=1
{n}UHailstone(n/2) n偶数
{n}UHailstone(3n+1) n奇数
2.Hailstone(42)= {42,21,64,32,...,1}
3.int hailstone(int n){//计算序列Hailstone(n)的长度
int length = 1;//从1开始,一下按定义逐步递推,并累计步数,直至n=1
while(1<n){(n%2)?n=3*n+1:n/=2;length++;}
return length;}
4.Hailstone(7)={7,22,11,34,17,552,26,13,40,20,10,5,16,...,1}
Hailstone(27)={27,82,41,124,62,31,94,47,142,71,214,107,...}
5.对于任意的n,算法总有|Hailstone(n)|<∞?
6.算法的正确性,确定性,可行性,有穷性。并不是所有的程序都是算法,比如上图中的Hailstone(),到目前为止仍然没有发现n使得程序在while()里死循环,但也没有确定所有的n都可以使得程序返回,所以这个程序不一定是算法。
7.循环和级数
for(int i =0;i<n;i++)
for(int j=0;j<i;j+=2013)
o1operation(i,j);
算术级数:...
for(int i= 1;i<n;i<<=1)
for (int j = 0;j<i;j++)
o1operation(i,j);
8.数组倒置
*任意数组A[m,n),将其前后颠倒
统一接口:void reverse(int* A,int lo,int hi);
*递归版
if()//问题规模的奇偶性不变,需要两个递归基
{swap(A[lo],A[hi]);reverse(A,lo+1,hi-1);}
*迭代原始版
next:
if(lo<hi)
{swap(A[lo],A[hi]);lo++;hi++;goto next;}
*迭代精简版
while(lo<hi)swap(A[lo++],A[hi--]);