KMP KMP算法使主串指针不回溯,只有模式串指针回溯,因此比朴素匹配效率高。
KMP KMP算法使主串指针不回溯,只有模式串指针回溯,因此比朴素匹配效率高。
1. 最大公约数 欧几里得算法(辗转相除法)求最大公约数(Greatest Common Divisor,GCD)的递归定理:对任意非负整数a和任意正整数b欧几里得算法递归实...
查找 1. 二分查找 二分查找(折半查找)必须采用顺序存储结构,并且必须按关键字大小有序排列。 二分查找求mid公式:二分查找的时间复杂度: 递归实现二分查找-: 非递归实现...
排序简介 排序算法的稳定性:排序前两个相等数的前后位置顺序和排序后它们两个的前后位置顺序相同。 内部排序:将需要处理的数据都加载到内存中进行排序。 快、希、选、堆不稳定("快...
贪心 能采用贪心算法求最优解的问题,一般具有的重要性质为:最优子结构性质与贪心选择性质。 贪心选择性质是指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到,这是...
动态规划 动态规划法的求解过程: 划分子问题:将原问题分解为若干个子问题,每个子问题对应一个决策阶段,并且子问题之间具有重叠关系。 确定动态规划函数:根据子问题之间的重叠关系...
分治 分治法的基本思想:分治法将一个难以直接解决的大问题分解成一些规模较小的子问题,分别解决各个子问题,再合并子问题的解得到原问题的解。 汉诺塔问题 相传在古印度圣庙中,有一...
回溯 回溯法的基本思想:回溯法在包含问题的所有可能解的解空间树中,从根结点出发,按照深度优先的策略进行搜索,对于解空间树的某个结点,如果该结点满足问题的约束条件,则进入该子树...
图 图的表示方式:邻接矩阵、邻接链表 1. 邻接矩阵表示图 2. 最小生成树 最小生成树可以用Prim(普里姆)算法或Kruskal(克鲁斯卡尔)算法求出。 Prim算法简述...
树 1. 顺序存储结构二叉树 顺序存储结构的二叉树:用一组连续的存储单元来存放二叉树中的结点 2. 链式存储结构二叉树 链式存储结构的二叉树:用链表来存放二叉树中的结点 从递...
顺序循环队列 队列是一个先进先出的有序列表,可以用数组或链表来实现 使用数组实现循环队列: front指向队头元素,初始值为0 rear指向队尾的后一个位置,初始值为0 队满...
栈 后进先出 1. 顺序栈 定义栈顶top,初始值为-1 入栈:stack[++top] = data 出栈:return stack[top--] 栈空:top == -1...
链表 链表以结点的方式来存储元素 每个结点包含data域和next域(指向下一个结点) 链表在内存中不一定连续存储 链表分为有头节点和没有头结点的,根据实际需求来确定 1. ...
稀疏矩阵 稀疏矩阵:数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律 二维数组转稀疏数组: 获取原始数组的有效数据数量 根据有效数据数量创建稀疏数组 设置稀...
1. 模板方法模式* 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2. 命令模式 命令...
1. 适配器模式* 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 SpringMVC中的HandlerAd...
1. 单例模式* 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 单例模式使用的场景:需要频繁创建和销毁或创建时耗费资源过多,但又经常用到的对象 1.1 饿汉...
1. 设计模式简介 使用设计模式是为了让程序具有更好的代码重用性、可读性、可扩展性、可靠性,使程序呈现高内聚、低耦合的特性 设计模式分类: 创建型模式:单例模式(Single...
TCP通信 TCPClient: TCPServer: 模拟B/S服务器: Python常用Web框架:Django、Flask、Tornado UDP通信 UDPClien...
基本文件操作 文件打开模式:默认rt b:二进制模式;类似Java的字节流 t:文本模式;类似Java的字符流 r:只读,文件不存在则抛异常 w:只写,文件不存在则创建 a:...