算法
文章平均质量分 52
DreamSoar
这个作者很懒,什么都没留下…
展开
-
KMP 算法(1):如何理解 KMP
http://www.61mon.com/index.php/archives/183/ 系列文章目录 KMP 算法(1):如何理解 KMP KMP 算法(2):其细微之处 一:背景TOC 给定一个主字符串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,即串的模式匹配问题。今天来介绍解决这一问题的常用算法之一,Knuth-Morris转载 2017-06-28 10:06:15 · 450 阅读 · 0 评论 -
递归式求解-主方法
http://pytlab.org/2017/09/10/%E9%80%92%E5%BD%92%E5%BC%8F%E6%B1%82%E8%A7%A3-%E4%B8%BB%E6%96%B9%E6%B3%95/ 本文对递归式求解中很重要的主方法进行介绍总结。 主方法 主方法为如下形式的递归式提供了一种”菜谱式”的求解方法: T(n)=aT(n/b)+f(n)T(n)=a转载 2017-10-25 11:07:36 · 1596 阅读 · 1 评论 -
弗洛伊德(Floyd)算法求图的最短路径
https://blog.csdn.net/jeffleo/article/details/53349825 弗洛伊德基本思想 弗洛伊德算法作为求最短路径的经典算法,其算法实现相比迪杰斯特拉等算法是非常优雅的,可读性和理解都非常好。 基本思想: 弗洛伊德算法定义了两个二维矩阵: 矩阵D记录顶点间的最小路径 例如D[0][3]= 10,说明顶点0 到 3 的最短路径为10; ...转载 2018-06-20 15:55:50 · 2025 阅读 · 0 评论 -
[算法天天见](三)另类排序
另类排序一、概述 一、概述 这里主要介绍 桶排序,比如有一个实时排名系统,要对一万个玩家的分数进行排序,分数为 0-9999分,应该怎么排序呢?我们的方法是 建立 10000个桶 分别对应分数 0-9999的玩家,初始先遍历一遍玩家分数放到对应桶中,每次玩家分数发生变化的时候就从原来的桶中取出然后加到对应的桶中。这个排序对于需要频繁改动的数据还是很有用的。 ...原创 2018-10-28 13:14:34 · 318 阅读 · 0 评论 -
[算法天天见](二)进阶排序
进阶排序一、说明二、算法归并排序 一、说明 进阶排序主要会展示归并排序算法和快速排序算法。归并排序算法由于不是原地排序算法所以它的空间复杂度不是O(1),它的时间复杂度是O(nlogn)。整个算法如果采用递归方式去写的话是很简单的,具体可参看代码部分。 二、算法 归并排序 /** * * 归并排序 * 用到的分治的思想 * 假如一个数组 前半部分和后半部分都是有序...原创 2018-10-25 21:21:35 · 172 阅读 · 0 评论 -
[算法天天见](一)基础排序
基础排序一、说明二、算法冒泡排序插入排序选择排序 一、说明 算法开篇,今后将会不定期更新。 算法最基础的就是排序,而排序中最基础的要属冒泡、插入和选择排序了,由于它们的时间复杂度都是 O(n²),所以在实际应用中几乎不会使用它们,而是采用更快的排序方法。不过在不少面试过程中,还是会遇到要求写出这种的情况,所以我们也是必须熟练掌握这些排序算法的思路。 二、算法 冒泡排序 /** * 冒泡排序是...原创 2018-10-24 21:57:10 · 157 阅读 · 0 评论 -
[算法天天见](四)二分查找
二分查找一、概述算法1. 查找第一个值等于给定值的元素2. 查找最后一个值等于给定值的元素3. 查找第一个大于等于给定值的元素4. 查找最后一个小于等于给定值的元素 一、概述 二分查找法查找是建立在数组有序的基础上的,每次查找都会将查找的范围缩小一半,所以复杂度是 O(logn)。如何每次缩小一半呢,无非是加几个标记: low = 当前检查范围的最小值 mid = 当前正检测的值 high = 当...原创 2018-11-01 18:07:54 · 360 阅读 · 0 评论 -
[算法天天见](五)跳跃链表
跳跃链表一、概述二、算法 一、概述 跳表实际上是链表的一种扩展,它解决的是链表的查找速度问题。由于它是链表的扩展,所以他底层维护的本质还是一个有序链表。他的复杂度取决于什么样的node插入到最高哪层中。在插入的时候下从最高层开始找起,一直找到最底层,然后用一个函数算出这个节点要插入到几层,最后再每一层执行插入操作。查找和插入前半部分是同一个操作。删除节点也很简单,因为你找到的节点总是最上层节点,只...原创 2018-11-08 10:39:40 · 1095 阅读 · 0 评论 -
[算法天天见](六)堆排序
堆排序一、概述二、算法 一、概述 堆排序是一种简单又有效的排序,堆排序可以处理一些需要优先级的场景。它的实现也是很简单的。堆分为大顶堆和小顶堆,它的本质是一颗完全二叉树, 并且(大顶堆)它的子树的每个节点都必须小于当前节点 它的构建有两个过程 自底向上和自顶向下① 自顶向下就是一个插入节点的过程② 自底向上更优化交换的次数更少它的实现过程是 从最后一个非叶子节点开始(因为叶子节点不需要与子节点发...原创 2018-12-17 21:14:51 · 433 阅读 · 0 评论