Lecture 1
课程介绍:
(1) 图同构的群论算法。
(2) 匹配的代数算法。
有三个着重关注的问题:
(1) 三度图的图同构问题 lec2~4。原论文下载。
(2) 可并行的 (i.e. (text{quasi-NC})) 二分图完美匹配构造一组解的问题 lec5~7。原论文地址。
(3)
在构建后端系统时,高效的算法与数据结构是至关重要的。它们可以显著提升计算和存储效率,从而使系统更稳定、快速且可扩展。本文将介绍一些常见的高效算法和数据结构,以及它们在优化后端系统中的应用。
1. 哈希表
哈希表是一种常用的数据结构,它通过将键映射到一个固定大小的数组中来实现快速的查找和插入操作。哈
UOJ 21 缩进优化题目链接
记 (M=max(a_i))
从反面考虑,考虑 (x) 让答案减小的量。即为 $sum_{i=1}^n lfloor frac{a_i}{x} rfloortimes(x-1)=(x-1)sum_{i=1}^n lfloor frac{a_i}{x} rfloor$
1.概念:
数据:统称---------------------------------------------------------------------------qq所有的数据
数据元素:可细分的数据整体----------------------------------
前言
题目链接:洛谷 P4114 Qtree1
前置知识:树链剖分
题意
给定一棵树,有修改边权和查询两点之间边权最大值两种操作,对于每个查询输出结果。
解析
已经在前置博客里提到,树链剖分 可以将树上的任意一条路径划分成不超过 (O(log n)) 条连续的链,保证划分出的每条链上的节点 DFS
目录前言一、树剖是什么?二、重链剖分树剖的实现例题总结
前言
在同学们一路走来的过程中,一定已经学习了倍增求 LCA 的算法。
倍增求 LCA 算法只适用于少部分情况,那么,如果要求在求出 LCA 的同时,对两点 (a, b) 之间的所有点权(或边权)进行求和或修改,又该怎么做呢?这里介绍一种 树
最近学习到的奇技淫巧:Lambda表达式,将函数包括递归函数改为Lambda表达式写法,可节省大量时间,在大量调用下可能节省近一半时间。
说明
该语法过于复杂,见https://en.cppreference.com/w/cpp/language/lambda,本文仅写在算法竞赛下的应用。
该语法
【单调队列】 单调队列的“扫描线”理解
“如果一个选手比你小还比你强,你就可以退役了。”——单调队列的原理
比你强,而且比你影响时间更长。
某种意义上,数学思维是生活中的思考的延伸。
算法学习笔记(66): 单调队列。引用 Pecco 的算法笔记。
在这里给出一种扫描线的理解。
题目大意
有红绿蓝三种颜色,三种颜色当中任意两个颜色混合都可以产生出一个新的颜色(然而混合产生的颜色不能与任何其它的颜色进行混合)。输入三个整数,分别代表红色,绿色,蓝色的颜色个数(每次混合各消耗一个颜色数目),求出能获得的最大颜色数量。
思路
举几个样例找找规律。比如说(1,1,0)
观前提醒:「文章仅供学习和参考,如有问题请在评论区提出」
目录前置剩余类(同余类)完全剩余系(完系)简化剩余系(缩系)欧拉函数欧拉定理扩展欧拉定理参考资料
前置
剩余类(同余类)
给定一个正整数 (n) ,把所有的整数根据模 (n) 的余数 (rin [0, n - 1]) 分为 (n) 类,
【二分图】 二分图上匹配问题 和 匈牙利算法正确性说明
本文讨论无权图
思维上没什么难度,但是文字量却比自己想的要多……
0. 一些前置
什么是二分图上的匹配?什么是匈牙利算法?
“二分图最大匹配概念、匈牙利算法” 这里引用 Pecco 的介绍。这篇文章写的非常通俗易懂,而且揭示了匈牙
背包问题
动态规划思路:
状态表示 f(i, j)
状态由几维表示
表示的集合是什么
所有选法
选法条件
只考虑前i个物品
总体积 <= j
集合的属性是什么
最大值
最小值
元素的数量
状态计算
集合的划分 f(i, j)
不含第i个物品
f(i - 1, j)
包含第i
算法:
数据结构中的算法,指的是数据结构所具备的功能
解决特定问题的方法。学习的前辈们的一些优秀的经验总结
算法的五大特征:
(1)有穷性。一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。
(2) 确定性。对千每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,
【持续更新】做题回顾和总结
2023/8/14
最近在做树和图相关的题目。中间碰到过很多关于 vis 数组的运用。这里总结一下。
vis 数组分成两种,一种是函数调用前 vis,return 的时候再取消。这样是枚举不同的 dfs 路径,在一个节点下面的所有孩子跑递归。
另外一种是全局
01背包
Acwing 2. 01背包问题
状态表示:二维
集合:只从前 (i) 个物品里面选择总体积 (leq j) 选法的集合
属性:选法价值的最大值
状态计算分为 放 (i) 和 不放 (i) (要不要把当前物品放进背包):
不放 (i) 意味着在前 (i-1) 个物品里面选,且总体积不
容斥原理
(|Acup Bcup C|=|A|+|B|+|C|-|Acap B|-|Acap C|-|Bcap C|+|Acap Bcap C|)
(|displaystyle cup_{i=1}^n A_i |=sum_{i}|A_i|-sum_{i,j} |A_i cap A_j|+ldot
buildMaxHeap方法
buildMaxHeap方法的流程简单概括起来就是一句话,从A.length / 2一直到根结点进行maxHeapify调整。下面是图解。
Java代码
public static void maxHeapify(int[] a, int i,
总结
基于比较的排序(从小到大排序)
冒泡排序
GO实现func MySort( arr []int ) []int {
// 冒泡
// 大的往后冒
for i := 0; i < len(arr); i++{
for j := 0; j <
左移和右移
无符号左移?
Java没有无符号左移
无符号右移
左边补0
有符号右移
左边用原符号位补位 即正数补0效果同无符号右移、负数补1
有符号左移
右边补0
import org.junit.Test;
public class TestAaaBinary {
@Test
publi
怎么好多陌生单词
审核怎么这么逆天,半小时还没审完
A - 3.14 (abc314 A)
题目大意
给定(pi)的值以及数 (n),要求保留 (n)位小数输出,不四舍五入。
解题思路
字符串形式储存然后截取末尾即可。
神奇的代码#include <bits/stdc++.h>
u