《算法导论》题目和笔记——第二章

2.1-2

 1 void insert_sort(vector<int> &v)
 2 {
 3     for (int i = 1; i < v.size(); ++i)
 4     {
 5         int key = v[i];
 6         int j = i - 1;
 7         while (j >= 0 && key > v[j])
 8         {
 9             v[j + 1] = v[j];
10             --j;
11         }
12         v[j + 1] = key;
13     }
14 }
时间: 2024-08-03 07:37:58

《算法导论》题目和笔记——第二章的相关文章

《算法导论》读书笔记--第二章

2.1插入排序 伪代码与真代码的区别在于,伪代码我们使用最简洁.最清晰的表示方法来说明给定的算法.这样的原则下,在伪代码中就会出现英语. 插入排序的特点:1.少量元素时,是一种有效的算法:2.直观想象:按顺序排扑克牌:3.是一种原址排序算法,即在同一个数组中完成排序工作.下面是伪代码: //INSERTION-SORT for j = 2 to A.length key = A[j] i = j - 1 while i > 0 and A[i] > key A[i+1] = A[i] i =

《算法导论》读书笔记--第二章 2.2 分析算法

2.2分析算法 分析算法的结果意味着预测算法需要的资源.虽然有时候关心内存.通讯或者计算机硬件,但是通常我们想度量的是时间. 在分析算法之前,要有一个实现技术的模型,包括描述所用资源及其代价的模型.我们假定一种通用的单处理器计算模型—随机访问机(random-access machine,RAM)来作为我们的实现技术,算法可以用计算机程序来实现.在RAM模型中,指令一条接一条执行,并没有并发操作.RAM模型包含真是计算机中常见的指令:算术指令(如加法.减法.乘法.取余.向上取整.向下取整).数据

《算法导论》读书笔记--第二章 2.3 设计算法

我们可以使用的算法设计技术有很多.插入排序用的是增量方法,即在已经排好的数组中不断加入新的元素.下面考虑一种被称为"分治法"的设计方法. 2.3.1分治法 分治法的思想:将原问题分解为几个规模较小但是类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解.分治模式在每层递归时有三个步骤: 分解原问题为若干子问题: 解决这些子问题,递归地求解各子问题,若子问题规模足够小,则直接求解: 合并这些子问题的解成原问题的解. 归并排序算法完全遵循分治模式,操作如下:

《算法导论》读书笔记--第一章

第一章 算法在计算中的作用 一.什么是算法?为什么算法值得研究?相对于计算机中使用的其他技术来说算法的作用是什么? 算法就是任何良定义的计算过程,该过程取某个值或者值的集合作为输入并产生某个值或者值的集合作为输出.这样算法就是把输入转换成输出的计算步骤的一个序列. 若对每个输入实例算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题.注意:不正确的算法只要其错误率可控时可能是有用的,但是我们通常只关心正确的算法. 数据结构是一种存储和组织数据的方式,旨在便于访问和修改.

《算法导论》学习笔记第一章(算法在计算中的作用)

第一章主要讲了一些概念,什么是算法,为什么算法值得研究. 印象比较深的是章节的最后一句,是否具有算法知识与技术的坚实基础是区分真正熟练的程序员与初学者的一个特征.使用现代计算技术,如果你对算法懂得不多,你也可以完成一些任务,但是,如果有一个好的算法背景,那么你可以做的事情就多得多. Having a solid base of algorithmic knowledge and technique is one characteristic that separates the truly sk

【算法导论】学习笔记——第6章 堆排序

堆这个数据结构应用非常广泛,数字图像处理的算法里也见过.似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓.堆虽然是一棵树,但显然没必要非得用树结构实现堆排序.堆排序的性质很好,算法时间复杂度为O(nlgn). 1. 堆排序的简要说明.二叉堆可以分为两种形式:最大堆和最小堆.在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] >= A[i]:在最小堆中,最小堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] <= A[

《算法导论》读书笔记(一)

本章是本书的开篇,介绍了什么是算法,为什么要学习算法,算法在计算机中的地位及作用. 算法(algorithm)简单来说就是定义良好的计算机过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出.即算法就是一系列的计算步骤,用来将输入数据转换成输出数据. 书中有一句话非常好: Having a solid base of algorithm knowledge and technique is one characteristic that separates the truly skill

《算法导论》读书笔记(三)

本章介绍了快速排序及其算法分析,快速排序采用的是分治算法思想,对包含n个数的输入数组,最坏情况下运行时间为θ(n^2),但是平均性能相当好,期望的运行时间为θ(nlgn).另外快速排序能够就地排序(我理解是不需要引入额外的辅助空间,每次划分能确定一个元素的具体位置),在虚拟环境中能很好的工作. 1.快速排序的描述 快速排序算法采用的分治算法,因此对一个子数组A[p-r]进行快速排序的三个步骤为: (1)分解:数组A[p...r]被划分为两个(可能为空)子数组A[p...q-1]和A[q+1...

《算法导论》读书笔记(五)

摘要: 本章介绍了二叉查找树的概念及操作.主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值.最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作.在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基本动态集合的操作平均时间为θ(lgn). 1.二叉查找树 二叉查找树是按照二叉树结构来组织的,因此可以用二叉链表结构表示.二叉查找树中的关键字的存储方式满足的特征是:设x为二叉查找树中的一个结点.如果