《算法基础:打开算法之门》一1.4针对计算机专业人士的计算机算法

简介:

本节书摘来自华章出版社《算法基础:打开算法之门》一书中的第1章,第1.4节,作者 [美]托马斯 H 科尔曼(Thomas H Cormen),更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.4针对计算机专业人士的计算机算法

如果你是一个计算机专业人士,那么你最好关注计算机算法!不仅仅是因为算法是计算机的核心,而且算法就像计算机的其他技术一样。你可以为了买一个最新、最好的处理器而花大价钱,但是你更需要在其上运行好的算法以使你的钱花得值。

这里有一个例子来说明算法确实是一门技术。在第3章中,我们将会看到几个将n个元素按升序排列的算法。其中一些算法的运行时间增长量级是n2,而另一些算法的运行时间增长量级仅仅为nlgn。什么是lgn呢?它是n的以2为底的对数,或记为log2n。计算机科学家如此频繁地使用以2为底的对数,以至于就像数学家和科学家使用缩写lnn来表示自然对数logen一样,计算机科学家也将以2为底的对数表示成缩写形式。因为函数lgn是指数函数的逆,所以它随着n的变化会相当地缓慢增长。如果n=2x,那么x=lgn。例如,210=1024,因此lg1024仅仅是10;同样地,220=1048576,因此lg1048576仅仅等于20;且230=1073741824意味着lg1073741824仅仅等于30。因此nlgn相对于n2,它是将因子n换成了lgn,这是一种非常方便的表示方式。

让我们将这个例子具体化。假设我们选择在一个较快的计算机(计算机A)上执行一个运行时间为n2的排序算法,而在一个运行速度较慢的计算机上(计算机B)上执行一个运行时间为nlgn的排序算法,并让它们均对一个包含着1千万个数字的数组进行排序。(尽管1千万个数看起来很多,如果这些数字是8字节整数,那么输入大约会占用80兆字节,对于一个低廉的笔记本电脑而言,这能够适配主存。)假设计算机A每秒执行100亿条指令(比本书写至此时任何计算机的执行速度更快),而计算机B每秒仅仅能执行1千万条指令,因此计算机A在计算机性能上比计算机B快1000倍。为了使得这个差异更明显,假定世界上具有最精湛技术的程序员为计算机A使用机器语言进行编码,并且结果的代码会需要2n2条指令来实现对n个数字的排序,而对计算机B进行编码的仅仅是一个普通程序员,他会使用一个带有低效编译器的高级语言,使得最终编码需要50nlgn条指令。为了对1千万个数进行排序,计算机A需要花费的时间为:image

这超过了55个小时,而计算机B会花费:image

该时间不到20分钟。通过使用一个运行时间增长较慢的算法,即使是使用一个较次的编译器,计算机B的运行速度也会比计算机A的运行速度快17倍!当我们对1亿个数字进行排序时,运行时间为nlgn的算法的优点会更加显著:运行在计算机A上的时间复杂度为n2的排序算法所花费的时间会超过23天,而运行在计算机B上的时间复杂度为nlgn的这个算法所耗费的时间会在4个小时以下。一般而言,当问题规模增加时,时间复杂度为nlgn的算法的相对优势也会更加明显。

即使我们看到了计算机硬件方面的不断改进和发展,但是整个系统的性能不仅仅依靠选择运行较快的硬件或者高效的操作系统,选择高效的算法对提升系统的性能也同样重要。就像在其他计算机技术上所做出的重要改进一样,在计算机算法上也在进行着相应的改进。

相关文章
C4.
|
2月前
|
存储 算法 C语言
关于c语言用计算机语言表示算法
关于c语言用计算机语言表示算法
C4.
17 1
|
7天前
|
缓存 算法
LRU(Least Recently Used)算法是一种常用的计算机缓存替换算法
LRU算法是基于页面使用频率的缓存策略,优先淘汰最近最久未使用的页面。实现可采用双向链表或数组,前者灵活,后者时间复杂度低。优点是利用时间局部性提高命中率,简单易实现;缺点是占用空间,对循环访问和随机访问场景适应性不佳。
24 0
|
24天前
|
存储 分布式计算 负载均衡
分布式(计算机算法)
分布式(计算机算法)
|
2月前
|
自然语言处理 算法 搜索推荐
用计算机语言表示算法
在计算机科学中,算法是解决问题的核心步骤和方法的描述。然而,算法本身并不直接执行;它们需要被转换成计算机可以理解和执行的指令,这通常是通过编写代码来实现的。不同的计算机语言提供了不同的方式来表示和实现算法。本文将讨论如何使用计算机语言来表示算法,并通过一个具体示例来展示这个过程。
14 0
|
7月前
|
搜索推荐 算法 前端开发
电影推荐与管理系统Python+Django网页界面+协同过滤推荐算法【计算机毕设项目】
电影推荐与管理系统Python+Django网页界面+协同过滤推荐算法【计算机毕设项目】
82 0
电影推荐与管理系统Python+Django网页界面+协同过滤推荐算法【计算机毕设项目】
|
7月前
|
算法
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
|
9月前
|
算法
计算机操作系统学习笔记(9)——页面置换算法
计算机操作系统学习笔记(9)——页面置换算法
102 0
|
11月前
|
算法
头歌计算机算法设计与分析:随机化算法
> 任务描述 > 相关知识 > 随机数 > 编程要求 > 测试说明
|
11月前
|
算法
头歌计算机算法设计与分析线性规划问题和单纯形算法第1关:单纯性算法解一般线性方程组
任务描述 相关知识 单纯形算法的第1步:选出使目标函数增加的非基本变量作为入基变量。 单纯形算法的第2步:选取离基变量。 单纯形算法的第3步:转轴变换。 单纯形算法的第4步:转回并重复第1步,进一步改进目标函数值。 编程要求 测试说明