
算法合集
机器不学习_
深度聚合机器学习、人工智能算法及技术实战
展开
-
数据结构之线段树
线段树也叫区间树,顾名思义,线段树是一种基于区间的树,每个节点表示一个“线段”或“区间”。树的根节点表示是“整体”的区间,左右子树分别表示这个区间的左半边和右半边。function 以节点v为根建树、v对应区间为[l,r] { 对节点v初始化 if (l!=r) { 以v的左孩子为根建树、区间为[l,(l+r)/2] 以v的右孩子为根建树、区间为[原创 2013-08-22 13:15:26 · 635 阅读 · 0 评论 -
数据结构之并查集
并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。2、Find_Set(x) 查找一个元素所在的集合查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并查集判断和合并的最终依据。判断原创 2014-04-23 15:41:39 · 555 阅读 · 0 评论 -
数据结构之图-最大团
问题描述:团就是最大完全子图。给定无向图G=(V,E)。如果UV,且对任意u,vU 有(u,v) E,则称U 是G 的完全子图。G 的完全子图U是G的团当且仅当U不包含在G 的更大的完全子图中,即U就是最大完全子图。G 的最大团是指G中所含顶点数最多的团。1、最大团点的数量=补图中最大独立集点的数量2、二分图中,最大独立集点的数转载 2014-04-23 15:45:46 · 3784 阅读 · 0 评论 -
数据结构之图-割点与桥
割点是无向图中去掉后能把图割开的点。dfs时用dfn(u)记录u的访问时间,用low(u)数组记录u和u的子孙能追溯到的最早的节点(dfn值最小)。由于无向图的dfs只有回边和树边,且以第一次dfs时的方向作为边的方向,故有:low=min{dfn(u),dfn(v),若(u,v)为回边(非树边的逆边)low(v),若(u,v)为树边}顶点u是割点当且仅当其满足(1)或转载 2014-04-23 15:44:57 · 1792 阅读 · 0 评论 -
数据结构之图-连通分量
连通分量的定义:在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。在有向图中,如果对于每一对顶点vi和vj,从vi到vj和从vj到vi都有路径,则称该图为强连通图;否则,将其中的极大强连通子图称为强连通分量。在有向图G转载 2014-04-23 15:44:06 · 8009 阅读 · 0 评论 -
图的相关概念
基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合原创 2014-04-23 15:39:24 · 702 阅读 · 0 评论 -
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.For example, givens = "leetcode",dict = ["leet"原创 2014-01-02 14:33:48 · 1234 阅读 · 0 评论 -
算法之树的分治法
分治,指的是分而治之,即将一个问题分割成一些规模较小的相互独立的子问题,以便各个击破。我们常见的是在一个线性结构上进行分治,而在本文中我们将会讲解分治算法在树结构上的运用,称之为树的分治算法。1.基于点的分治:首先选取一个点将无根树转为有根树,再递归处理每一颗以根结点的儿子为根的子树2.基于边的分治:在树中选取一条边,将原树分成两棵不相交的树,递归处理。首先我们原创 2013-08-23 10:34:54 · 1214 阅读 · 0 评论 -
算法之LCA和RMQ
最近公共祖先(Least Common Ancestors)对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。1.ST算法(在线算法):RMQ(Range Minimum/Maximum Query)问题是求区间原创 2013-09-25 23:57:45 · 676 阅读 · 0 评论 -
数据结构之AC自动机
自动机构造过程:根据模式串构造Trie树;BFS创建失败指针。 所谓失败指针类似于KMP中的next数组,当主串在Trie上进行匹配时,如果当前节点不能继续匹配时,就应当退回到当前节点的失败指针所指向的节点。在这里主要说下失败指针的构造:首先与根直接相邻的点的失败指针指向根节点,并入队列;设当前节点p1的子节点c1含字符C,沿着这个节点的失败指针走,一直走到某个节点p2,它的某个子节点c2原创 2013-09-25 23:54:26 · 751 阅读 · 0 评论 -
数据结构之双数组trie树
双数组Tire树定义:双数组Trie(Double-ArrayTrie)是trie树的一个简单而有效的实现,由两个整数数组构成,一个是base[],另一个是check[]。base:数组中的每一个元素相当于Trie树的一个节点。check:相当于当前状态的前一状态。设数组下标为i,如果base[i],check[i]均为0,表示该位置为空。如果base[i]为负值,表示该状原创 2013-09-25 23:53:21 · 3945 阅读 · 0 评论 -
组合
算法说明:从n个数中选m个数,可以分解为以下两步(1)首先从n个数中选取编号最大的数,然后在剩下的n-1个数中选取m-1个数,直到从n-(m-1)个数中选取1个数为止。/*求从a[n]中选取m个数的可能组合。数组a[n]表示候选集,即影像的波段数;b[m]用来存储当前组合中的某个元素,这里存储的是这个元素在a[]中的下标;常量M表示满足条件的一个组合中元素的个数,M=m,M只用来输出结果*原创 2014-05-09 21:41:57 · 597 阅读 · 0 评论