第3章 线性表的遍历
线性表是一种简单又广泛使用的数据结构。线性表中所有的元素组成线性序列。除头尾之外的每个元素都有唯一的前驱和后继;头元素只有后继,没有前驱,而尾元素只有前驱,没有后继。线性表的特征决定了我们很容易从头至尾依次扫描其中的每一个元素,而这一简单的遍历过程可以解决很多重要的算法问题。
线性表的遍历是在算法的简单性与高效性之间的一种权衡。基于线性表遍历的算法往往原理简单、易于实现和维护;但是其效率往往较低,有较大的提升空间。以线性表遍历为基础,我们可以进行更复杂的算法设计,例如,以遍历为基础对线性表中的元素进行划分以使用分治策略(参见6.1节),在线性表的元素间建立堆结构(参见7章),将线性表扩展到二维以表示图(参见第4、5章)等。但是在提升效率的同时,算法的设计、实现、维护的难度相应地增加。
线性表在实际存储的时候,有两种不同的方式:一种是数组,另一种是链表。数组是常数时间寻址,即访问任何位置的元素都是常数时间。链表是线性时间寻址,访问第k个元素的时间大致为O(k)。但是数组的大小是预先指定的,不能运行时动态调整。链表可以在运行时动态调整其大小。数组和链表的这一差别对有些算法是关键性的,如折半查找(参见9.1节)等。
本章我们以排序、选择、查找这3个经典算法问题为例,讨论基于线性表遍历的算法设计与分析。

《算法设计与分析》一一第3章 线性表的遍历相关推荐

  1. 算法设计与分析——顺序统计量:期望为线性时间的选择算法

    分类目录:<算法设计与分析>总目录 相关文章: · 顺序统计量:最大值与最小值 · 顺序统计量:期望为线性时间的选择算法 · 顺序统计量:最坏情况为线性时间的选择算法 选择算法指的是在一个 ...

  2. 算法设计与分析基础 第六章谜题

    习题6.1 9.数字填空 给定n个不同的整数以及一个包含n个空格的序列,每个空格之间事先给定有不等(>或<)符号,请设计一个算法,将n个整数填入这n个空格中并满足不等式约束.例如,数4,6 ...

  3. 算法设计与分析基础 第五章谜题

    习题5.1 11.Tromino谜题 Tromino是一个由棋盘上的三个1×1方块组成的L型骨牌.我们的问题是,如何用Tromino覆盖一个缺少了一个方块的2n×2n棋盘.除了这个缺失的方块,Trom ...

  4. 算法设计与分析基础 第七章谜题

    习题7.1 6. 祖先问题要求在一棵给定的n顶点二叉树中,确定一个顶点u是否是顶点v的祖先.设计一个属于O(n)的输入增强算法,使我们可以在常量时间内获得树的每一对顶点的足够信息,来对问题求解. 分析 ...

  5. 算法设计与分析复习第一二章(时间复杂度和蛮力法)

    算法复习一二章 第一章时间复杂度 第二章蛮力法 (1)查找问题 顺序查找 (2)排序问题 选择排序 起泡排序 (3)组合问题 0-1bag问题概述(略) (4)图问题 哈密顿回路 TSP问题 (5)几 ...

  6. 算法设计与分析——递归与分治策略——线性时间选择

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  7. 第一章 算法设计与分析基础知识

    系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 -- @[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 ...

  8. 算法设计与分析知识概括

    算法设计与分析知识概括 第一章 算法引论 1.算法分析的目的:估算该算法所需的内存空间和运行时间. 2.分析算法复杂度的目的:用以比较同一问题的不同算法:时间和空间的增长率作为衡量的标准. 3.算法是 ...

  9. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  10. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

最新文章

  1. mysql 索引 normal_mysql索引类型 normal, unique, full text
  2. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
  3. 作者:林立,华中科技大学计算机科学与技术学院讲师。
  4. JBPM中文乱码的一种解决方法
  5. [转载] python单词词典_Python 字典(Dictionary)
  6. python属于面向对象的还是面向过程的呀-面向过程和面向对象的理解
  7. 新版升级 DAEMON Tools v4.10 X86 32 Bits (with SPTD 1.50)
  8. html 5新增技术,HTML5新增元素,标签总结
  9. 5G大数据时代到来是全面多领域的变革
  10. Jmeter压力测试图片上传
  11. 计算机c盘program,电脑c盘program files(x86)文件夹可以删除吗
  12. 商用车市场「跌跌不休」,主动安全「让位」智能驾驶?
  13. 掌阅群分享技术点收集(app性能优化专攻)
  14. 如何查看linux当前版本
  15. 【VUE】图片预览放大缩小插件(推荐阅读)
  16. cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech
  17. 海海软件发布HHMeet MacOS和iOS版 – 加密保护Zoom视频会议,防止屏幕录像
  18. Python 网络爬虫工具:httpx 和 parsel(对比测评)
  19. 一卡通系统软件测试,公共交通一卡通互联互通测试平台的研究
  20. server2008服务器可以远程桌面连接,但是ping不通

热门文章

  1. Android支付实践(一)之支付宝支付详解与demo
  2. 宝塔建站 mysql在哪_宝塔面板安装LAMP,创建网站,创建数据库
  3. 判断是否是ie浏览器 前端js_jquery判断是否为ie浏览器的方法
  4. 接口自动化测试框架搭建(2、配置文件配置文件的读取)--python+HTMLTestRunnerCN+request+unittest+mock+db
  5. mysql修改密码1054_Mysql修改密码异常处理(ERROR 1054)
  6. java6和java7的区别_Java String的intern方法 在JDK6和JDK7的不同行为
  7. Java获取文件的目录_Java获取文件目录(路径)的方式
  8. lol最克制诺手的英雄_LOL“英雄恐惧症”,当你上单遇到诺手时,你会用什么英雄对线...
  9. 第二章 生成、打包、部署和管理应用程序及类型
  10. 请说出三种减少页面加载时间的方法