判断单链表是否有环、求环长和环入口最优算法

判断单链表是否有环、求环长和环入口最优算法

判断单链表是否有环是一个十分经典的算法问题,许多考试或者面试都有很大的几率出现。如果事先对此没有一定的理解,临场发挥可能就比较困难了。   判断链表是否有环 首先定义两个指针 slow 和 fast,初始都指向链表头指针 head; 然后,slow 每走一步(每次移动一个节点),fast 走两步(移动两个节点); 如果 fast 遇到了 NULL……

用最通俗易懂的语言描述KMP算法及证明

用最通俗易懂的语言描述KMP算法及证明

KMP 算法是一种字符串模式匹配算法,它可以实现在 O(n+m)的时间复杂度下完成串的模式匹配。对于刚刚接触KMP 算法的人来说,一般是都很难理解:为什么KMP 算法可以完成模式匹配,KMP 中的 next 数组又究竟是什么? 下面我将简单讲解一下我个人对KMP 算法的的理解,以及数学证明。 KMP 算法的简单理解 首先假设KMP 算法中,用 S 来表示主串……

用最通俗的语言和漫画来介绍二叉堆

用最通俗的语言和漫画来介绍二叉堆

二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。下面通过一组漫画幽默风趣、通俗易懂地介绍二叉堆的定义以及基本操作(插入、删除等)。   —————  第二天  ———……

查找单链表中倒数第k个节点的最优算法

查找单链表中倒数第k个节点的最优算法

假设单链表只给出头指针,长度为 n,在不改变链表的前提下,查找链表中倒数第 k 个位置上的结点。要求设计尽可能高效的算法(最优算法),并分析时间复杂度和空间复杂度。 最优算法的基本设计思想 定义两个指针变量 p 和 q,初始时均指向第一个结点; 然后 p 随着链表移动; 当 p 指针移动到第 k 个结点时,q 指针开始与 p 指针同步移动,也就是 p 移动……

算法工程师养成记(附精选面试题)

算法工程师养成记(附精选面试题)

通往机器学习算法工程师的进阶之路是崎岖险阻的。《线性代数》《统计学习方法》《机器学习》《模式识别》《深度学习》,以及《颈椎病康复指南》,这些书籍将长久地伴随着你的工作生涯。 *编辑配图 除了拥有全面、有条理的知识储备,我认为,想成为一名优秀的算法工程师,更重要的是对算法模型有着发自心底的热忱,对研究工作有一种匠心精神。这种匠心精神,直白来讲,可以概括……

求两个升序序列的中位数的最优算法

求两个升序序列的中位数的最优算法

设计一个在时间和空间两方面都尽可能高效的算法,找出两个升序序列 A 和 B 的中位数(也就是两个序列合起来的中位数),最优算法思想如下: 设 A、B 的长度为 n,中位数分别为 a、b; 1)若 a=b,则 a 或 b 即为所求中位数,算法结束; 2)若 a<b,则舍弃 A 中较小的一半,同时舍弃序列 B 中较大的一半,要求两次舍弃的长度相等;   ……

数组循环左移最优算法:逆置算法

数组循环左移最优算法:逆置算法

设将 n 个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法,将 R 中的元素序列循环左移 p 个位置。 该问题的一个最优解为逆序算法。具体算法设计思路、时间复杂度与空间复杂度分析及算法源码(C 语言)如下。 算法设计 首先,将数组分为两部分 a、b,a 表示前 p 个元素,b 代表剩下的元素; 那么原问题就可以看作是:将数组 a……

【转载】漫画戏说:如何破解MD5加密算法

【转载】漫画戏说:如何破解MD5加密算法

 本文来自梦见(微信号:dreamsee321),转载自黑客技术与网络安全公众号。 本文将通过漫画的形式来解释:如何破解MD5加密算法。其中包括了暴力枚举法、字典法、彩虹表法三种破解MD5加密算法的方法。MD5破解原理都是利用了,被加密的数据与MD5加密算法所生成的哈希值并不是一一对应的关系,而是多对一,也就是说不同的数据经过MD5加密算法处理后……

【转载】漫画趣解MD5算法

【转载】漫画趣解MD5算法

  本文来自梦见(微信号:dreamsee321),转载自算法与数据结构公众号。 本文将通过漫画的形式来通俗易懂的讲述什么是MD5加密算法(Message Digest Algorithm MD5(中文名为消息摘要算法第五版)),MD5加密算法的底层原理以及MD5加密算法的破解算法方法。 ……