01算法的概念

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博主哦!今天更新的是《01算法的概念》

目录

算法的概念

算法的五大特征

算法应用实际案例

算法效率衡量标准


算法的概念

如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器。数据结构和算法则是兵法。如果我们常看兵法,便可以做到胸有成竹,有时会事半功倍!同样,如果我们常看算法,我们写程序时也能游刃有余、明察秋毫,遇到问题时亦能入木三分、迎刃而解。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等等)

算法的五大特征

  • 输入性:有零个或者多个外部量作为算法的输入
  • 输出性:算法至少有一个量作为输出
  • 确定性:算法的每条指令清晰,无歧义
  • 有穷性:算法的每条指令的执行次数有限,执行每条指令时间也有限
  • 可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后就可完成

算法应用实际案例

【示例】如果a+b+c= 1000,且a^2 +b^2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合:

没学算法前:三次暴力循环

import time
begin_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:",a,b,c)
end_time = time.time()
print("这段代码一共执行了:",end_time-begin_time,"s")

01算法的概念_第1张图片

学过算法之后:通过abc关系直接生成c:

import time
begin_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:",a,b,c)
end_time = time.time()
print("这段代码一共执行了:",end_time-begin_time,"s")

01算法的概念_第2张图片

可以看到之前用暴力循环求解用时为260多秒,用第二种算法用时为1秒多,所用时间大大减少。

算法效率衡量标准

单靠时间值绝对可信吗?如果同一段程序放到不同配置上面的电脑去运行,其运行时间可能也会相差很多,但这是同一段程序,其效率是一定的。程序的运行离不开计算机环境包括硬件和操作系统,这些客观原因会影响程序运行的速度并反应在程序的执行时间山。那么如何才能客观的评判一个算法的优劣呢?

这就是后面要学习的时间复杂度空间复杂度


你可能感兴趣的:(算法系统学习,蓝桥杯,算法,算法学习,python,笔记)