Algorithms
数据结构和算法
2lovecode
醉心于技术的纯粹人,乐于不断提升带来的成就感,苦于缺失发展方向带来的迷茫感。技术之路枯燥且坎坷,希望能结识更多的同路人和引路人,一起且行且珍惜
展开
-
跳表实现
下面是跳表的C语言实现,参考的是redis跳表实现思路。具体实现思路会在GitHub上更新,感兴趣的小伙伴可以关注跳跃表#include <stdio.h>#include <stdlib.h>#define MAX_LEVEL 20#define SKIPLIST_P 0.25typedef struct SkipListLevel { struct SkipListNode *forward;} SkipListLevel;typedef struc原创 2021-03-11 13:20:07 · 249 阅读 · 0 评论 -
T0001.数据结构面试题---栈---获取最小值
题目实现一个特殊的栈,在实现栈基本功能的基础上,实现返回栈中最小元素的操作.要求:1.pop,push,getMin操作的时间复杂度为O(1)2.可使用现成的栈结构GitHub源码GitHub源码方案一类文件:MyStack.php示例文件:MyStackExample.php使用两个栈dataStack和minStack.push操作:假设当前压入栈的值为valu...原创 2018-12-26 14:55:04 · 331 阅读 · 0 评论 -
红黑树实现[PHP]
红黑树的实现GitHub源码class Node{ private $id; /** * @var * 1 => red * 2 => black */ private $color = 1; private $value = null; public $parent = 0; ...原创 2018-10-18 18:48:57 · 1151 阅读 · 0 评论 -
跳跃表实现[PHP]
跳跃表的简单实现,参考redis跳跃表实现GitHub源码class Node{ private $id; public $value; public $level; public $forward = []; public function __construct($value, $level) { $this->id...原创 2018-09-26 18:19:18 · 867 阅读 · 0 评论 -
桶排序[PHP]
桶排序 GitHub源码计算序列最小值min, 最大值max根据min, max和指定的需要构造的桶的数量n,计算每个桶的区间:range = ceil(max - min + 1)遍历序列,将序列中的值分布到各个桶中: 桶标号从0开始, (value - min) / range每个桶独立排序将结果输出例如对于序列 5, 4, 10, 30, 20, 15, 36min...原创 2018-09-15 10:51:43 · 397 阅读 · 0 评论 -
计数排序[PHP]
计数排序 GitHub源码获取序列中的最小值min和最大值max O(n)统计min - max之间所有值在序列中的出现次数 O(n)顺序输出min - max的所有值,次数为0不输出,其余次数为多少就输出多少 O(k) k为数据范围例如序列为: 2, 4, 6, 9, 4, 8min = 2, max = 9, n为6,k为8统计出现次数为 [2 => 1, 3 ...原创 2018-09-15 10:48:20 · 324 阅读 · 0 评论 -
PAT真题解答
程序设计测试平台PTA(https://pintia.cn/problem-sets) 上部分真题的C语言解答 具体代码请参考下面的GitHub链接乙级(BasicLevel) 甲级(AdvancedLevel) 顶级(TopLevel)原创 2018-09-10 17:00:41 · 4774 阅读 · 0 评论 -
B+树简单实现(PHP)
GitHub源码 原理参考此链接 下面是一些实现细节: 1. 注意 - 叶节点包含所有的索引和数据 - 只有叶节点才会持有具体数据,非叶节点只有索引 - 叶节点之间连接成一个链表,便于范围查询 2. 树节点结构 BTNode { id : 标识节点对象的唯一值 parent : 父节点的ID值 isLeaf : 是否是叶节点 indexNum : 当...原创 2018-09-04 19:45:50 · 1548 阅读 · 0 评论 -
B-Tree的简单实现(PHP)
B-Tree的简单实现: GitHub源码地址 注: B-Tree的原理介绍在这里就不赘述了,相信其它博客会讲的更透彻。我们主要关注实现过程的细节问题。 以下条目对应的代码实现会在代码中标出,例如第3条对应的代码中的位置标识为[3] 代码最后写了2个调试使用的代码,可能对理解实现过程和逻辑结构有帮助。B-Tree单个节点的结构是: BTNode { id...原创 2018-09-01 21:04:28 · 1154 阅读 · 0 评论 -
仿redis的HyperLogLog数据结构
对于网站的UV计数来说,使用集合这种数据结构是可以满足的,但是使用集合会带来占用空间过大的问题。一旦数据量增大,它的某些统计特性就会涌现。HyperLogLog就是应用了大数据量的统计特性(随机次数和随机数二进制最大尾部0个数之间的关系),实现的数据量估计。 GitHub源码若想有更深入的理解,可以参考《Redis 深度历险:核心原理与应用实践》这本书,我想比我理解的更深入一些。cl...原创 2018-08-24 15:20:10 · 443 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)简单实现
参考文献: https://my.oschina.net/kiwivip/blog/133498 https://blog.csdn.net/jiaomeng/article/details/1495500 https://blog.csdn.net/hguisu/article/details/7866173 文献中探讨了布隆过滤器的原理和应用场景,以及一些实际应用场景中的增强方...原创 2018-06-13 19:37:22 · 1944 阅读 · 0 评论 -
堆排序php实现
作为一种可以使用数组实现的数据结构,使用php来模拟优先队列(堆排序)还是比较容易的。下面是我们的实现代码,其中insert使用的是上滤,delete使用的是下滤。我们模拟实现了最小堆和最大堆。当然,php的spl库提供了类似的数据结构,它们基于c实现,在时间和空间上应该优于我们直接基于php的实现,大家可以参考下: 最小堆:http://php.net/manual/zh/class.sp...原创 2018-04-09 15:13:43 · 461 阅读 · 0 评论 -
PageRank的php简单实现
php简单实现PageRank算法原创 2017-12-25 18:11:11 · 474 阅读 · 0 评论 -
php实现简单的基于DFA算法的敏感词过滤
最近一个学Go语言朋友,给我发了一篇文章http://blog.csdn.net/chenssy/article/details/26961957,讲的是使用DFA(即Deterministic Finite Automaton,有穷自动机)算法实现敏感词的过滤。问我能不能使用php来实现,感谢chenssy大大的精彩文章,下面是我仿照版本的php实现。原创 2017-12-13 22:58:32 · 4944 阅读 · 1 评论 -
基数排序(php版)
最近看到了一个有趣的排序方法—基数排序法。直观的感觉中,冒泡排序简单直接,快速排序精巧晦涩;而基数排序不多不少,刚刚好!先简单介绍下具体流程: 示例:[20, 67, 123, 111, 2, 34, 1, 78, 0, 33, 11, 15, 83] 1.设置0-9,共10个桶,先按个位数作为标号分别放入桶中2.按0-9,同一个桶数据先后的顺序拿出形成一个新数组3.新数组,按十位数作为标号分别原创 2017-11-28 15:29:38 · 482 阅读 · 0 评论