数据结构与算法Python版MOOC笔记及练习【二】

一、区分程序和算法

算法是对问题解决得分布描述,而程序是采用某种编程语言实现的算法。
同一个算法通过不同的编程语言能产生很多程序。
同一个算法采用不同的编程语言编写,放在不同的机器上运行,得到得运行时间不一样。

二、算法时间度量指标

一个算法所实施的操作数量或步骤数可作为独立具体程序、机器的度量指标,算法分析的目标是要找出问题规模会怎么影响到一个算法的执行时间(其实某些具体数据也会影响算法运行时间)

在这里插入图片描述

三、list和dict操作对比

在这里插入图片描述
80/20准则:80%的功能其使用率只有20%。(因此通常我们让最常用的操作性能最好,牺牲不太常用的操作)
在这里插入图片描述
更多python数据类型操作复杂度可以到python官网查看https://wiki.python.org/moin/TimeComplexity

四、课程练习(自己写的共16.00/19.00分,之后再填坑系列)

1单选(2分)‏判断下列代码段,关于的大O级别:​
‏test = 0
for i in range(n):
for j in range(n):
for k in range(i):
test = test + i * j

A.O(n*log(n))
B.O(n^3)
C.O(n)
D.O(n^2)

2单选(2分)‏判断下列代码段的大O级别:‎
‏test = 0
for i in range(n):
test = test + 1
for j in range(n):
test = test - 1
for k in range(n):
test = test * 1

A.O(n^3)
B.O(n)
C.O(n*log(n))
D.O(n^2)

3单选(2分)‌判断下列代码段的大O级别:‎
‌for i in range(n):
for j in range(i):
k = 2 + 2‎

A.O(n^3)
B.O(n^2)
C.O(1)
D.O(n)

4单选(2分)‍判断下列代码段的大O级别:‌
‍def function(n):
return 2

A.O(n)
B.O(1)
C.O(n^3)
D.O(n^2)

5单选(2分)‌以下是一个快速幂算法:‍
‌def pow(x, n):
if n0:
return 1
elif n
1:
return x
elif n%2==0:
return pow(xx, n//2)
else:
return pow(x
x, n//2)*x
问它对于n的大O级别。

A.O(log n)
B.O(1)
C.O(n)
D.O(nlog n)

6多选(3分)‏下面的列表操作中哪些是O(1)的?(假设列表alist足够长,不导致任何报错)‎
A.alist[10:16]
B.alist.pop()
C.alist.append(10)
D.alist.sort()

7多选(3分)‍下面的字典操作中哪些是O(1)的?
A.my_dict[‘’] += 1
B.‘’ in my_dict
C.my_dict[‘’] == 10
D.del my_dict[‘’]

8多选(3分)令n为问题规模,其中解决本问题的三个算法称为A,B,C,他们需要的总运算次数分别是:‍
A: 96+108n+24n2+12n3
B: 16+3n^48
C: 10080+168n+7n^2*log(n)‍
三个算法的时间复杂度的大O级别中,以下表述正确的有:‍

A.C算法的时间复杂度最小
B.A算法和B算法的时间复杂度相同

C.C算法的时间复杂度最大
D.B算法比A算法的时间复杂度更大

OJ的适应性测试

1.A/B问题(3分)
题目内容:
给出两个整数,输出他们的商
可以使用以下语句实现整数n的输入:
n=int(input())

输入格式:
两行,每行一个整数

输出格式:
输出一个数,即他们的商,保持小数点后3位(%.3f)
如果除数为0,则输出:NA(两个字母)

输入样例:
1
2
输出样例:
0.500

输入样例2:
2
0
输出样例2:
NA

a = int(input())
b = int(input())
if b == 0:
    print("NA")
else:
    c = a/b
    print("%.3f" % c)

2.打印实心矩形(3分)
题目内容:
给出行数和列数,打印一个由*号构成的实心矩形。

输入格式:
一行,用空格隔开的两个整数m、n

输出格式:
由*号构成的m行n列实心矩形

输入样例:
3 2

输出样例:

**
**
**
m,n = list(map(int,input().split()))
for i in range(m):
    print('*'*n)

3.找到最小的数(3分)
题目内容:
给定若干个整数,找出这些整数中最小的,输出。

输入格式:
一行,由空格隔开的一系列整数,数量2个以上。

输出格式:
最小的整数

输入样例:
1 2 3 4 5 6 7 8 9 0

输出样例:
0

输入样例:
-1 2 0

输出样例:
-1

alist = list(map(int, input().split( )))
alist.sort()
b = alist.pop(0)
# b = min(alist)
print(b)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值