9.1.2算法是计算机的灵魂 要计算1到100的累加和。有人先计算1+2,再将结果加上3,然后再将结果加 上4,以此类推,一直加到100。而有的人会将1+100,然后乘以50即可同样得出答 案。这两种方法的时间复杂度是不一样的,很显然第二种方法更快的得到答案。 由于现代计算机运行速度都非常快,对于运行这样一点小运算来说不会有明显的 时间差异。但是在大型软件项目中,程序的执行效率高低就显得至关重要,会直接影响 到用户体验。因此,合理的算法设计是非常必要的
9.1.2 算法是计算机的灵魂 要计算1到100的累加和。有人先计算 1+ 2 ,再将结果加上3,然后再将结果加 上4,以此类推,一直加到 100。而有的人会将 1 + 100,然后乘以50即可同样得出答 案。这两种方法的时间复杂度是不一样的,很显然第二种方法更快的得到答案。 由于现代计算机运行速度都非常快,对于运行这样一点小运算来说不会有明显的 时间差异。但是在大型软件项目中,程序的执行效率高低就显得至关重要,会直接影响 到用户体验。因此,合理的算法设计是非常必要的
9.1.3运行时间 假设在字典中查找一个以M开头的单词,你可以从头开始翻页,直到进入以M开头 的部分。 你还可以从中间开始,因为你知道M开头的单词在字典的中间位置附近。 再比如有100个数字,已经按照从小到大的顺序排列好了。当我们需要找出其中某 一个数字时,可以从头开始比对,最差的情况是需要比对100次。还可以从中间开始。 对100个数字而言,这种方法最多需要比对7次。如果列表中包含40亿个数字,最 多也只需要比对32次。厉害吧?
9.1.3 运行时间 假设在字典中查找一个以M开头的单词,你可以从头开始翻页,直到进入以M开头 的部分。 你还可以从中间开始,因为你知道M开头的单词在字典的中间位置附近。 再比如有100个数字,已经按照从小到大的顺序排列好了。当我们需要找出其中某 一个数字时,可以从头开始比对,最差的情况是需要比对100次。还可以从中间开始。 对100个数字而言,这种方法最多需要比对7次。如果列表中包含40亿个数字,最 多也只需要比对32次。厉害吧?
9.1.3运行时间 对长度为的列表,使用逐个比对的方法就需要执行n次操作,这个运行时间我们 记做O(),也叫线性时间。如果使用从中间折半的方法就仅仅需要执行1ogn次操作, 记做O(I0g),也叫对数时间。这种表示法不是以秒为单位的,它告诉我们算法到底有 多快,也就是指出了算法运行时间的增速。O(Iogn)比O()快,当需要搜索的元素越多 时,前者比后者快的越多
9.1.3 运行时间 对长度为n的列表,使用逐个比对的方法就需要执行n次操作,这个运行时间我们 记做O(n),也叫线性时间。如果使用从中间折半的方法就仅仅需要执行log n次操作, 记做O(log n),也叫对数时间。这种表示法不是以秒为单位的,它告诉我们算法到底有 多快,也就是指出了算法运行时间的增速。O(log n)比O(n)快,当需要搜索的元素越多 时,前者比后者快的越多
9.1.4算法的表示 1.自然语言 知道把大象放冰箱一共分几步吗? 一,把冰箱门打开。 二,把大象塞进去。 三,把冰箱门关上。 这就是用自然语言描述的算法
9.1.4 算法的表示 1.自然语言 知道把大象放冰箱一共分几步吗? 一,把冰箱门打开。 二,把大象塞进去。 三,把冰箱门关上。 这就是用自然语言描述的算法
9.1.4算法的表示 1.自然语言 古希腊数学家欧几里得(公元前3世纪)曾在他的著作中描述过求两个数的最大 公因子的过程。这里用到了一个定理,即两个整数的最大公约数等于其中较小的那个数 和两数相除余数的最大公约数。 算法9.1: (1)输入任意两个整数m和n,使得m>n; (2)计算:m除以n得余数r; (3)若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4)将m的值修改为n,将n的值修改为r,再重复执行(2)
9.1.4 算法的表示 1.自然语言 古希腊数学家欧几里得(公元前3世纪)曾在他的著作中描述过求两个数的最大 公因子的过程。这里用到了一个定理,即两个整数的最大公约数等于其中较小的那个数 和两数相除余数的最大公约数。 算法9.1: (1) 输入任意两个整数m和n,使得m>n; (2) 计算:m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) 将m的值修改为n,将n的值修改为r,再重复执行(2)