随笔分类 - 算法
常见算法描述和交流分享
摘要:什么叫做栈: 在数据结构里,后进先出(LIFO)先出顺序。例如一摞叠在一起的盘子:存盘子的时候,从下往上一个一个放;取的时候,从上往下一个一个依次取。 栈既可以用数组来实现,也可以用链表来实现。 用数组实现的栈,叫顺序栈,用链表实现的栈,叫链式栈。 public class ArrayStack {
阅读全文
摘要:定义: 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。 即不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。 贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不
阅读全文
摘要:回溯法-深度优先算法 一、概述 回溯算法是把问题的解空间转化成了图或树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解和最优解。 基本思想类似于 图的深度优先搜索 二叉树的后续遍历 【分支限界法:广度优先搜索。思想类似于图的广度优先遍历。二叉树的层序遍历。】 详细描述:
阅读全文
摘要:KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法。 对于字符串匹配,最简单的做法是暴力法双层循环依次对比。 int search(String pat, String txt) { int M = pat.length; int N = txt.length; f
阅读全文
摘要:链表一般分为单链表、双向链表和循环链表。 单链表:链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”,结点除了存储数据之外,还记录链表的下一个结点的地址next。 class Node{ Item item; Node next;} 其中有两个结点比较特殊,分别是第一个结
阅读全文
摘要:定义: 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 数组优点:支持随机访问,根据下标随机访问的时间复杂度为 O(1)。 数组的操作: 查找:如果数组已排序,利用二分查找,时间复杂度为logn,否则顺序查找,时间复杂度为N。 public int r
阅读全文
摘要:红黑树是一种性能非常优秀的数据结构,关键在于它能保证最坏的性能也是对数的。红黑树的本质是一棵2-3树。 算法4里对2-3树,偏左红黑树的描述更简单和直观,比算法导论更容易理解。算法导论里实现红黑树插入删除要几百行代码,而LLRB只需要几十行。 红黑树前置准备: 2-3树定义: 2-3树的主要特点就是
阅读全文
摘要:算法定义: 编写一段计算机程序一般都是实现一种已有的方法来解决某个问题。 这种方法大多和使用的编程语言无关--它适用于各种计算机以及编程语言。是这种方法而非计算机程序本身描述来解决问题的步骤。在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法。 我
阅读全文
摘要:算法: 1、堆的定义:当一棵二叉树的每个结点都大于等于它的两个子节点时,它被称为堆有序。 2、堆排序可以分为两个阶段。在堆的构造阶段中,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按递减顺序取出所有元素并得到排序结果。 复杂度: 用下沉操作由N个元素构造堆只需少于2N次比较以
阅读全文
摘要:算法: 快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的;归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。在第一种情况中,递归调用发生在处理整
阅读全文
摘要:算法: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。 归并排序最吸引人的性质是它能够保证将任意长度为N的数组排序所需时间和NlogN成正比;它的主要缺点则是它所需的额外空间和N成正比。 复杂度: 对于长度为N的任意数组,自顶向下的归并排序需要1/2NlgN至NlgN次
阅读全文
摘要:算法: 希尔排序的思想是使数组中任意间隔为h的元素都是有序的。这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编织在一起组成的一个数组。在进行排序时,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。用这种方式,对于任意以1结尾的h序列,我们都能够
阅读全文
摘要:算法: 像整理牌一样,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。这种算法叫做插入排序。 与选择排序一样,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移
阅读全文
摘要:算法: 1、首先,找到数组中最小的那个元素。 2、其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换)。 3、再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。 这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最
阅读全文
摘要:大学有门课程,数据结构 那时对这课不够重视 考研时,因为是专业课,翻书学了点 后来写程序,发现很多时候,高性能还是得靠算法来解决 对于平时工作来讲,有些算法可能是屠龙技,不过,有时候,还是得做点浪费时间的事情。
阅读全文