随笔分类 - 算法与数据结构
摘要:实际上,基于比较和交换的排序算法,它们的时间复杂度的下限就是O(nlog2n)。冒泡排序,插入排序等自不必多说,时间复杂度是O(n2),即使强如快速排序,堆排序等也只是达到了O(nlog2n)的复杂度。那么那些传说中可以突破O(nlog2n)下限,达到线性时间复杂度O(n)的排序算法到底是什么样的呢
阅读全文
摘要:本篇文章是排序算法总结与分析系列的第二篇,介绍选择排序中的简单选择排序与堆排序,以及常用的归并排序。排序算法总结与分析系列是对常用的算法进行一个汇总分析,包括每个算法的基本思想,实现代码,时间复杂度,空间复杂度,稳定性,算法分析等。涵盖的算法,目前包括但不限于冒泡排序,快速排序,简单插入排序,希尔排序,简单选择排序,堆排序,归并排序,后续还会增加对基数排序,计数排序的介绍。
阅读全文
摘要:每每遇到关于排序算法的问题总是不能很好的解决,对一些概念,思想以及具体实现的认识也是模棱两可。归根结底,还是掌握不够熟练。以前只是看别人写,看了就忘。现在打算自己写,写些自己的东西,做个总结。本篇是这个总结的开始,所以我们先来阐述一下本次总结中会用到的一些概念。
排序是如何分类的?可以从不同的的角度对排序进行分类,这里我是根据排序的策略对本次总结中涉及到的排序算法进行分类
阅读全文
摘要:文章目录 A*算法描述 简化搜索区域 概述算法步骤 进一步解释 具体寻路过程 模拟需要更新F值的情况 Lua代码实现 在学习A*算法之前,很好奇的是A*为什么叫做A*。在知乎上找到一个回答,大致意思是说,在A*算法之前有一种基于启发式探索的方法来提高Dijkstra算法的速度,这个算法叫做A1。后来
阅读全文
摘要:首先我们需要了解什么是模式匹配?
子串定位运算又称为模式匹配(Pattern Matching)或串匹配(String Matching)。在串匹配中,一般将主串称为目标串,将子串称为模式串。本篇博客统一用S表示目标串,T表示模式串,将从目标串S中查找模式串T的过程称为模式匹配。
虽然我们的主角是KMP模式匹配算法,但我们还是要先从暴力匹配算法讲起,通过发现暴力匹配算法存在的问题,由此来引出KMP模式匹配算法。
阅读全文