
算法
Gamma Gao
这个作者很懒,什么都没留下…
展开
-
快速排序Quicksort
快速排序(Quicksort)是对冒泡排序的一种改进, 采用的思想是分治思想。"快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元原创 2018-01-23 09:32:47 · 434 阅读 · 0 评论 -
归并排序Mergesort
归并排序Mergesort是个稳定的排序,时间复杂度O(nlogn), 空间复杂度是O(n), 发明者是 冯·诺伊曼。归并排序具体工作原理如下(假设序列共有n个元素):1. 将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素。2. 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素。3. 重复步骤2,原创 2018-01-23 09:45:12 · 445 阅读 · 0 评论 -
堆(1)--堆排序HeapSort
1. 堆或称二叉堆二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。堆一般都用数组来表示, 若数组下标从0开始, i 结点的父结点下标P...原创 2018-03-11 21:54:44 · 465 阅读 · 0 评论 -
堆(2)--最大优先级队列
1. 优先级队列优先级队列是一种用来维护由一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key。一个最大优先级队列支持以下操作: INSERT(S, x): 把元素x插入集合S。 MAXIMUM(S): 返回S中具有最大关键字的元素。 EXTRACT-MAX(S): 去掉并返回S中的具有最大关键字的元素。 INCREASE...原创 2018-03-11 22:19:10 · 603 阅读 · 0 评论 -
最长公共子序列和最长公共子串
动态规划与分治法之间的区别:1.divide and conquer algorithm分治法是指将问题分成一些独立的子问题,递归的求解各子问题。2.dynamic programming algorithm动态规划适用于这些子问题不是独立的情况,也就是各子问题包含公共子问题。最长公共子序列和最长公共子串的区别:找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的;而最长公共子序列则并不要...原创 2018-04-12 15:59:03 · 660 阅读 · 0 评论