
算法与数据结构
小老弟2333
这个作者很懒,什么都没留下…
展开
-
散列表
通过散列函数(也叫哈希函数)将元素的键映射为数组下标(转化后的值叫做散列值或哈希值),然后在对应下标位置存储记录值。当我们按照键值查询元素时,就是用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据 散列冲突指的是 key1 != key2 的情况下,通过散列函数处理,hash(key1) == hash(key2),这个时候,我们说发生了散列冲突,设计再好的散列函数也无法避免散列冲...转载 2019-07-02 16:14:52 · 778 阅读 · 0 评论 -
Trie树 - 字符串多模式匹配
Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起 构建 Trie 树的过程比较耗时,对于有 n 个字符的字符串集合而言,需要遍历所有字符,对应的时间复杂度是 O(n),但是一旦构建之后,查询效率很高,如果匹配串的长度是 k,那只需要匹配 k 次即可,与原来的主串没有关系,所以对应的时间复杂度是 O(k),基本上是个常量级的数字。 应用场景: 1.敏感词过滤 2.搜索框联想 ...转载 2019-07-04 11:40:26 · 678 阅读 · 0 评论 -
堆
堆是一个完全二叉树 每个节点的值都必须大于等于(或小于等于)其左右孩子节点的值 如果每个节点的值都大于等于左右孩子节点的值,这样的堆叫大顶堆;如果每个节点的值都小于等于左右孩子节点的值,这样的堆叫小顶堆。 插入:以大顶堆为例,从叶子结点插入,如果比父级元素大,则与父级元素交换位置,依次类推,直到到达根节点(小顶堆恰好相反) 删除:每次从堆顶删除元素后,需要从子节点中取值补齐堆顶,依次类推,直到...转载 2019-07-09 11:21:50 · 148 阅读 · 0 评论 -
KMP - 字符串单模式匹配
字符串单模式匹配算法:KMP 参考文章: 字符串匹配的KMP算法 PHP function getNext($str) { $len = strlen($str); $next = [0]; $k = 0; for ($i = 1; $i < $len; $i++) { while ($k > 0 && $str[$k] ...转载 2019-07-03 16:54:56 · 141 阅读 · 0 评论 -
二分查找
二分查找 OlognOlognOlogn 针对的是一个有序的数据集合(这点很重要),查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 二分查找针对的必须是已经排序过的有序数组,否则不能使用该算法 PHP function search($nums, $target) { sort($nums); ...转载 2019-06-27 11:50:02 · 102 阅读 · 0 评论 -
排序算法
冒泡排序 On2O_{n^2}On2 1.循环比较相邻值,符合条件就交换位置,一次循环至少让一个元素移动到它应该在的位置 2.若在一次循环中没有位置发生交换,则认为该排序已完成 PHP function bubble_sort(&$nums) { $len = count($nums); for ($i = 0; $i < $len; $i++) { ...转载 2019-06-24 15:40:30 · 198 阅读 · 0 评论 -
递归
递归 写出递归公式,找到终止条件 1、一个问题的解可以分解为几个子问题的解 2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3、存在递归终止条件 我们在通过递归实现代码的时候,切忌试图通过人脑去分解每个步骤,那样会把自己搞晕的,这种重复迭代的事情交给计算机去做,我们要做的就是抽象出规律,写递归公式,找终止条件,再把它们转化为递归代码 ...转载 2019-06-24 15:20:46 · 216 阅读 · 0 评论 -
线性结构
数组 1.数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据 2.数组的优点是可以通过下标值随机访问数组内的任何元素,算法复杂度是 O(1) 3.缺点是删除/插入元素比较费劲,以删除为例,需要在删除某个元素后,将后续元素都往前移一位,如果是插入,则需要将插入位置之后的元素都往后移,所以对数组的插入/删除而言,算法复杂度是 O(n) 链表 1.链表并不需要一块连续的内存空...转载 2019-06-24 15:19:06 · 138 阅读 · 0 评论 -
算法复杂度
时间复杂度 求解算法的时间复杂度的具体步骤是: 1.找出算法中的基本语句,算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体 2.计算基本语句的执行次数的数量级,只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在增长率上 分析时间复杂度的时候遵循以下原则: 1、...转载 2019-06-24 15:10:31 · 211 阅读 · 0 评论 -
二叉排序树
二叉排序树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值,所以这么看来,二叉排序树是天然有序的,如果按照中序遍历,得到将是一个从小到大的有序数据集 删除节点 第一种情况是,如果要删除的节点没有子节点,我们只需要直接将父节点中,指向要删除节点的指针置为 null。 第二种情况是,如果要删除的节点只有一个子节点(只有左子节点或者右子节点)...转载 2019-07-05 13:49:41 · 2292 阅读 · 0 评论