1、数据结构和算法的关系:
(1)数据结构是算法的基础
(2)算法的操作对象是数据结构,在设计算法的时候要构建合适这种算法的数据结构
(3)数据结构设计主要是选择数据的存储方式(数组或链表),算法设计是在选定的数据结构上设计一个满足要求的好的算法
(4)数据结构关注的是数据的逻辑结构、存储结构、基本操作,而算法关注的是如何在数据结构的基础上解决实际问题
2、什么是算法
算法是求解问题的一系列步骤,用来将输入的数据转换为输出结果。
3、算法的重要特性:
(1)有限性:执行有限步之后结束。
(2)确定性:每一条指令无二义性。
(3)可行性:每一条运算都能精确地执行。
(4)输入性:一个算法有零个或多个输入。
(5)输出性:一个算法有一个或多个输入。
4、证明以下关系成立:
(1)
(2)
要证明关系成立,即,需要找出三个正常量c1,c2和n0,使得当n>=n0的时候,满足c1(n的平方)<=式子<=c2(n的平方)
5、
6、
7、【ACM调练题】3n+1问题:从整数n开始如果n为偶数,把它除以2;如果n为奇数,把它乘3加1,用新得到的值重复上述步骤,直到n=1时停止。例如n=22时得到同序列是22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1.对于任意整数n,该算法总能终止于n=1,这个猜测对于至少1000000内的整数都是正确的。对于给定的m,该序列的元素(包括1)个数称为n的循环节长度。请计算 i 到 j(包含 i 和 j )之间的整数中,循环节长度的最大值。
输人:每行包含两个整数 i 和 j 。所有整效大于0,小于1 000 000
给出:对于每对整数 i 和 j,按原来的顺序输出 i 和 j,然后输出两者之间的整数中的最大循环节长度,它们之间用单个空格分隔,且在同一行输出。对于读入的每一组数据,在输
中应位于单独的一行。
输入样本:
1 10
100 200
201 210
900 1000输出结果:
1 10 20
100 200 125
201 210 89
900 1000 174
核心代码(求长度):
int cycle(int i,int j){ int k,count=0,maxc=0; for(k=i;k<=j;k++){//两个数之间的数字依次判断比较 while(k!=1){ if(k%2==0)//偶 数 k=k/2; else//奇数 k=3*k+1; count++; } if(maxc!=0)//count大于 0 maxc=count; } return maxc; }