1. 请说明下列算法的时间复杂度。
(1)O(n)。外层for循环O(n);内层for循环O(1),因为是常数个循环;x+=2为O(1)。则总的时间复杂度为O(n)。
(2)O(n^2)。外层for循环O(n);内层for循环O(n);两者都是线性时间复杂度。x++为O(1)。则总的时间复杂度为O(n^2)。
2. 请说明下列算法的时间复杂度
你想问的具体问题是??
如果你是想问这个自定义函数运行的过程:
(1)
自定义函数接收来自主函数的参数
定义整型变量i,x=0
i=0
如果i<n+1
执行for括号里面的内容:for(j=1;j<8;j++)遇到for语句,同理
j=1,如果j<8,执行x+=2;然后执行for语句j++,再判断j<8,执行x+=2、、、、、、、、、
直到j<8不成立,跳出最里面的for语句
执行外面的for语句,i++
执行for括号里面的内容:for(j=1;j<8;j++)遇到for语句,同理
j=1,如果j<8,执行x+=2;然后执行for语句j++,再判断j<8,执行x+=2、、、、、、、、、
直到j<8不成立,跳出最里面的for语句
直到判断i<n+1条件否定
退出自定义函数,返回到主函数
这够详细了吧,同理(2)也是这样类似的过程,希望这是你要的答案,记得给点奖励我
3. 下列关于算法的说法中,正确的是
正确的说法是 D. 算法是解决问题过程所需的有限步骤。
算法的性质规定了算法必须满足以下几点:
1 具体(能翻译成机器指令)
2 明确(无歧义)
3 正确(对任何输入能给出正确的结果)
4 步数有限(任何情况下总能停机,不会陷入死循环)
4. 下列关于算法的说法中,正确的是()A.算法是某个问题的解决过程B.算法可以无限不停地操作下去C.
由算法的概念可知:
算法是某个问题的解决方法,而不是某个问题的解决过程,故A不正确;
算法是在有限个步骤内解决问题,不可以无限不停地操作下去,故B不正确;
算法的每一步操作都是明确的,算法执行后的结果是确定的,故C不正确;
解决某类问题的算法可能有多个,算法是不唯一的,故D正确.
故选D.
5. 下列关于算法的说法中,正确的是() A.算法就是一个问题的解题过程 B.一个算法只能解决一个
由算法的概念可知: 算法不是一个问题的解题过程,算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤. 或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题,故A,B错; 求解某一类问题的算法不是唯一的,故C正确; 算法的概念可知:算法是有限步,结果明确性,D是不正确的. 故选C. |
6. 下列算法的功能是什么
实现的功能:把L的第一个节点移动到最后一个节点的位置。这样看就能好理解了,加了一个大括号。
LinkList testl(LinkList L)
ListNode *p,*p;
if(L&&L->next)
{
q=L; /*保存L最初的,第一个节点位置,在后面需要用到*/
L=L->next;p=L;
while(p->next)
{
p=p->next;
} /*找L的最后节点位置*/
p->next=q;q->next=NULL;
return L;
}
7. 1.3 请说明下列算法的时间复杂度.
这个首先要明确一点,只用到比较的排序算法最低时间复杂度是O(nlogn),而像桶排这样的只需要O(R)(R为桶的大小)。
为了证明只用到比较的排序算法最低时间复杂度是O(nlogn),首先要引入决策树。
首先决策树是一颗二叉树,每个节点表示元素之间一组可能的排序,它予以京进行的比较相一致,比较的结果是树的边。
先来说明一些二叉树的性质,令T是深度为d的二叉树,则T最多有2^片树叶。
具有L片树叶的二叉树的深度至少是logL。
所以,对n个元素排序的决策树必然有n!片树叶(因为n个数有n!种不同的大小关系),所以决策树的深度至少是log(n!),即至少需要log(n!)次比较。
8. 简述以下算法的功能。
第一个算法是把无头结点单链表的第一个节点变到最后一个,使第二个节点变为头结点,原来的头结点变为最后一个。
第二个算法是把原来的单循环链表的一部分元素取出来,具体说就是从pa到pb前一个节点(包括pa而不包括pb)取出来,组成新的单循环链表。
9. 简述下列算法的功能
队列Q中的元素反转顺序。例如,设刚开始队列Q中元素为1、2、3、4,调用该方法后,队列Q中元素顺序变为4、3、2、1。
10. 分析下列算法的复杂度
答:主要看双重循环部分,外层循环执行n次,内层循环执行m次,总共执行次数为m×n次,对应时间复杂度为O(n^2)。