AlgorithmAndDataStructure
15wylu
小学生程序员
展开
-
堆、堆排序、优先队列
文章目录堆、堆排序、优先队列1. 堆1.1 最大堆1.2 最小堆2. 堆的逻辑结构与物理存储3. 堆的操作4. 堆的操作的复杂度5. 堆的自我调整5.1 插入节点5.2 删除节点5.3 参考实现6. 堆排序6.1 构建二叉堆6.2 堆排序过程6.3 算法步骤6.4 参考实现6.5 堆排序的复杂度6.6 堆排序和快排对比7. 优先队列7.1 优先队列种类7.2 利用堆的特性实现优先队列7.2.1 入...原创 2018-10-24 22:42:07 · 1092 阅读 · 0 评论 -
选择排序 Select Sort
文章目录选择排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References选择排序1. 基本原理初始时在序列中找到最小(大)元素,放到序列的起始(末尾)位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的尾部(首部)。以此类推,直到所有元素均排序完毕。2. 算法步骤首先在未排序序列中找到最小(大)元素,存放到排序...原创 2019-01-30 12:21:52 · 225 阅读 · 0 评论 -
插入排序 Insert Sort
文章目录插入排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References插入排序1. 基本原理每步将一个待排序的元素,将其插入前面已排好序的部分中,直到全部插入完为止。2. 算法步骤将待排序序列第一个元素看做已排序序列,把第二个元素到最后一个元素当成是未排序序列从未排序序列中取出下一个元素记为 a,在已排序的序列中从后向前扫描如果该元素(已...原创 2019-01-30 12:24:30 · 203 阅读 · 0 评论 -
希尔排序 Shell Sort
文章目录希尔排序1. 基本原理2. 算法步骤3. 算法图解4. 参考实现5. 复杂度分析6. References希尔排序1. 基本原理希尔排序,也称缩小增量排序,是插入排序的一种更高效的改进版本,是不稳定的排序算法。希尔排序是基于插入排序的以下两点性质而提出的改进方法:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每...原创 2019-01-30 12:28:16 · 490 阅读 · 0 评论 -
归并排序 Merge Sort
文章目录归并排序1. 基本原理2. 算法步骤3. 算法图解4. 动画演示5. 参考实现6. 复杂度分析7. References归并排序1. 基本原理归并排序算法是分治策略实现对n个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。2. 算法步骤申请空间,使其大小为两个已经排序序列之...原创 2019-01-30 12:36:39 · 502 阅读 · 0 评论 -
快速排序 Quick Sort
文章目录快速排序1. 基本原理2. 算法步骤3. 算法图解4. 动画演示5. 参考实现6. 复杂度分析7. References快速排序1. 基本原理快速排序是图灵奖得主 C. R. A. Hoare 于 1960 年提出的一种划分交换排序,它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。分治法的基本思想是:将原问题分解为若干个规模更小但结构与...原创 2019-01-30 12:40:03 · 378 阅读 · 0 评论 -
堆排序 Heap Sort
文章目录堆排序1. 基本原理2. 算法步骤3. 算法图解3.1 构建二叉堆3.2 堆排序过程4. 动画演示5. 参考实现6. 复杂度分析7. References堆排序1. 基本原理传送门 堆、堆排序、优先队列2. 算法步骤由输入的无序数组构造一个最大堆,作为初始的无序区把堆顶元素(最大值)和堆尾元素互换把堆(无序区)的尺寸缩小1,并调用sinking函数,目的是把新的数组顶端数据...原创 2019-01-30 12:49:08 · 368 阅读 · 0 评论 -
计数排序 Counting Sort
文章目录计数排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References计数排序1. 基本原理使用一个新的数组记录每个元素出现的次数,然后直接遍历输出这个数组里面的每一个大于0的元素的下标值,下标值输出的次数为对应的计数。2. 算法步骤花O(n)的时间扫描一下整个序列 arr,获取最小值 min 和最大值 max开辟一块新的空间创建新的数组 ...原创 2019-01-30 12:54:13 · 506 阅读 · 0 评论 -
桶排序 Bucket Sort
文章目录桶排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References桶排序1. 基本原理桶排序也叫箱排序。工作原理是将数组元素映射到有限数量个桶里,利用计数排序可以定位桶的边界,每个桶再各自进行桶内排序(使用其它排序算法或以递归方式继续使用桶排序)。2. 算法步骤设置固定数量的空桶把数据放到对应的桶中对每个不为空的桶中数据进行排序拼接不...原创 2019-01-30 12:56:30 · 520 阅读 · 0 评论 -
基数排序 Radix Sort
文章目录基数排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References基数排序1. 基本原理将所有待比较正整数统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始进行基数为10的计数排序,一直到最高位计数排序完后,数列就变成一个有序序列(利用了计数排序的稳定性)。2. 算法步骤将所有待比较数值(正整数)统一为同样的数位长度,数位较短...原创 2019-01-30 12:59:46 · 809 阅读 · 0 评论 -
冒泡排序 Bubble Sort
文章目录冒泡排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References冒泡排序1. 基本原理依次比较相邻的两个元素,如果相邻的两个元素的顺序是错误的,则将它们交换,直至没有元素需要交换,排序完成。在实现上有两种方法:每一轮让未排序的最大元素交换到正确位置,以下称之为"最大冒泡"每一轮让未排序的最小元素交换到正确位置,以下称之为"最小冒泡"...原创 2019-01-30 12:15:40 · 406 阅读 · 0 评论 -
BFPRT算法 线性时间选择第k小元素
文章目录BFPRT算法1. 应用场景2. 基本思想3. 算法实现4. 复杂度分析5. ReferencesBFPRT算法1. 应用场景线性时间内,从无序列表找到第k小的元素。2. 基本思想首先把数组按5个数为一组进行分组,最后不足5个的忽略。对每组数进行排序(如插入排序)求取其中位数。把上一步的所有中位数移到数组的前面,对这些中位数递归调用BFPRT算法求得他们的中位数。将上一步得...原创 2019-01-08 21:08:33 · 983 阅读 · 0 评论 -
最大公约数与最小公倍数
最大公约数与最小公倍数最大公约数欧几里德算法,也称辗转相除法定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)即a和b的最大公约数等于b和a%b的最大公约数证明a可以表示成a = kb + r,则r = a mod b假设x是a,b的一个公约数,则有x|a, x|b, 而r = a - kb,因此x|r因此x也是(b,a mod b...原创 2019-01-08 20:57:33 · 4567 阅读 · 0 评论 -
算法设计与分析总结
文章目录算法复习总结 - by luwenye1 算法的特性1.1 定义1.2 算法的特性1.3 算法的性能标准2 时间复杂度2.1 常见算法时间复杂度2.2 算法复杂性分析3 递归3.1 二分查找(递归)3.2 二分查找(非递归)3.3 快速排序3.3.1 递归3.3.2 非递归4 分治法4.1 基本思想4.2 适用条件4.3 归并排序4.4 求逆序对数4.5 快速选择算法4.6 线性时间选择(...原创 2018-10-22 17:56:03 · 2980 阅读 · 2 评论 -
长整数四则运算_双向循环链表
[ 问题描述 ]设计程序实现两个任意长整数的求和运算。[ 基本要求 ]利用双向循环链表实现长整数的存储, 每个结点含一个整型变量. 任何整型变量的范围是 -(215-1)~(215-1)。输入和输出形式: 按中国对于长整数的表示习惯, 每四位一组,组间用逗号隔开。[ 测试数据 ](1) 0;0;应输出"0"。(2) -2345,6789;-7654,3211; 应输出"-1,0000...原创 2017-04-07 11:51:27 · 7861 阅读 · 4 评论 -
约瑟夫环_循环单链表
/* * 问题描述: * 编号为1,2,...,n 的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。 * 一开始任选一个正整数作为报数上限值 m,从第一个人开始。按顺时针方向自 1 开始顺序报数,报到m 时停止报数。 * 报m的人出列,将他的密码作为新的m 值, 从他在顺时针方向上的下一个人开始重新从1 报数,如此下去,直至所有人全部出列为止。 */...原创 2017-03-31 11:14:30 · 474 阅读 · 0 评论 -
KMP算法
文章目录KMP1. KMP算法的来源2. 前缀和后缀的定义3. KMP算法的关键4. BF算法(Brute-Force暴力匹配)5. next数组计算6. KMP算法7. 时间复杂度8. ReferencesKMP1. KMP算法的来源Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Kn...原创 2018-11-06 10:41:38 · 164 阅读 · 0 评论 -
剑指Offer Java
文章目录剑指Offer1. 数据结构1.1 数组1.1.1 数组中重复的数字1.1.2 二维数组中的查找1.2 字符串1.2.1 替换空格1.2.2 把字符串转换成整数1.3 链表1.3.1 从尾到头打印链表1.4 树1.4.1 重建二叉树1.4.2 二叉树的下一个结点1.5 栈和队列1.5.1 用两个栈实现队列2. 算法和数据操作2.1 递归和循环2.1.1 斐波那契数列2.1.2 青蛙跳台阶2...原创 2018-11-07 20:33:49 · 1648 阅读 · 0 评论 -
算符优先分析求中缀表达的值
文章目录算符优先分析求中缀表达的值1. 定义一个表达式的二义性文法2. 定义运算规则3. 算符优先关系表4. 算符优先归约过程5. 计算中缀表达式的值算符优先分析求中缀表达的值1. 定义一个表达式的二义性文法E→E+E ∣ E−E ∣ E∗E ∣&amp...原创 2018-12-23 14:05:36 · 933 阅读 · 0 评论 -
快速选择算法
文章目录快速选择算法1. 应用场景2. 基本思想3. C实现3.1 方法一3.2 方法二3.3 递归写法4. Java实现5.References快速选择算法1. 应用场景快速选择是一种从无序列表找到第k小元素的选择算法。2. 基本思想快速选择的总体思路与快速排序一致,选择一个元素作为基准来对元素进行分区,将小于和大于基准的元素分在基准左边和右边的两个区域。不同的是,快速选择并不递归访问...原创 2019-01-11 14:42:12 · 1802 阅读 · 0 评论 -
牛客网 2018校招真题 招商银行信用卡 不想出差的HR
Description牛客网 2018校招真题 不想出差的HRSolving Ideas详情请参考 Nim游戏Nim游戏是经典的公平组合游戏(ICG),满足以下条件的游戏是ICG:有两名选手;两名选手交替对游戏进行移动(move),每次移动选手可以在有限的合法移动集合中任选一种进行移动;对于游戏的任何一种可能的局面(position),合法的移动集合只取决于这个局面本身,不取决于轮...原创 2019-01-24 15:09:35 · 360 阅读 · 1 评论 -
二分查找 BinarySearch
二分查找算法前提条件数组有序时间复杂度二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用O(logn)O(logn)O(logn)时间完成搜索任务基本思想将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较。如果x=a[n/2],则找到x,算法终止。如果x<a[n/2], 则只要在数组a的左半部继续搜索x。如果x>a[n/2],则只要在数组...原创 2019-01-08 20:50:52 · 226 阅读 · 0 评论 -
应用密码学总结
文章目录应用密码学总结1 概述1.1 信息安全的三个基本的目标1.2 数据的安全基于密钥的保密,而不是算法的保密1.3 公钥密码使得无密钥传输的保密通信成为可能1.4 密码学的基本概念1.5 密码算法分类-I1.6 密码算法分类-II2 数论基础2.1 互素2.2 模运算2.3 逆元3 古典密码3.1 单表密码体制3.2 多表密码体制4 安全电子邮件方案4.1 PGP产生的背景4.2 PGP提供了...原创 2019-03-01 17:30:09 · 10959 阅读 · 3 评论