《算法基础》——1.2 算法和数据结构

1.2 算法和数据结构

算法是完成某个任务的方法。数据结构是一种安排数据的方法。这个方法使解决某个特定的问题更简单。数据结构可以是一种在数组中放置数值的方法,一个以某种特定结构链接物体的链表、一棵树、一个图、一个网络,甚至更奇异的东西。
通常算法是与数据结构紧密联系在一起的。比如,第15章中描述的编辑距离算法使用了一个网络来确定两个字符串的相似程度。这个算法与网络紧紧地联系在一起,没有网络它就不能工作。
通常一个算法意味着:“建立一个特定的数据结构,然后用一个特定的方法使用它。”没有数据结构就没有算法。如果不打算在算法中运用数据结构,那么设计这个算法也就没有意义。

时间: 2024-09-23 10:52:58

《算法基础》——1.2 算法和数据结构的相关文章

《算法基础:打开算法之门》一导读

前言 Algorithms Unlocked 计算机是如何解决问题的呢?小小的GPS是如何只在几秒钟内就从无数条可能路径中找出到达目的地的最快捷路径的呢?在网上购物时,又如何防止他人窃取你的信用卡账号呢?解决这些问题,以及大量其他问题的答案均是算法.我写本书的目的就是为你打开算法之门,解开算法之谜. 我是<算法导论>的合著者之一.<算法导论>是一本特别好的书(当然,这是我个人的主观评价),但是它确实相当专业. 本书并不是<算法导论>,甚至不能被称为一本教材.它既没有对计

《算法基础:打开算法之门》一1.2 资源利用

1.2 资源利用 什么样的算法才能称为高效使用计算资源的算法呢?我们在讨论近似算法时提及了一个衡量效率的标准:时间.一个能给出正确输出但是会花费很长时间才能得出结果的算法可能是没有价值的.如果你的GPS需要一个小时才能计算出推荐的驾驶路线,你还会愿意打开GPS吗?诚然,一旦我们知道某算法能给出一个正确输出,时间便是我们用来衡量算法效率的主要方式.但是时间不是唯一的衡量标准.由于一个计算机算法必须能够在可用的内存空间上运行,因此我们可能还需要考虑该算法需要占用多大的计算机内存空间(它的"内存占用量

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

1.4针对计算机专业人士的计算机算法 如果你是一个计算机专业人士,那么你最好关注计算机算法!不仅仅是因为算法是计算机的核心,而且算法就像计算机的其他技术一样.你可以为了买一个最新.最好的处理器而花大价钱,但是你更需要在其上运行好的算法以使你的钱花得值. 这里有一个例子来说明算法确实是一门技术.在第3章中,我们将会看到几个将n个元素按升序排列的算法.其中一些算法的运行时间增长量级是n2,而另一些算法的运行时间增长量级仅仅为nlgn.什么是lgn呢?它是n的以2为底的对数,或记为log2n.计算机科

《算法基础:打开算法之门》一3.5 快速排序

3.5 快速排序 像归并排序那样,快速排序也使用分治模式(因此也使用递归).然而,快速排序与归并排序所使用的分治法稍微有点不同.与归并排序相比,存在两个不同之处: ●快速排序按照原址工作. ●快速排序的渐近运行时间介于最坏情况和平均情况之间.尤其是,快速排序的最坏运行时间是Θ(n2),但是它的平均情况下的运行时间要更好一些:Θ(nlgn).快速排序也有好的常数因子(比归并排序更好一些),并且它通常是实践中的一个好的排序算法.这里是快速排序使用分治法的过程.再一次考虑对书架上的书进行排序的例子.就

《算法基础:打开算法之门》一3.4 归并排序

3.4 归并排序 我们的下一个排序算法是归并排序,对于所有情况,它有一个仅仅Θ(nlgn)的运行时间.当将它的运行时间和选择排序与插入排序的最坏运行时间Θ(n2)进行比较时,我们仅仅是将n这个因子替换成了lgn这个因子.正如我们在第1章中所指出的那样,这是一个非常划算的交易. 归并排序与我们已经看到的两种排序算法相比有一些不足.首先,隐含在渐近符号前面的常量因子比另外两个算法的渐近符号前面的常量因子的值大.当然,一旦数组规模n变得非常大,那个常量因子也变得没有那么重要了.第二,归并排序不是原址的

《算法基础:打开算法之门》一2.4 递归

2.4 递归 利用递归技术,能将一个问题转化为同一个样子问题的求解过程.这是我最喜欢的经典的递归例子:计算n!("n的阶乘"),它被定义为如下,对于一个非负数n,当n=0时,n!=1且n!=n(n-1)(n-2)(n-3)-3•2•1(如果n≥1).例如,5!=5•4•3•2•1=120.22观察得(n-1)!=(n-1)(n-2)(n-3)-3•2•1,并且得n!=n•(n-1)!(对于n≥1).针对n!这个问题,我们定义了"较小的"问题,也就是(n-1)!.我们

《算法基础:打开算法之门》一第3章 排序算法和查找算法

第3章 Algorithms Unlocked 排序算法和查找算法 在第2章中,我们看到了在数组上进行线性查找的三个算法.我们能做得更好吗?答案是:看情况.如果不清楚数组中的元素是否有序,我们是不可能做得更好的.在最坏情况下,我们必须查找数组的所有n个元素,因为如果在前n-1个元素中不能找到要找的值,那么要查找的元素可能在第n个位置上.因此,当我们不清楚数组中的元素是否有序时,我们不可能实现比Θ(n)更好的最坏情况运行时间. 然而,假定数组是以非递减顺序排序的,那么根据"非递减"的含义

《算法基础:打开算法之门》一3.1 二分查找

3.1 二分查找 在学习一些排序算法之前,首先学习二分查找,其中待查找的数组事先需要是有序的.二分查找的优点是从包含n个元素的数组中执行查找操作仅仅需要O(lgn)时间. 在书架那个例子中,当书架上的书已经按照作者名字从左向右依次排好序后才开始进行查找.我们将使用作者名字作为主关键字,现在让我们搜索下由Jonathan Swift所写的书.你可能已经推测到:因为作者的姓以"S"开头,"S"是字母表中的第19个字母,且19/26与3/4接近,因此你可能会浏览书架上位置

《算法基础:打开算法之门》一1.5 拓展阅读

1.5 拓展阅读 我主观地认为,描述计算机算法最清楚.最有用的书籍是由四个精力充沛的美男子写的<算法导论>(Introduction to Algorithms[CLRS09]).该书通常被称为"CLRS",即四位作者名字的首字母.我在本书中多次引用<算法导论>中的内容.<算法导论>远比本书完整.详细,但是它假定你至少编写过一点计算机程序,并且懂得大量数学知识.如果你发现你能轻松地理解本书的数学知识,并且已经做好了深入研究这一主题的准备,那么<

《算法基础:打开算法之门》一2.1 如何描述计算机算法

2.1 如何描述计算机算法 将计算机算法描述成一个可执行程序可以有多种选择,例如使用通用的编程语言表示,像Java.C.C++.Python或Fortran.诚然,许多教科书上的算法都是这么表示的.但是使用实际的编程语言来表示算法所带来的问题是你可能会在语言细节上越陷越深,而对算法本身的认识反而模糊不清.另一种表示算法的方式是"伪代码",就像我们在<算法导论>中使用的一样,它听起来像是多种编程语言和英语的混合表示.如果你曾用一种实际的编程语言编写过程序,那么你就能很容易地搞