随笔分类 - 数据结构与算法
摘要:抽象类 官方描述请查看文档,下面是官方描述的梳理版本: 定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。 (抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
阅读全文
摘要:前言 explian/desc可以帮助我们分析sql语句,写出高效sql语句,让mysql查询优化器可以更好的工作。 mysql查询优化器会尽可能的使用索引,优化器排除的数据行越多,mysql找到匹配数据行就越快。 用法 explain/desc + sql explain select * fro
阅读全文
摘要:BTree特性 BTree又叫多路平衡查找树,一颗m叉的BTree特性如下: 树中每个节点最多包含m个孩子。 除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子。 若根节点不是叶子节点,则至少有两个孩子。 所有的叶子节点都在同一层。 每个非叶子节点由n个key与n+1个指针组成,其中[
阅读全文
摘要:区别 MyISAM基于ISAM存储引擎,并对其进行扩展,不支持事务。 InnoDB给mysql提供了事物提交、回滚等事物安全的存储引擎。 MyISAM采用表级锁。表级锁开销小,加锁快,锁粒度大,冲突概率高,并发度低,不会出现死锁。 InnoDB支持表级锁与行级锁,默认为行级锁。行级锁开销大,加锁慢,
阅读全文
摘要:数组在 PHP 中非常强大、灵活的一种数据类型,和 Java、C 等静态语言不同,我们在初始化 PHP 数组的时候不必指定大小和存储数据的类型,在赋值的时候可以通过数字索引,也可以通过字符串索引的方式: 基于 PHP 数组的强大特性,我们可以轻易实现更加复杂的数据结构,比如栈、队列、列表、集合、字典
阅读全文
摘要:哈希算法的概念和特性 我们前面分享了散列表、散列函数和散列冲突,其实也可以译作哈希表、哈希函数和哈希冲突,是一个意思。哈希算法简单理解就是实现前面提到的哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。 我们日常开发中最常见的哈希算法应
阅读全文
摘要:散列表(HashTable,也叫哈希表),是根据键(Key)直接访问在内存存储位置的数据结构。 其实现原理是:通过散列函数(也叫哈希函数)将元素的键映射为数组下标(转化后的值叫做散列值或哈希值),然后在对应下标位置存储记录值。当我们按照键值查询元素时,就是用同样的散列函数,将键值转化数组下标,从对应
阅读全文
摘要:介绍完数组和链表,以及两个特殊的线性结构栈和队列后,已经算是迈入了数据结构的门了,后面很多其他更复杂的数据结构都会基于数组和链表来实现,比如散列表、树、图等,有些甚至需要结合数组和链表来实现,在继续介绍后续复杂的数据结构之前,我们穿插进来一些常见的排序算法和查找算法,在系统介绍这些算法之前,我们先来
阅读全文
摘要:介绍完栈之后,接下来要介绍的是另一种跟栈很相似的数据结构 —— 队列,和栈一样,队列也是一中特殊的线性表结构,只不过队列是在一端插入,另一端删除,就跟我们平常排队一样的道理,从队尾入队,在队头出去,所以队列的特性是先入先出(FIFO),允许插入的一端叫队尾,允许删除的一端叫队头。一张图可以形象的体现
阅读全文
摘要:前面介绍了两种基本的数据结构 —— 数组和链表,从逻辑角度来说,它们都是线性结构(就是排成一条线的结构,只有前后两个方向,非线性结构包括树、图等,后面会讲到),从存储角度来说,一个是顺序存储,一个是链式存储,各有利弊,数组需要预先申请连续内存,超出限制会溢出,但是对明确知道规模的小型数据集而言,使用
阅读全文
摘要:链表,和数组不同,链表并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,如图所示: 链表有多种类型,最简单的是单链表,单链表是最原生的链表,其结构如图所示: 单链表中有两个节点比较特殊,分别是第一个结点和最后一个结点。通常把第一个结点叫作头结点,把最后一个结点叫作尾结点。其中
阅读全文
摘要:要介绍的第一个数据结构就是数组。 数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。 如果你学习过 C 语言,应该对这段定义很熟悉,但是在 PHP 这种动态语言中,因为数组底层是通过散列表(后面我们会介绍这个数据结构)实现的,所以功能异常强大,这段常规的数
阅读全文
摘要:学习数据结构和算法要从复杂度分析说起。算法复杂度包括时间复杂度和空间复杂度,两者中又以时间复杂度相对重要,因为就 Web 应用而言,我们常见的性能优化策略都是以空间换时间,比如缓存系统就是如此。 时间复杂度表示代码执行时间随数据规模增长的变化趋势,表示方法图所示 即大O表示法,我们在分析时间复杂度的
阅读全文
摘要:水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 3^3+ 5^3 = 153) 方法一、 方法二、 方法三、 方法四、 方法五、
阅读全文
摘要:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。
阅读全文
摘要:一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号
阅读全文
摘要:许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣。作为一个初级phper,虽然很少接触到算法方面的东西 。但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的。 需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法,归并排序将下面数组中 的值按
阅读全文