极速pk10平台登陆 _《从入门到放弃》数据结构和算法 1

  • 时间:
  • 浏览:0

1. 简介 

  最近机会快过年了,全部都能不能 很忙碌了,人心浮动,好多好多 都请假了,现在终于有时间来系统学习下和恶补一下常见数据型态和算法的知识,好多好多 ,还是通过记录笔记插进博客的法律方法来督促被委托人学习。一齐和小伙伴们分享一下学习心得与体会。算法对于好多好多 系统tcp连接员都接触这麼的,何况是另另一个测试人员。否则面试过程中,多十几只 少全部都能不能 算法题的面试。好多好多 ,学习算法,短期来看是为了跳槽准备,长期来看,是锻炼另另俩被委托人正确处理现象的思路的提升的另另一个途径。

2. 算法的引入

  来看另另一个现象:机会 a+b+c = 800, 且 a^2 + b^2 = c^2(勾股定理),怎样才能求出所有a b c的组合。

2.1 现象分析:

  顶端告诉另另一个条件,从数学深度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. 那些是算法

      算法是计算机正确处理信息的本质,机会计算机系统tcp连接本质上是另另一个算法来告诉计算机确切的步骤来执行另另一个指定的任务。一般地,当算法在正确处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备机会某个存储地址供前一天再调用。算法是独立位于的并都在正确处理现象的法律方法和思想。对于算法而言,实现的编程语言无须重要,重要的是思想。

算法的五大型态:

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.小结

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

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

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