书怎么做pdf下载网站,兰州网站seo技术厂家,网站开发平台开发公司,网上房地产网官网了解了程序如何运行#xff0c;我们就可以让我们写的程序变得更快。介绍在前面很长一段时间#xff0c;我们学习建立一个搜索索引#xff0c;它可以通过一次一次地查看每个条目来响应查询。当搜索索引检查关键字与我们要找的词相匹配时#xff0c;就会把结果打印出来。但是…了解了程序如何运行我们就可以让我们写的程序变得更快。介绍在前面很长一段时间我们学习建立一个搜索索引它可以通过一次一次地查看每个条目来响应查询。当搜索索引检查关键字与我们要找的词相匹配时就会把结果打印出来。但是如果索引很大很大查询次数很多很多这种方法就会太慢。一个典型的商用的搜索引擎应该在一秒钟内做出响应甚至还会快得多。在接下来的几篇文章我们将学习如何使我们的搜索索引更快。让事情变得更快的办法这几篇文章最主要目标是让大家了解程序的运行成本。到此刻为止我们还没有担心过这个问题那是我们写的都是最简单的代码如果程序的代码足够大的时候或者让程序运行更多的事情的时候我们就必须开始考虑运行它们的成本。这个评估一个执行的成本是一个非常重要的问题它是计算机科学的一个基本问题。有些人整个职业生涯都在研究这个问题。这就是所谓的算法分析。在看我写的公号过程中你可能没有意识到这一点但实际你完整学习的话已经写了很多算法。算法是一个输入某些东西然后让计算机产生正确结果的程序。一个程序是一个逻辑清晰的步骤序列它可以机械地执行。我们主要对可以被计算机执行的程序感兴趣但它之所以成为程序重要的部分在于它的步骤是精确定义的不需要思考就可以执行。要成为一个算法它必须总是完成。也就是说它必须要有输出。你已经看到要确定一个算法是否总有输出这不是一个简单的问题。一般来说不可能回答这个问题在现实世界你永远无法给出下一秒的准确预测明天的输出需要明天到来之后才能观察到。但对于计算机的程序来说给定一个输入必须要有一个输出的结果哪怕是个错误的结果。所以一旦你有了一个算法然后你用逻辑清晰定义了实现的步骤那么它就会产生正确的结果。这也意味着你可以通过统计每段过程对它的成本进行推理。什么是成本计算机科学家思考成本的方式与大多数人思考成本的方式完全不同。当你考虑到东西的成本时你就会知道具体的东西比如红车要25000元绿车要10000元--红车比绿车贵。你只要比较这些成本就可以了。这是以非常具体的事物与具体的成本来思考的。用算法就不一样了。我们通常不会有一个具体的执行思路。成本取决于投入。假设 算法A 和 算法B 都解决同一个问题。输入 算法A 输出输入 算法B 输出你不能像汽车那样给它们定一个固定的价格。对于某些输入可能 算法A 比 算法B 便宜但对于其他输入算法B 可能更便宜。你不希望对每一个输入都要进行计算。在计算机科学中成本的主要方式是以输入的大小来谈论的。通常情况下输入的大小是决定算法速度的主要因素。通俗的来说计算中的成本是以时间如何随着输入的大小增加而增加来衡量。有时输入的其他属性也很重要这在后面会提到。最终成本总是归结为钱。当算法执行时什么是需要花钱的完成的时间--如果它完成得更快你就会花更少的时间在它身上。你可以按执行时间来租用电脑。有各种云计算服务你按使用时间支付一定大小的处理器的费用。这只是几分钱每小时。时间真的是金钱虽然我们不需要把成本变成金钱因为我们可能不知道确切的计算成本但了解执行时间就能很好地了解成本。内存--如果执行一个算法需要一定的内存那么你就可以知道运行程序所需的计算机大小和成本。总而言之成本是以时间和记忆而不是以金钱来谈论的尽管这些的实际实施确实会转化为实际的金钱成本。时间往往是成本的最重要方面但记忆也是另一个考虑因素。为什么计算机科学家专注于测量时间随输入大小而变化而不是绝对时间a我们想在运行一个程序之前预测它的执行时间。b我们想知道随着计算机的速度越来越快时间将如何变化。c我们想了解算法的基本属性而不是特定输入或机器的东西。d我们想要抽象的答案所以它们永远不会错。e纵观整个计算的历史一年后用同样的钱能买到的计算机会比今天能买到的计算机快。程序运行的时间下面我们将学习如何检查一段代码运行所需的时间。下面的存储过程time_execution就是一种评估代码执行所需时间的一种方法。你可以尝试用秒表来做但是为了准确你必须运行程序很长时间。使用 time 时间库中内置的 time_execution() 更准确。代码后面有注释。import time #这是一个Python库def time_execution(code):start time.monotonic() # 启动时钟,返回的时钟的浮点数值result eval(code) # 把任何字符串当作Python命令来计算。run_time time.monotonic() - start # 找出开始时间和结束时间的差异。return result, run_time # 返回代码结果和所需时间Jupyter中的执行过程时钟已经启动。它开始时读取的时间有些随意但这并不重要因为你只对它开始和停止的时间差感兴趣而不是绝对的开始和结束时间。时钟启动后你要评估的代码会被执行。这是由相当令人兴奋的方法eval(code)完成的。它允许你以字符串的形式运行任何输入的代码你输入一个字符串它就会运行。你输入一个字符串它就会把它作为 Python 代码运行。例如eval(1 1) 运行代码 1 1。代码执行完毕后时钟停止计算开始和停止时间的差值并存储为run_time。最后过程在eval中返回代码的结果及其运行时间。你可以通过web解释器来运行计时但它不会是准确的而且你的代码在那里运行的时间是有限制的。如果你的电脑上安装了Python你就可以在上面运行。如果你还没有安装Python尽快安装。只要动手自己做一遍才是最快速的学习方式。上面的输出代码都是Frankie在他的Mac anaconda里的Jupyter notebook中运行的。回顾一下time_execution 的输入 1 1被作为输入发送给 eval 然后它以 Python 代码的形式运行 1 1。运行时间用科学记数法写成(2, 1.7687999843474245e-05)你可以通过观察 e 后面的 -5 来了解它的来源它告诉你把小数点向左移动 5 步就像这样。单位是秒所以这是毫秒的一小部分也就是0.017毫秒左右。反复尝试同一条指令由于同一时间机器里有其他事情在进行所以结果会有所不同但都是同一个值左右。如果你试着尝试更大的数字时间还是非常非常小的。实际的处理时间还会更低因为启动和停止时钟等都算入到时间里面了。对于这种很小的代码的执行来说这并不能说明什么。所以接下来的文章你会看到一些较长的模块它的执行时间。关注编程联盟继续学习了解更多的内容。