您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法(算法特点,时间复杂度)

2020-03-08 11:43 906 查看

引入

例题:如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

#枚举法
import time
start_time = time.time()
for a in range(0,1001):
for b in range(0,1001):
for c in range(0,1001):
if a+b+c==1000 and a**2 +b**2 == c**2:
print("a,b,c:%d,%d,%d"%(a,b,c))
end_time = time.time()
print("times:%d"%(end_time-start_time))
print("finished")

算法的五大特性

  1. 输入: 算法具有0个或多个输入
  2. 输出: 算法至少有1个或多个输出
  3. 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步 骤可以在可接受的时间内完成
  4. 确定性:算法中的每一步都有确定的含义,不会出现二义性
  5. 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
import time
start_time = time.time()
for a in range(0,1001):
for b in range(0,1001):
c = 1000-a-b
if a+b+c==1000 and a**2 +b**2 == c**2:
print("a,b,c:%d,%d,%d"%(a,b,c))
end_time = time.time()
print("times:%d"%(end_time-start_time))
print("finished")

时间复杂度

渐进函数:就是把系数和常数去掉(去掉所有相关系数,留下最特征的东西)

时间复杂度几条基本计算规则

  1. 基本操作,即只有常数项,认为其时间复杂度为O(1)
  2. 顺序结构,时间复杂度按加法进行计算
  3. 循环 结构,时间复杂度按乘法进行计算
  4. 分支结构,时间复杂度取最大值
  5. 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
  6. 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

时间复杂度之间的关系:

list列表时间复杂度

dic字典时间复杂度

算法与数据结构的区别

数据结构只是静态的描述了数据元素之间的关系。

高效的程序需要在数据结构的基础上设计和选择算法。

程序 = 数据结构 + 算法

总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Taiiiii 发布了16 篇原创文章 · 获赞 0 · 访问量 427 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: