Algorithms
第一序列丶
脱离了高级趣味的码农,Log分析员,工具人,打工人,Bug制造者,接锅侠
展开
-
Java -- 栈、队列等数据结构的简单链表实现
Java -- 栈、队列等数据结构的链表实现链表是一种递归的数据结构,它或者为null,或者是指向一个节点的引用,该节点含有一个泛型的元素和一个指向另一条链表的引用。在链表头部插入元素,插入的原始最后出现在链表的首部;在链表尾部插入元素,插入的元素最后出现在链表的尾部;删除链表中间部分的节点,则需要遍历链表(左向右是首到尾)。一般在某个数据结构类的内部定义一个表示链表节点的内部类:原创 2016-10-08 14:49:22 · 790 阅读 · 0 评论 -
Algorithm——二叉搜索树(十四)
Algorithm——二叉搜索树《算法导论》介绍了二叉搜索树的基本实现。二叉搜索树是一种常见的数据结构,它的定义是:“二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二...原创 2018-05-27 22:22:49 · 324 阅读 · 0 评论 -
Algorithm——简单数据结构之队列和链表(十三)
Algorithm——简单数据结构之队列和链表队列是一种先进先出策略,而链表中的各元素按线性顺序排列。数组的线性顺序是由数组的下标决定的,但链表的顺序是由各个对象里的指针决定的。队列有入队和出队操作,链表则有插入、删除、查询表中节点的操作。队列和双向链表的一种简单Java实现代码如下:/** * * 队列是一种先进先出策略,有入队和出队操作 * * 通过数组实现的简单队列 * *...原创 2018-05-13 22:34:11 · 256 阅读 · 0 评论 -
Algorithm——简单数据结构之栈(十二)
Algorithm——简单数据结构之栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。由此可知,栈实现的是一种后进先出的策略...原创 2018-05-10 22:27:11 · 214 阅读 · 0 评论 -
Algorithm ——数组打乱算法(七)
Algorithm ——数组打乱算法 Fisher–Yates shuffle 算法是一个非常高效又公平的随机排序算法,它的时间复杂度为O(n)。它的实现伪代码大致是:n = A.length;for i = 1 to n swap A[i] with A[RANDOM(i, n)]在进行第i次迭代时,元素A[i]时从元素A[i]到A[n]中随机选取的。第i原创 2018-04-25 22:44:18 · 881 阅读 · 0 评论 -
Algorithm——一般数组元素选择问题(十一)
Algorithm——一般数组元素选择问题《算法导论》中引出了一个一般性的数组元素选择问题:即在一个元素各异的数组A中,选择其中第i小的元素(即如果i=1,则表明选择最小的那个元素)。该算法的伪代码如下,它使用了之前介绍快速排序中的随机子数组划分方法:RANDOMIZED-SELECT(A, p, r, i) if p == r return A [p]原创 2018-05-02 22:42:31 · 287 阅读 · 0 评论 -
Algorithm —— 矩阵乘法的Strassen算法(六)
Algorithm —— 矩阵乘法的Strassen算法根据矩阵的乘法知识,两个NxN的矩阵A和B相乘的结果矩阵C的暴力算法是: /** * 一般的暴力矩阵乘法运算;矩阵A和B都是NxN的方阵 * * @param A * 参加运算的矩阵之一A * @param B * 参加运算的矩阵之一B * @return原创 2018-04-24 22:43:52 · 1232 阅读 · 0 评论 -
Algorithm——快速排序(十)
Algorithm——快速排序对于包含n个数的输入数组来说,快速排序是一种最坏情况实际复杂度为O(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn)。(原址排序:在排序算法中,如果输入数组中仅有常数个元素需要在排序过程中存储在数组之外,则称排序算法是原址的)与归并排序一样原创 2018-05-01 22:09:12 · 266 阅读 · 0 评论 -
Algorithm——优先队列(九)
Algorithm——优先队列堆除了可以实现前面所述的堆排序算法,还可以用来实现优先队列。优先队列是一种用来维护一组元素构成的集合S的数据结构,其中每一个元素都有一个相关的值,称为“关键字”。一个最大优先队列支持以下操作:INSERT(S, x):把元素x插入集合S中MAXIMUM(S):返回S中具有最大关键字的元素EXTRACT-MAX(S):去掉并返回S中具有最大关键字的元原创 2018-05-01 11:43:16 · 266 阅读 · 0 评论 -
Algorithm——堆排序算法(八)
Algorithm——堆排序算法在分析堆排序之前,我们先来回顾一些基本概念:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。而完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树(即叶子结点都是从左到右依次排布...原创 2018-05-01 09:33:31 · 280 阅读 · 0 评论 -
Algorithm —— 最大子数组求解(五)
Algorithm —— 最大子数组求解《算法导论》中引出了一个求某个数组的和最大子数组问题:在原数组A中,求一个子数组a,它的各元素值的和是A的各个子数组中最大的;且子数组a的各元素下标值要连续。要注意的是,如果要求某个数组的最大子数组,则此数组中的值必须要包含负值;否则,求最大子数组是没有意义的,因为此时,整个数组的和肯定是最大的,就不必再求了。我们使用分治策略来解决该问题。假定我们要寻找数组...原创 2018-04-15 22:11:29 · 201 阅读 · 0 评论 -
Algorithm —— 归并排序(四)
Algorithm —— 归并排序在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅立叶变换(快速傅立叶变换)。另一方面,理解及设计分治法算法原创 2018-04-15 16:50:51 · 342 阅读 · 0 评论 -
Algorithm —— 冒泡排序(三)
Algorithm -- 冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。冒泡排序算法的运作如下:(从后往前)1、比较相邻...原创 2018-04-15 13:57:28 · 343 阅读 · 0 评论 -
Algorithm ——选择排序(二)
Algorithm ——选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。选择排序Jav原创 2018-04-07 21:10:34 · 177 阅读 · 0 评论 -
Algorithm —— 插入排序(一)
Algorithm —— 插入排序 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要原创 2018-04-07 21:03:59 · 197 阅读 · 0 评论 -
Algorithm——红黑树(十五)
Algorithm——红黑树《算法导论》介绍了红黑树这种重要的数据结构。红黑树是一颗二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色(RED or BLACK)。通过对任何一条从根到叶子节点的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的。根据《导论》中的介绍,红黑树中的节点对象相比之前二叉搜索树中的节点对象多了一个表示颜色属性的color...原创 2018-06-12 22:47:03 · 398 阅读 · 0 评论