《算法基础》——第1章 算法基础知识 1.1 方法

第1章 算法基础知识

在开始算法学习之前,你需要一点背景知识。简单地说,首先需要知道的是算法是完成某些事情的方法。它定义了用某个方法执行一个任务的步骤。
这个定义看起来足够简单,但是没有人为了做一件十分简单的工作而写算法。没有人写指令来获取数组中的第四个元素。这只是假设这是一个数组定义的一部分,并且你知道怎么去做(如果你知道如何在这个问题中使用编程语言)。
一般来说,人们只是为了完成复杂的任务而写算法。算法解释了如何找到一个复杂代数问题的答案,如何在一个包含数千条街道的网络中找到最短路径,抑或是如何在数百个投资中找到最好的投资组合来使利益最大化。
本章介绍一些基本的算法概念。如果想从算法学习中获得最大的收获,就应该理解它们。
跳过这一章然后去学某个特定的算法似乎很有诱惑力,但是你至少应该浏览一下这一章。请着重注意1.4.1节,因为对运行时间是否有良好理解意味着算法能否在数秒、数小时内完成任务,还是永远不能完成任务。

1.1 方法

为了尽可能地了解一个算法,你需要做出更多努力而非简单地遵循它的步骤。你需要理解以下内容:
算法的行为: 它寻找出了最好的方法还是仅仅找出了一个可行的解决办法?可能有多个最佳的解决方案吗?是否有一个方法可以从其他解决方案中寻找到一个“最佳”解决方案?
算法的速度:这个算法是快还是慢?还是它通常是快的,但有时对于某些输入慢?
算法的存储要求:这个算法需要多大的存储空间?这个大小合理吗?这个算法是否需要数十亿TB的存储空间,比一台计算机可能有的存储空间还多(至少对现在的计算机来说如此)?
算法设计主要使用的技巧:是否可以利用这些技术解决类似的问题?
这本书涵盖了所有这些主题。然而,本书没有试图用数学的精确理论去涵盖每一个算法的每一个细节。本书使用一种直观的方法来解释算法及其性能,但是本书没有用严谨的细节去分析算法的性能。尽管这种细节分析的证明可能是有趣的,但它也可能让人混乱,并且会占用大量的篇幅,提供了对大多数程序员来说不必要的细节。毕竟,这本书主要适用于需要完成工作的专业程序员。
本书把具有相关主题的算法归在一章。有时这个主题是它们所执行的任务(排序、搜索、网络算法),有时是它们所使用的数据结构(链表、数组、散列表、树),有时是它们使用的技巧(递归、决策树、分布式算法)。粗看起来,这些分组似乎是任意的,但当你读到这些算法的时候,可以看到它们很好地组合在一起。
除了这些类别,许多算法的基本主题跨越章节界限。例如,树算法(第10、11和12章)往往是高度递归的(第9章)。链表(第3章)可用于建立数组(第4章)、散列表(第8章)、栈(第5章)和队列(第5章)。引用和指针的概念可以用来建立链表(第3章)、树(第10、11和12章)和网络(第13和14章)。在阅读时,请关注这些共同的线索。附录A中总结了常见的策略,这些策略能使这些想法更容易被理解。

时间: 2024-09-19 09:04:25

《算法基础》——第1章 算法基础知识 1.1 方法的相关文章

《Python编程快速上手——让繁琐工作自动化》——第一部分 Python编程基础 第1章 Python基础 1.1 在交互式环境中输入表达式

第一部分 Python编程基础 第1章 Python基础 Python编程语言有许多语法结构.标准库函数和交互式开发环境功能.好在,你可以忽略大多数内容.你只需要学习部分内容,就能编写一些方便的小程序. 但在动手之前,你必须学习一些基本编程概念.就像魔法师培训,你可能认为这些概念既深奥又啰嗦,但有了一些知识和实践,你就能像魔法师一样指挥你的计算机,完成难以置信的事情. 本章有几个例子,我们鼓励你在交互式环境中输入它们.交互式环境让你每次执行一条Python指令,并立即显示结果.使用交互式环境对于

《MATLAB智能算法超级学习手册》一一第1章 MATLAB基础知识

第1章 MATLAB基础知识 MATLAB智能算法超级学习手册MATLAB的基本数据单位是矩阵,它的指令表达式与数学.工程中常用的形式十分相似.用MATLAB解决问题要比用C.FORTRAN等语言简捷得多,并且MATLAB吸收了Maple等软件的优点,从而成为一个强大的数学软件.本章从最基本的运算单元出发,讲述了MATLAB矩阵的表示方法.符号变量的应用.线性方程组的求解,并着重讲解了MATLAB在工程上的简单应用研究. 学习目标: (1)熟练掌握MATLAB矩阵的表示方法: (2)熟练运用符号

《算法技术手册》一第3章 算法基础

第3章 算法基础 虽说开发软件是为了解决问题,但程序员们往往太执着于是否能够解决问题本身,而不去确认这一问题是否已有解决之法.即便程序员们知道前人已在类似情况下解决了问题,但"已有的解决之法"最终是否适用于特写的问题仍是一个未知数.更重要的是,要找到完全不需要修改或者只需要稍作修改便能解决手头问题的代码并不容易.不同的人对待算法的态度各有千秋.很多人就只是简单地在一本书中或者网站上找个算法,复制代码,运行一次,然后可能还会测试一次,如果结果正确,就开始做下一个任务.但是,在我们看来,这

《MATLAB图像处理超级学习手册》一一第1章 MATLAB基础知识

第1章 MATLAB基础知识 MATLAB图像处理超级学习手册 MATLAB(MATrix LABoratory)用法简单.灵活性好.程式结构强又兼具延展性.它提供了一个高性能的用于数值计算和图形显示的科学和工程计算软件环境.这种易于使用的环境,是一种基于矩阵运算.具有强大的数值运算和数据处理功能的高级编程环境,广泛应用于信号分析.语音分析.优化设计等领域,在复杂算法方面表现出其他语言难以比拟的优势,目前已成为国际上最为流行的软件之一. 学习目标: 1.了解MATLAB的产生和发展历程及其特点.

《Hive编程指南》一第1章 基础知识

第1章 基础知识 Hive编程指南从早期的互联网主流大爆发开始,主要的搜索引擎公司和电子商务公司就一直在和不断增长的数据进行较量.最近,社交网站也遇到了同样的问题.如今,许多组织已经意识到他们所收集的数据是让他们了解他们的用户,提高业务在市场上的表现以及提高基础架构效率的一个宝贵的资源. Hadoop生态系统就是为处理如此大数据集而产生的一个合乎成本效益的解决方案.Hadoop实现了一个特别的计算模型,也就是MapReduce,其可以将计算任务分割成多个处理单元然后分散到一群家用的或服务器级别的

《非常网管:网络管理从入门到精通(修订版)》——第1章 网络基础知识回顾1.1 计算机网络基础

第1章 网络基础知识回顾 古语云:"练武不练功,到老一场空",学习网络的基础理论就像练功一样重要.本章主要介绍网络的基础.网络的体系结构.ISO/OSI(International Standard Organization/Open System Interconnection,国际标准化组织提出的开放系统互联)参考模型.TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),其间穿插大量的实验和技巧,有

《Python数据科学实践指南》一 第2章 Python基础知识

第2章 Python基础知识 为了开启我们的数据科学之旅,本章会进行一些基础的编程训练.第1章中已经搭建好了Python的运行环境,读者应该已经能够在Python shell中执行简单的打印和四则运算了.接下来我们要完整地学习一遍构成一个Python程序的基本要素. 2.1 应当掌握的基础知识 本节会介绍一些学习Python前应当掌握的基础知识,这一部分内容在所有的编程语言学习中基本上都是类似的,Python当然也遵守这些通用的规则,熟悉这些内容的读者可以跳过这一节. 2.1.1 基础数据类型

java 算法基础之二快速排序算法

http://www.cnblogs.com/hexiaochun/archive/2012/09/03/2668324.html java 算法基础之二快速排序算法 所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值

《Python数据科学实践指南》——第2章 Python基础知识 2.1 应当掌握的基础知识

第2章 Python基础知识 为了开启我们的数据科学之旅,本章会进行一些基础的编程训练.第1章中已经搭建好了Python的运行环境,读者应该已经能够在Python shell中执行简单的打印和四则运算了.接下来我们要完整地学习一遍构成一个Python程序的基本要素. 2.1 应当掌握的基础知识 本节会介绍一些学习Python前应当掌握的基础知识,这一部分内容在所有的编程语言学习中基本上都是类似的,Python当然也遵守这些通用的规则,熟悉这些内容的读者可以跳过这一节. 2.1.1 基础数据类型