算法

如何证明升幂定理?

一、定义升幂定理(LifttheExponent,常简记为LTE)根据相应乘法群的结构不同,升幂定理分为两部分,模为奇素数与模为2,简记为LTEp和LTE2。定理需要记为素数p在整数n中的个数,即恰好整除整数n,不整除整数。由于其针对模数为素数的幂的强大威力,常出现在各种结论的快速证明中。

什么是差分约束系统?

什么是差分约束系统?差分约束系统是一种特殊的N元一次不等式组,它包含N个变量以及M个约束条件,每个约束条件都是由两个变量作差得到的,形如,其中是常数。我们根据题目要求,并用这M个约束条件求出某个不等式的最值,例如的最大值。怎么解?转化:把上面不等式稍微变形一下可以得到,

区间DP实例讲解

一、什么是区间DP?顾名思义:区间DP就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个大区间上最优解的DP算法。二、核心思路既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。

插头DP图文实例讲解

本篇通过图文解析讲述插头DP的内容,结合前面的状态压缩DP知识,以及前置知识:哈希,方便大家能快速理解。在阐述什么是插头DP之前,我们先了解插头DP有什么用?插头DP是用来解决一类网格图上的连通性问题的强力工具。题目的特征是给定的网格非常小(这个特征类似状压DP)。

堆排序算法实例详解

1.复杂度与稳定性算法时间复杂度最坏情况:O(n^2)最好情况:O(n)平均情况:O(nlogn)稳定性:不稳定排序2.什么是堆?堆排序是一个比较特殊的排序方式,在学习之前我们必须要了解什么是堆堆是一种非线性的数据结构,可以把堆看作一个数组,

序列自动机概述

在学习和了解序列自动机前,我们要熟悉自动机,“自动机”一般都指“确定有限状态自动机”。自动机是计算机科学中被广泛使用的一个数学模型,其思想在许多字符串算法中都有涉及,因此推荐在学习一些字符串算法(KMP、AC自动机、SAM)前先完成自动机的学习。

C++代码浅谈IDA*算法

本篇简述一下IDA*算法,并列出代码帮助大家理解。(1)算法简介IDA*(IDA*)算法是一种启发式搜索算法,他是采取了迭代加深的A*算法,使用了深度优先搜索的方式。相对于A*算法,IDA*算法主要解决了:1.A*算法需要判重,对优先级排序的问题。

复数的概念和运算

复数的引入,追根求源,最初是为了求解没有实数根的二次方程。例如求解这个由实数组成的方程,显然没有实数根。所以复数集可以看成实数集合的一个自然扩充。首先引入一个“新数”i。使它满足也就是说i是的解。我们再给复数定义:形如z=a+bi的数就是复数。

树上启发式合并

启发式算法是什么呢?启发式算法是基于人类的经验和直观感觉,对一些算法的优化。最常见的就是并查集的按秩合并了,有带按秩合并的并查集中,合并的代码是这样的:voidmerge(intx,inty){intxx=find(x),yy=find(y);if(size[xx]<size[yy])swap(xx,

手指树的基本结构

一、简介手指树(FingerTree)是一种纯函数式数据结构,由RalfHinze和RossPaterson提出。二、为什么需要手指树?在函数式编程中,列表是十分常见的数据类型。对于基于序列的操作,包括在两端添加和删除元素(双端队列操作),在任意节点插入、连接、删除,