算法执行时间。
算法效率是通过在计算机上运行基于该算法的程序所花费的时间来衡量的。
算法效率是一个组合概念,算法+效率。 算法是解决问题的一系列明确的指令,对于一定的标准化输入,能够在有限的时间内获得所需的输出。
算法是一个重要的概念。 我们今天使用的任何软件背后都有一系列算法。 智能时代,算法是我们需要了解的基本概念,后面会详细阐述。
就今天的入门来说,重点不是介绍算法,而是给出算法中排序算法的一个例子,让读者对算法有一个感性的认识。 同时,更重要的是在工作效率的基础上丰富对效率的认识。
2、衡量算法效率应该有详细的标准。
效率比较的前提是确定公平的比较标准和测试方法。
如上所述,算法执行时间是用来衡量算法效率的。 这是正确的方向,但是用多少数据来测试算法速度是一个问题。
原因是,当使用不同数据量进行测试时,两种算法的相对性能可能完全不同。
例如,使用10000条数据进行测试,算法A的运行时间为2毫秒,算法B需要运行10毫秒。 使用100万条数据测试,算法A运行8000毫秒,算法B运行4000毫秒。
当数据量较小时,算法A耗时较少,效果较好; 当数据量较大时,算法B耗时较少,效果较好。
为此,计算机科学家、算法分析之父高德纳(Knuth)开发了一种普遍认可的算法效率评估方法。 高德纳的思想主要包括3个部分:
首先,在比较算法的速度时,需要考虑数据量特别大,几乎无穷大的情况。 原因是计算机的发明主要是为了处理大量数据。
其次是比较算法的速度。 只要评估随数量变化的因素,
白色的。
决定算法速度的因素有很多,但可以分为两类:第一类是不随数据量变化的因素,第二类是随数据量变化的因素。 当数据量趋于无穷大时,第一类因素的影响很小,可以忽略不计; 因此,只需评估第二类因素。
第三,如果两种算法的执行时间处于同一数量级,则认为算法效率同样好。 换句话说,计算机科学家关注的是至少10倍的差异,而不关心几倍的差异。
以上体现了科学研究的方法,就像做思想实验一样,忽略和避免次要因素的干扰,聚焦主要因素,从而实现理论突破。 在实际工程层面,通常考虑次要因素,甚至1%的效率差异也可能需要重点关注。
Q2:如何理解算法效率? A:1.了解传统排序算法的效率。
排序是我们在工作和生活中经常遇到的事情。 例如,在学校,学生按成绩排序; 例如,在一家公司中,产品按销量排序。
排序之后,就可以进行一些有针对性的处理。 例如,针对不同年级的学生安排不同的辅导策略; 针对不同的销售产品采取不同的促销策略。
在这个过程中,排序是前提工作,否则后续的安排就无从下手。
要手动对分数进行排序,我们很容易想到两种方法:
方法一:从成绩单中筛选,第一次挑选分数最高的学生,第二次挑选分数第二高的学生,直至筛选完毕,对学生进行排序。
方法二:首先将成绩单上第一个学生的姓名和年级写在他旁边一张白纸的中央。 如果第二个同学的成绩比他高,就写在第一个同学的上面。 如果比他低,就写在第一个学生的上方。 写在下面。
看到第三个学生的成绩后,根据他的成绩与前两个学生的成绩的比较,将其插入到相应的位置。例如,如果他的成绩在两个同学之间正好,则在他旁边的排序试卷上,在前两个人之间插入他的名字。
之间。
通过将这两种手动方法迁移到计算机上,您可以编写算法并让计算机自动执行它们。
第一种方法在计算机算法中称为冒泡排序。
原因是每次都会选择剩下的最高的,就像水里冒出的气泡一样。
第二种方法称为插入排序。 原因是你每次都必须找到正确的位置插入它。
2.了解快速排序算法的效率。
通过分析冒泡排序和插入排序过程,我们可以知道它们为什么慢。
例如,冒泡排序很慢,因为每次选择最大的数字时,都必须将其与所有其他数字进行比较。 如果能做减法,减少相互比较的次数,就能提高排序速度。
基于这个思想,就产生了归并排序算法,其过程大致如下:
以年级排名为例,如果将所有学生分成两组,然后分别进行冒泡排序,那么通过在每组中挑选最大的一组,可以节省一半的相互比较的时间。
将两组分别排序后,然后将它们合并在一起形成有序序列。 这就是合并排序算法名称的由来。
由于合并不需要太多时间,这样可以节省大约1/2的时间。 但如上所述,在科学理论层面效率可以说快吗,仅仅节省一半的时间是不够的。
为了进一步提高算法的效率,可以将两个独立的组分成两组,总共4组。 重复以上过程,这样可以节省3/4的时间。
如此下去,可以将4组分成8组,可以节省7/8的时间; 8组可分为16组,可以节省越来越多的时间。 分组结束时,每组只剩下两人时,无需排序,只需比较一次大小即可。
以排序为例。 如果一个程序员只知道传统的冒泡和插入排序算法,而不掌握合并排序算法,那么最终写出的程序的运行时间可能会相差一百万倍。
这是一个非常显着的差异。 读者不难理解,一流程序员和普通程序员的成就相比,可能存在天壤之别。 那么,如果一流程序员的工资是普通程序员的100倍,就不难理解了。
从另一个角度来看,当今世界各行各业都在经历互联网+,这意味着越来越多的工作环节正在软件化。 一个懂得如何提高软件执行质量和算法效率的人会比不懂的人有价值得多。 这也是该行业工资高的原因之一。
算法的效率与一个人的数学能力有很大关系。 这也是数学好的人如何赚更多钱的例子。
当然,并不是每个人都需要掌握编程,但是拥有一定水平的数学思维是必要的,并且可以在很多领域发挥作用。
回到今天入门的主题效率可以说快吗,像合并排序算法这样的快速排序算法并不只有一种。 例如,现在常用的排序算法是由英国计算机科学家托尼开发的。 Hall提出的快速排序算法。 其原理是:
首先,对于大量无序数,从其中随机选择一个,比如50。这个随机选择的数称为主元值。
接下来,将所有待排序的数字分为两部分,第一部分大于或等于主元值50,第二部分小于主元值50。
第二步是找到上述两组数字的枢轴值。 例如大于50的组可以选择70; 小于50的组可以选择30。接下来,可以根据新的主元值将每组数字分为两组,总共4组。
第三步,参照上面的方法,4组变成8组,8组变成16组,直到最后排列完毕。
一般情况下,快速排序算法的时间复杂度也是o(N*log(N)),但比前面提到的归并排序算法要快。
2次,因此实际中更常用。
