![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 73
Thepatterraining
这个作者很懒,什么都没留下…
展开
-
php实现归并排序算法
php实现归并排序算法归并排序算法的复杂度是O(nlogn)。代码如下,完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:mergeSort 就可以看到结果了 /** * 归并排序把数据逐步分解,然后对分解后的数据进行排序,最后合并到一起 * * @return mixed */ public function handle() { $this-&原创 2022-03-07 16:38:30 · 362 阅读 · 2 评论 -
有序数组去重算法
有序数组去重算法有序数组去重算法的复杂度是O(n)。代码如下,只进行一次循环,复杂度O(n)完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:sortDeduplicate 就可以看到结果了 /** * 因为是有序数组,为了提高去重效率,取一个元素往后一直比对,如果相邻的相等表示是重复的 * 继续往后,直到不相等,也就是遇到一个不重复的为止,将这个不重复的元素移动到该元素的下一个 * 然原创 2022-02-18 17:31:28 · 370 阅读 · 0 评论 -
无序数组去重算法
无序数组去重算法无序数组去重算法的复杂度是O(n2)。代码如下,首先进行外层循环,复杂度O(n),然后查找这个元素之前的元素中有没有重复的,复杂度O(n),如果有就删除,复杂度O(1),没有就下一个元素,复杂度O(1)。加起来复杂度O(n2)。完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:unsortDeduplicate 就可以看到结果了 /** * Execute the console comma原创 2022-02-18 14:45:57 · 762 阅读 · 0 评论 -
php冒泡排序算法实现
php冒泡排序算法实现冒泡排序是经典排序算法,也是最好实现,最容易记住的排序算法。不过冒泡排序的时间复杂度是O(n2)。时间比较长,总体性能上还不如插入排序这个同样是O(n2)复杂度的排序算法。/** * 冒泡排序 */class BubbleSort { /** * 冒泡排序 * @param Array $arr 要排序的数组 * @return Array $arr 排好序的数组 */ static function sort(A原创 2020-05-14 15:39:30 · 405 阅读 · 0 评论 -
php快速排序算法实现
php快速排序算法实现快速排序是一个经典排序算法,他的排序速度更快,所以叫做快排。像冒泡,插入,选择这种排序的时间复杂度是O(n^2),而快排的时间复杂度是O(nlogn),速度快上不少。快排的原理是选定一个值,然后把数组中所有小于这个值的放左边,大于的放右边,然后对左边和右边的数组重复上述操作。选定一个值小于的放左边大于的放右边重复上述操作,也就是递归最后得到的就是排好序的数组/** * 快速排序 */class QuickSort { /** * 快速排原创 2020-05-14 15:49:27 · 422 阅读 · 0 评论 -
数据结构-图
图深度优先遍历拓扑排序在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为AOV网(Activity On VertexNetwork)。拓扑排序算法就是选择网中入度为0的订点放入栈,然后取出顶点并删除以此顶点为尾的弧,就会有其他的订单的入度减少,在选择入度为0的放入栈,重复这些操作,直到输出全部顶点或者AOV网中不存在入度为0...原创 2020-04-21 09:50:02 · 112 阅读 · 0 评论 -
数据结构-树详解
树树是n个结点的有限集。n = 0时称为空树。在任意一颗非空树中:有且仅有一个特定的称为根的节点当n > 1时,其余节点可分为m (m > 0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树节点分类节点有用的子树数称为节点的度。度为0的节点称为叶节点或终端节点;度不为0的节点称为非终端节点或分支节点。除根节点之外,分支节点也称为内部节点。树的度是树内各...原创 2020-04-20 10:39:22 · 287 阅读 · 0 评论 -
字符串KMP算法详解
串串是由零个或多个字符组成的有限序列,又名叫字符串朴素的模式匹配算法串经常用来匹配子串再主串中是否存在,假设两个串存在数组中,数组下标0的位置存了串的长度。 /** * 串的朴素模式匹配算法 * 返回子串T在子串S中第pos个字符之后的位置。若不存在,则返回0 * T非空, 1 <= pos <= strlength(S) */...原创 2020-04-17 11:01:03 · 475 阅读 · 0 评论 -
数据结构详解-栈与队列
栈与队列栈是限定仅在表尾进行插入和删除操作的线性表队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表栈我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构栈的顺序存储结构及实现<?phpnamespace App\Http\Models\Stack;/**...原创 2020-04-16 10:18:48 · 179 阅读 · 1 评论 -
数据结构-线性表的顺序存储和链式存储结构php实现
大话数据结构数据结构:是相互之间存在一种或多种特定关系的数据元素的集合绪论逻辑结构逻辑结构:是指数据对象中数据元素之间的相互关系。其实这也是我们今后最需要关注的问题。逻辑结构分为以下四种集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系线性结构:线性结构中的数据元素之间是一对一的关系树形结构:树形结构中的数据元素之间存在一种一对多的层次关系图形结构:图形结...原创 2020-04-15 11:19:57 · 297 阅读 · 0 评论 -
23种设计模式总结-你想知道的设计模式都在这里
简单工厂模式简单工厂模式是一种创建型设计模式,通过不同的类型来创建出不同的实例返回给客户端/** * 计算器 */class Factory{ function createJiSuanQi(string $symblo) : JiSuan { switch ($symblo) { case '+': r...原创 2020-04-14 16:45:14 · 152 阅读 · 0 评论 -
你不知道的队列使用技巧
队列队列是一种先进先出的数据结构我们的程序在什么情况下会用到队列呢?异步处理。场景我们一般写的web程序都是同步执行的,比如前端发送一个登录请求,后端一步一步的处理,查询用户,判断密码等等,返回登陆成功或者错误信息,前端阻塞等到后端返回后进行下一步处理。那么这种程序有一个什么问题呢,首先,前后端建立的http连接是有超时时间的,当后端处理请求时间过长会返回超时错误。就算没有超时的限...原创 2020-04-06 15:28:59 · 314 阅读 · 0 评论 -
缓存穿透神器-布隆过滤器详解
布隆过滤器上一节提到了缓存穿透的问题,如果查询不存在的值怎么办,布隆过滤器可以完美解决这个问题。当查询的时候,我们只需要确定这个值不存在,那我们就不用再查询了,也就减少了数据库,缓存的压力,减少了服务器压力,避免了一些攻击。布隆过滤器是个什么东西呢,它是由一串二进制组成的串,这个串中,只有0和1。0代表不存在,1代表存在。我们用hash算法计算之后,对布隆过滤器的长度进行取余操作,确定这...原创 2020-04-05 09:08:31 · 218 阅读 · 0 评论 -
分布式必备发号器-SnowFlake算法原理详解
发号器生成唯一id的需求很多,我们经常会用到,不管是单库单表中的唯一,还是分布式的唯一。SnowFlake 算法说一下SnowFlake算法,这个算法是一个生成唯一id的算法。使用的是一个64位的二进制串,把这个串分成了几个部分。符号位 占一个位置 0 为正时间戳位 占41个位置,使用毫秒级时间戳机器位 占10个位置, 可以支持2的10次方-1个机器使用序号位 占12个位置, 同...原创 2020-04-03 09:56:18 · 464 阅读 · 0 评论 -
你想了解的k8s-etcd一致性分布式数据库精讲(2)- etcd节点竞选原理
title: k8s之etcd节点竞选date: 2018-12-03 16:15:00tags: [‘k8s’,‘etcd’]category: etcdarticle: k8s之etcd二竞选流程etcd内部采用raft协议来实现,所以在etcd里面,节点有3个状态,一开始都是follower节点,然后接收leader的心跳信息,如果接收不到,就进入candidate进入下一...原创 2020-03-31 09:52:47 · 476 阅读 · 0 评论 -
素数对猜想-算法
素数对猜想题目“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。输入例子20输出例子4解题思路这个比较简单,看题目,能确定一点,一个素数对,有两个相差 2 的素数组成。那么接下来就可以用 n除以2到根号n之中的任意一个数,如果能被整除,那么就不是素数,如果不能被整除,那么就是一个素数。如果发现了一...原创 2020-03-29 10:15:21 · 679 阅读 · 0 评论 -
打印沙漏-算法
打印沙漏题目顾名思义,就是要输出一个沙漏,那么什么是沙漏呢,就是下面的样子了 ***** *** * *** *****也就是要给我们n个*,这个沙漏每一行的 符号 数量都是奇数,因此是有规律的。输入例子19 //多少个符号 *输出例子 //打印出一个沙漏 ***** *** * *** ***** 2 //剩余没有...原创 2020-03-27 14:12:15 · 884 阅读 · 0 评论