
------6.1 数据结构
文章平均质量分 52
子辰曦
这个作者很懒,什么都没留下…
展开
-
《数据结构与算法分析(c 描述)》—— 第二章笔记
上一篇我们实现两种算法解决选择问题,这一章可以看到一个更经典的例子:最大子序列和问题。它有多种算法解决,而且效率差异非常的大。下面我们来看问题,以及各个算法的具体实现,感受一下各个算法差异所在。最大子序列和问题问题描述: 给定整数 A1, A2, … , AN (可能有负数), 求 ∑jk=iAk \sum^j_{k=i} A_k 的最大值(方便起见,如果所有整数都为负数,则最大子序列和为 0 )例原创 2016-02-19 14:22:44 · 624 阅读 · 0 评论 -
《数据结构与算法分析(c 描述)》—— 第一章笔记
数据结构复习,从头看了《数据结构与算法分析(c 描述)》这本书,并自己动手实现书中的大部分例子与习题代码。1. 讨论内容通过 选择问题 ( selection problem ) 解释了不同算法在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性。问题: 从 N 个数中确定其中第 k 个最小者。算法1: 任意排序算法(冒泡排序)以递增顺序将数组排序,返回位置 k 上的元素。算法2原创 2016-02-19 13:12:30 · 851 阅读 · 0 评论 -
《数据结构与算法分析(c 描述)》—— 第四章笔记
这一章主要讲解了与树相关的知识。主要分析了二叉树、二叉搜素树,AVL 树,伸展树,在此我补充了满二叉数,完全二叉树。二叉树二叉树是有限个结点的集合,这个集合或者是空集,或者是由一个根结点和两株互不相交的二叉树组成,其中一株叫根的做左子树,另一棵叫做根的右子树。二叉树的性质:性质1:在二叉树中第 i 层的结点数最多为2^(i-1)(i ≥ 1)性质2:高度为k的二叉树其结点总数最多为2^k-1(原创 2016-02-21 10:22:35 · 691 阅读 · 0 评论 -
《数据结构与算法分析(c描述)》——二叉搜索树实现
实现二叉搜索树的插入、删除、查找、遍历(递归、非递归)遍历遍历实现可分递归、非递归两种版本。这里重点谈非递归实现。不额外使用栈的非递归遍历又称为 Morris 遍历。Morris 遍历,使用无堆栈,O(1) 空间进行二叉树遍历。它的原理很简单,利用所有叶子结点的右指针,指向其后继结点,组成一个环,在第二次遍历到这个结点时,由于其左子树已经遍历完了,则访问该结点。算法伪代码:while 没有结束原创 2016-02-21 17:04:53 · 639 阅读 · 1 评论 -
《数据结构与算法分析(c描述)》—— 插入排序&希尔排序
一、插入排序插入排序有点像打扑克牌,每起到一张牌,就将其插入到已经排序好的手牌中。精确一点的描述是,插入排序由 N - 1 趟排序组成,对于第 P 趟,我们将位置 P 上的元素向左移动到它在前 P + 1 个元素中的正确位置。非递归的代码实现如下:void insertSort(int a[], int size) { int i, j; int temp; for (i =原创 2016-02-24 19:06:16 · 541 阅读 · 0 评论 -
《数据结构与算法分析(c描述)》—— 归并排序
归并排序是分治法的一个好例子,属于基于比较的内部/外部排序算法。普通的归并算法具有 O(n * log(n)) 的时间和 O(n) 的空间复杂度。就地归并算法能帮助降低额外空间开销,使得归并排序更高效。归并排序之所以可以轻松应用到外部排序上,是因为归并排序的归并过程是顺序扫描的,可以用来处理顺序存储的文件,多路归并还可以用多线程或是并行计算来加速,这样处理大文件就方便了。而想随机访问一个文件,就没那原创 2016-02-24 21:20:30 · 579 阅读 · 0 评论 -
《数据结构与算法分析(c 描述)》—— 第六章笔记
一、优先队列优先队列是允许至少两种操作的数据结构:Insert(插入),DeleteMin(删除最小者)简单的实现方式时使用二叉堆。堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。下面分别介绍优先队列基本操作的实习二、入队 (push)原创 2016-02-23 11:15:35 · 690 阅读 · 1 评论 -
《数据结构与算法分析(c描述》—— 快速排序
1. 快速排序快速排序是最快的已知排序算法,平均运行时间为 O(NlogN) ,最坏情况的性能为 O(N^2)。将数组 S 快速排序由下列简单的四步组成:如果 S 中元素个素是0或1,则返回取 S 中任一元素作为枢纽元将 S - {v} (S 中其余元素)分成两个不相交的集合,S1 中元素小于 v,S2 中元素大于 v对 S1、S2递归调用c 代码实现如下:void Qsort(int a原创 2016-02-26 14:51:41 · 957 阅读 · 0 评论