PHP 归并排序(Merge Sort)

2020-12-12
阅读 3 分钟
2k
​归并排序 时间复杂度属于 O(nlogn) 级别的,相比于 O(n^2) 级别的排序算法,在处理大的数据量时,它的优势非常明显,下面通过原理图和代码演示介绍归并排序是如何实现 O(nlogn) 时间复杂度级别的。

数据结构-PHP 字典树(Trie)的实现

2020-12-10
阅读 4 分钟
2.1k
​这篇文章介绍一下字典树的实现原理,又称单词查找树、Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

链表的翻转&判断链表是否有环

2020-12-09
阅读 3 分钟
2.2k
​通过学习 链表的翻转 和 判断链表是否有环 这两个简单的例子加深对链表这种数据结构的理解。1.链表翻转1.1 链表翻转原理图1.2 链表翻转代码 {代码...} 演示输出如下图:2.判断链表是否有环2.1 链表环示意图2.2 问题分析在遍历链表的时候可以维护 快 和 慢 两个指针赋值,可以将这两个快慢插设为 1,当遍历到环上面的时...

网络协议-HTTP 协议(一)

2020-11-20
阅读 3 分钟
2.4k
​HTTP协议 是一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可拓展的语义和自描述消息格式,与基于网络的超文本信息系统灵活地互动。

数据结构-PHP 哈希表(Hash Table)的实现

2020-11-16
阅读 11 分钟
4.4k
​这篇文章主要介绍一下哈希表(Hash Table)的实现原理,哈希表(Hash Table) 也叫散列表,它通过把关键码值(key-value)映射到表中一个位置来访问,以加快其查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫哈希表(Hash Table)。

8. 数据结构(PHP实现) -- 线段树的实现

2020-11-15
阅读 3 分钟
1.6k
1. 特征不一定是完全二叉树一定是平和二叉树叶子结点存储的是实际的值,非叶子结点存的是自定义的内容2. 时间复杂度操作时间复杂度查询O(logn)3. 线段树的图解4. 代码 {代码...} 5.示例 {代码...} {代码...}

7. 数据结构(PHP实现) -- 优先队列的底层实现(堆)

2020-11-09
阅读 5 分钟
1.3k
1. 说明:是基于二叉树来实现2. 时间复杂度操作时间复杂度入队O(logn)出队O(logn)3. 插入结点的上浮操作(为了将最大值放在最顶部)(在代码siftUp方法中)4. 弹出最大结点后对最小值的下沉操作(在代码siftDown方法中)5. 代码 {代码...} 6. 示例 {代码...} {代码...}

链表

2020-11-08
阅读 8 分钟
1.9k
<?phpdeclare(strict_types=1);​class Node{ // 该节点的元素值 public $e; // 下一个节点的指针 public $next;​ public function __construct($e = null, $next = null) { $this->e = $e; $this->next = $next; }​ // 将该节点对象的元素值用字符串输出 public function __toString(): string { return (strin...

Redis 数据结构(dict)实现

2020-11-05
阅读 11 分钟
267
字典又称为hash、或者映射(map)、是一种保存键值对的数据结构。 字典中的每一个key都是独一无二的,可以通过key进行、查询、添加、删除、修改操作。

数据结构-PHP 平衡二叉树(AVL)的平衡原理

2020-11-05
阅读 18 分钟
1.2k
这篇文章主要介绍一下 平衡二叉树(AVL),对于 二分搜索树 来说,如果树上的 元素 是顺序 添加的,会导致数据退化成一个 链表,这样就会造成很严重的性能问题,此时就需要在 二分搜索树 的基础上,保证元素插入时平衡,在了解 AVL 之前,需要您对 二分搜索树 有一定的了解,可以参考之前的文章。

6. 数据结构(PHP实现) -- 图 (用链表来实现)

2020-11-04
阅读 4 分钟
1.8k
1. 特征每个结点都是以key-value的形式存储2. 时间复杂度操作时间复杂度添加O(1)更新O(n)删除O(n)查询O(n)3. 代码结点代码 {代码...} 图的代码 {代码...} 4. 示例 {代码...} {代码...}

5. 数据结构(PHP实现) -- 集合 (用链表来实现)

2020-11-03
阅读 4 分钟
2.1k
1. 特征集合内的元素不会重复,所以在添加的时候就需要判断是否有元素存在2. 时间复杂度分析操作时间复杂度添加O(1)删除O(n)查询O(n)3. 代码元素结点 {代码...} 集合的代码 {代码...} 4. 示例 {代码...} {代码...}

4.4 数据结构(PHP实现) -- 二分搜索树的结点删除

2020-11-02
阅读 4 分钟
1.2k
1. 删除逻辑删除的结点不存在左儿子:删除的结点不存在右儿子:删除的结点存在左儿子和右儿子:删除的结点的左边所有值都会比该结点小,所以只要在其中拿出最大的一个值替换成该节点即可2. 代码 {代码...}

数据结构-PHP 并查集(Union Find)

2020-11-02
阅读 3 分钟
2.3k
这篇文章主要介绍一下 并查集,并查集 支持合并(Union) 和 查询(Find)两种操作,其中 合并(Union) 表示把两个不相交的集合合并为一个集合,查询(Find) 表示查询两个元素是否在同一个集合中。

4.3 数据结构(PHP实现) -- 二分搜索树的遍历(非递归实现)

2020-11-02
阅读 9 分钟
1.2k
基于4.2章节做的延伸,采用非递归的方式来实现前序遍历、中序遍历和后序遍历1. 二分搜索树(本章节都基于该二分搜索树做举例)2. 代码 (在traversalByStack方法中实现了非递归的遍历二叉树) {代码...} 3. 前序遍历代码块 {代码...} 代码流程解析4. 中序遍历代码块 {代码...} 代码流程解析5. 后序遍历代码块 {代码...} 代...

数组

2020-11-01
阅读 10 分钟
1.2k
数组简介静态数组:是在声明时已经确定子数组大小的数组,即数组元素的个数固定不变。动态数组:在声明时没有确定数组大小的数组,即数组元素的个数可以发生变化。(其实也是静态数组,使用扩容resize()方法进行动态调整)构建创建静态数组类创建一个类,类名为”ArrayClass“声明属性data:数组所存具体数据capacity:数...

数据结构-PHP 字典树(Trie)的实现

2020-11-01
阅读 4 分钟
1.5k
​这篇文章介绍一下字典树的实现原理,又称单词查找树、Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

数据结构-PHP 线段树的实现

2020-10-31
阅读 10 分钟
1.7k
线段树是基于区间的统计查询,线段树是一种 二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN),线段树是一颗 平衡二叉树。

4.2 数据结构(PHP实现) -- 二分搜索树的遍历(递归实现)

2020-10-30
阅读 6 分钟
1.4k
1. 遍历原则前序遍历:先遍历当前结点,再遍历当前结点的左儿子,最后遍历当前结点的右儿子中序遍历:先遍历当前结点的左儿子,再遍历当前结点,最后遍历当前结点的右儿子后续遍历:先遍历当前结点的左儿子,再遍历当前结点的右儿子,最后遍历当前结点2. 前序遍历示意图3. 中序遍历示意图4. 后序遍历示意图5. 二分搜索树...

4.1 数据结构(PHP实现) -- 二分搜索树的结点插入

2020-10-30
阅读 3 分钟
1k
1. 插入原则:第一个结点为根节点后续插入的结点值如果小于根节点,就成为根节点的左儿子后续插入的结点值如果大于根节点,就成为根节点的右儿子2. 示意图3. 二分搜索树的实现 {代码...} 4. demo {代码...}

数据结构-PHP 输出数组中出现频率最高的前 k 个

2020-10-30
阅读 14 分钟
1.6k
​这篇文章主要是通过一个问题实现过程,选择合适的数据结构,结合之前介绍过的 基于二分搜索树实现的映射(Map) 和 最小堆两种数据结构,可以将问题实现过程的时间复杂度降低。

数据结构-PHP 优先级队列(最大堆)的实现

2020-10-29
阅读 9 分钟
1.4k
对于 普通队列,数据元素是 First In First Out,而对于 优先队列 是出队顺序和入队顺序无关,和优先级相关,其特点是 动态的 选择优先级最高的出队。

数据结构-PHP 映射(Map)实现

2020-10-27
阅读 9 分钟
4.7k
这篇文章主要介绍如何实现 映射(Map),映射是一个存储(键,值)数据对的数据结构(key-value),它的特点是根据键(key)去寻找值(value),下面主要介绍如何使用 链表 去实现 映射(Map)和使用 二分搜索树(Binary Search Tree) 去实现 映射(Map)。

数据结构-PHP 二分搜索树的层序遍历(队列实现)

2020-10-26
阅读 8 分钟
1.5k
​前面文章介绍了二分搜索树的 前序遍历、中序遍历、后续遍历,这篇文章主要介绍一下如何使用 队列 实现二分搜索树的 层序遍历。1.队列1.1 队列的特点队列(Queue) 是一种线性结构。只能从一端 tail(队尾) 添加元素,从另外一端 front(队首) 取出元素。是一种 First In First Out(FIFO),即 先进先出 的结构。1.2 队列的...

数据结构-PHP 压栈遍历二分搜索树

2020-10-25
阅读 7 分钟
1.6k
前面写了一篇的文章,实现的方法是用的递归思想遍历,这篇文章主要介绍一下如何使用 压栈 的思想来遍历二分搜索树。1.栈为了更好的结合压栈的思想,下面先来介绍一下 栈 数据结构的知识:1.1 栈的特点栈是一种线性数据结构。栈只能从一端添加数据,也只能从同一端取出元素,每次删除的元素都是最后入栈的元素。入栈的元...

数据结构-PHP 实现二分搜索树

2020-10-23
阅读 8 分钟
1.4k
这篇文章是介绍 二叉树 和 二分搜索树,然后通过 PHP 代码定义一下 二分搜索树 的节点,使用递归思想操作向二分搜索树添加元素,然后实现了递归判断二分搜索树上是否包含某个元素,最后分别实现了前序遍历、中序遍历、后序遍历 二分搜索树。

力扣题-使用栈判断是否是有效的括号

2020-10-23
阅读 1 分钟
1.8k
使用栈判断是否是有效的括号题来源于力扣:[链接]思路:遇见左字符,将左字符入栈遇见右字符:如果栈是空的,说明括号无效如果栈不为空,将栈顶字符出栈,与右字符之匹配如果左右字符不匹配,说明括号无效如果左右字符匹配,继续扫描下一个字符所有字符扫描完毕后:栈为空,说明括号有效栈不为空,说明括号无效 {代码......

PHP 实现递归删除链表元素

2020-10-22
阅读 7 分钟
1.3k
这篇文章介绍一下 递归,递归的本质是将原来的问题转化为更小的同一个问题,解决这些更小问题的过程。下面通过两个递归的例子帮助学习对递归的理解。

PHP使用栈实现队列

2020-10-22
阅读 2 分钟
2.1k
出队时,(1):如果 outStack是空的,将 inStack 所有的元素逐一弹出,push 到 outStack,outStack 弹出栈顶元素

二分搜索树介绍&PHP 定义节点

2020-10-22
阅读 2 分钟
1.9k
这篇文章是介绍 二叉树 和 二分搜索树,然后通过 PHP 代码定义一下 二分搜索树(Binary Search Tree) 的节点。1.二叉树1.1 二叉树图示1.2 二叉树节点定义 {代码...} Tips:二叉树每个节点最多有两个儿子,每个节点最多有一个父亲。1.3 二叉树的特点二叉树具有天然的递归结构,每个节点的左儿子或右儿子也是 二叉树。二叉...