摘要:堆可以理解成一个完全二叉树,树上的每个节点都对应着一个元素。 存储堆的数组A通常包括两个属性: A.length 给出数组元素的个数 A.heap-size 存储在数组中的堆元素的数量 也就是说,虽然[1, A.length]中可能都存有数据,但实际上只有[1, A.heap-size]中存放的是有
阅读全文
|
随笔分类 - 算法导论学习
摘要:堆可以理解成一个完全二叉树,树上的每个节点都对应着一个元素。 存储堆的数组A通常包括两个属性: A.length 给出数组元素的个数 A.heap-size 存储在数组中的堆元素的数量 也就是说,虽然[1, A.length]中可能都存有数据,但实际上只有[1, A.heap-size]中存放的是有
阅读全文
摘要:《算法导论》中讲分治策略的第一道例题就是一道"最大子数组问题",抽象出数学模型,题意是想求出数组中的连续子数组和的最大值。 很明显,暴力求解不加任何优化是O(n^2)的时间复杂度(暴力枚举左和右的组合,然后进行求和),在大数据范围时会有超时的风险,所以我们要进行算法的优化。 使用分治策略的求解方法
阅读全文
摘要:分治法的思想是将原问题分解为几个规模小的同类问题,递归地求解这些子问题,然后再将子问题的解合并去解决原问题。 分治法每层递归可以分为三个步骤: 1.分解:将大的问题分解成同类型的小问题 2.解决:递归解决各个子问题,直到当前子问题无法继续分割或者小于某个规模 3.合并:将分割后的子问题的解依次合并,
阅读全文
摘要:插入排序的原理是将无序数组遍历,将下一个元素按排序规律插入到已经排好的部分中。 在书中给出的伪代码是这样的: INSERTION-SORT(A) for j = 2 to A.length key = A[i] //Insert A[j] into the sorted sequence A[1..
阅读全文
|