飞艇技巧_《从入门到放弃》数据结构和算法 1

  • 时间:
  • 浏览:1

1. 简介 

  最近肯能快过年了,还要很忙碌了,人心浮动,好多好多 都请假了,现在终于有时间来系统学习下和恶补一下常见数据价值形式和算法的知识,好多好多 ,还是通过记录笔记放入博客的辦法 来督促被委托人学习。一齐和小伙伴们分享一下学习心得与体会。算法对于好多好多 系统进程池池员都接触不都也能的,何况是另另三个小 多 测试人员。已经 面试过程中,多几只少还要算法题的面试。好多好多 ,学习算法,短期来看是为了跳槽准备,长期来看,是锻炼另另三个小 多 人处理难题的思路的提升的另另三个小 多 途径。

2. 算法的引入

  来看另另三个小 多 难题:肯能 a+b+c = 800, 且 a^2 + b^2 = c^2(勾股定理),怎么求出所有a b c的组合。

2.1 难题分析:

  上端告诉另另三个小 多 条件,从数学角度来说,上端有三个小未知数,只另另三个小 多 多表达式条件,当我们 第一反应是转换成二元二次方程来解答。这里当我们 是计算机通过代码来处理难题。字面意思只要 a的取值范围是0到800, b的取值范围是0到800, c的取值范围是0到800, 已经 换成题目的另另三个小 多 表达式条件,利用for嵌套循环,计算机肯定能帮当我们 找出a b c的取值。

2.2 代码实现:

  根据上端的分析,python代码实现如下:

2.3 参考代码:

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放入第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2020-1-02
@author: 北京-宏哥
Project:《从入门到放弃》数据价值形式和算法 1- 算法的引入和算法时间复杂化度
'''
# 3.导入模块

import time

start_time = time.time()
for a in range(0, 801):
    for b in range(0, 801):
        for c in range(0, 801):
            if a + b + c == 800 and a**2 + b**2 == c**2:
                print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time()
print(end_time - start_time)

2.4 运行结果:

  我我实在上端代码思路也是用到了另另三个小 多 辦法 ,叫枚举法,只要另另三个小 多 另另三个小 多 列出来去尝试,不行,换下另另三个小 多 值继续去匹配。

  运行代码后,控制台打印如下图的结果:

  也只要差太满再 花费三分钟(117秒多),找出了符合条件的a b c的三种取值组合。肯能不都也能 计算机,人也是都也能根据你你是什么思路,一步一步去算,只不过时间更是我只要知道有多慢。你你是什么时间开销,当我们 很不满意,对用户来说,还是太慢了。有不都也能 哪几种辦法 提升以下计算带宽。

2.5 优化上端代码:

  根据数学知识,当我们 用代码实现二元二次方程的思路,c = 800 - a - b; 来减少第三层嵌套for循环。

2.5.1 代码实现:

2.5.2 参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放入第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2020-1-02
@author: 北京-宏哥
Project:《从入门到放弃》数据价值形式和算法 1- 算法的引入和算法时间复杂化度
'''
# 3.导入模块

import time

start_time = time.time()
for a in range(0, 801):
    for b in range(0, 801):
        c = 800-a-b
        if a**2 + b**2 == c**2:
            print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time()
print(end_time - start_time)
2.5.3 运行结果:

  运行代码后,控制台打印如下图的结果

  不都也能 一看,发现时间缩短了不都也能2秒,你你是什么计算带宽大大提升。同样处理另另三个小 多 难题,肯能当我们 第二种辦法 减少了一次for循环嵌套,原因分析分析分析计算带宽提高了好多好多 倍,你你是什么只要算法的重要性。

3. 哪几种是算法

      算法是计算机处理信息的本质,肯能计算机系统进程池池本质上是另另三个小 多 算法来告诉计算机确切的步骤来执行另另三个小 多 指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备肯能某个存储地址供已经 再调用。算法是独立存在的三种处理难题的辦法 和思想。对于算法而言,实现的编程语言不须重要,重要的是思想。

算法的五大价值形式:

1:输入:算法具有0个或多个输入

2:输出:算法合适 另另三个小 多 或多个输出

3:有穷性:算法在有限的步骤之一定会自动已经 已经 开始 而太满再无限循环,已经 每另另三个小 多 步骤都也能在可接受的时间内完成

4:确定性:算法内的每一步还要确定的含义,太满再出显二义性。

5:可行性:算法的每一步还要可行的,也只要说每一步都能执行有限的次数完成。

4. 时间复杂化度和大O表示法

  上端当我们 通过另另三个小 多 辦法 来求出a b c的取值组合,第三个小辦法 比第另另三个小 多 辦法 ,从时间效果来看,快好多好多 ,好多好多 当我们 很容易得出结论,第三个小算法比第另另三个小 多 算法带宽要高。不都也能 算法是通过时间来衡量,我我实在最直观地,当我们 从时间上来看到算法和算法之间的带宽不同。已经 ,单靠时间是不可靠的,例如,同另另三个小 多 算法,在另另三个小 多 I7的CPU上运行和拿到另另三个小 多 1995年已经 的被委托人PC电脑上运行,你你是什么时间来比较都怪怪的不合适 了。好多好多 ,当我们 一般从算法的执行计算数量你你是什么维度去考察算法的带宽。执行数量都也能不都也能 理解,上端三个小for循环嵌套的代码,每一行代码还要确定的执行步骤数量,所有代码行的执行步骤数量相加,就得到了你你是什么算法的执行步骤数量。肯能每台机器要执行不都也能 多步骤数量大体相同,好多好多 你你是什么执行步骤数量就拿来衡量算法的带宽。

  当我们 假定计算机执行算法每另另三个小 多 基本操作的时间是固定的另另三个小 多 时间单位,不都也能 有几只个基本操作就代表会花费几只时间单位。对于不同机器而言,确切的单位时间是不同的,已经 对于算法进行几只个基本操作,在规模数量级上说却是相同的。由此都也能忽略机器环境影响而客观的反应算法的时间带宽。

对于算法的时间带宽,当我们 都也能用“大O记法”来表示。

“大O记法”:对于单调的整数函数f,肯能存在另另三个小 多 整数函数g和实常数c>0,使得对于充分大得n,总有

f(n)<=c*g(n),只要函数g是f得另另三个小 多 渐进函数(忽略常数),记作为f(n)=O(g(n)),也只要说在趋向无穷得

极限意义下,函数f的增长带宽收到函数g的约束,亦函数f与函数g的价值形式例如。

时间复杂化度:假设存在函数g,使得算法A处理规模为n的难题实例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A

的渐进时间复杂化度,简称时间复杂化度,记为T(n)

5. 怎么理解“大O记法”

  当我们 通过“大O记法”的定义,当我们 来计算下上端 a b c这题的第三种代码实现辦法 的时间复杂化度的计算过程。

  当我们 根据上端你你是什么图代码对应行来分析(第4到8行代码),先分析每行代码执行步骤数目。

  分析过程:

  第4行:a的取值范围是0到800,好多好多 你你是什么for循环要执行800次

  第5行:b的取值范围是0到800,好多好多 你你是什么for循环要执行800次

  第6行:c的取值范围是0到800,好多好多 你你是什么for循环要执行800次

  第7行:肯能不细分步骤,第7和第八两行当作另另三个小 多 步骤,肯能细分,a + b + c是另另三个小 多 步骤, 判断a + b + c ==800是另另三个小 多 步骤,a**2是另另三个小 多 步骤,好多好多 细分,第七行存在还要执行 8个步骤数目。

  另另三个小 多 多,当我们 把每一行代码还要执行步骤次数计算出来是

  T = 800 * 800 * 800 * 8

  简写成 T = 8*800^3

  肯能,这里把800改成n, 把你你是什么难题规模扩大,你你是什么算法的时间复杂化度都也能写成

  T(n)= 8*n^3

  当我们 在计算时间复杂化度的已经 ,只关注大头次责,会换成旁支末节次责,一般当我们 都也能另另三个小 多 多认为 n^3和800*n^3是等价,好多好多 当我们 上端文章开头写的第三种枚举法的时间复杂化度是 O(n^3)。

  根据你你是什么时间复杂化度计算原则,当我们 计算第二种算法的时间复杂化度为O(n^2),你你是什么比第另另三个小 多 带宽要高,当然肯能时间复杂化度为n^1,不都也能 你你是什么算法带宽就更高。

6.小结

  好了,今天的分享就到这里吧!!!谢谢各位的耐心阅读。有难题加群交流讨论!!!

您的肯定只你能能 进步的动力。肯能你感觉还不错,就请鼓励一下吧!记得随手点波  推荐  不须忘记哦!!!

别忘了点 推荐 留下您来过的痕迹