07 2020 档案
摘要:树与图的存储 树是一种特殊的图,与图的存储方式相同。 对于无向图中的边ab,存储两条有向边a->b, b->a。 因此我们可以只考虑有向图的存储。 邻接表: // 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点 int h[N], e[N], ne[N], idx
阅读全文
摘要:urllib基础 import urllib.request urlretrieve(网址,本地文件存储) 直接下载网页到本地 urllib.request.urlretrieve("http//www.baidu.com","F:/f盘") 清楚缓存:urlcleanup() urllib.req
阅读全文
摘要:初始化的细节问题 我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。 有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背 包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。 如果是第一种问法,要求恰好装满背包,那么在初始化时除了F[0]为0,其 它F[1.
阅读全文
摘要:提取网页源代码 import urllib.request print(urllib.request.urlopen("http://edu.csdn.net").read()) 快捷键 Ctrl+F 搜索 自动提取课程页面的QQ群 import urllib.request import re d
阅读全文
摘要:什么是正则表达式 我们希望只提取出关注的数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式。 原子 原子是正则表达式中最基本的组成单位,每个正则表达式中至少包含一个原子 常见的原子类型有: 1、 普通字符作为原子 2、 非打印字符作为原子 3、 通用字符作为原子 4、
阅读全文
摘要:是什么? 网络爬虫就是自动从互联网中定向或不定向地采集信息的一种程序 网络爬虫有很多种类型,常用的有通用网络爬虫、聚焦网络爬虫等。 做什么? 通用网络爬虫可以应用在搜索引擎中,聚焦网络爬虫可以从互联网中自动采集信息并代替我们筛选出相关的数据出来。 网络爬虫经常应用在以下方面: 1、 搜索引擎 2、
阅读全文
摘要:异常处理概述 Python程序在执行的时候,经常会遇到异常,如果中间异常不处理,经常会导致程序崩溃。比如后面我们写爬虫的时候,如果不进行异常处理,很可能虫爬了一半,直接崩溃了。 异常处理 异常处理格式 try: 程序 except Exception as 异常名称: 异常处理部分 try: for
阅读全文
摘要:文件的操作 打开文件 open(文件地址,操作形式) w:写入 r:读取 b:二进制 a+:追加 fh = open("F:/Python/g.txt","r") data = fh.read() dataline = fh.readline() print(dataline) 写入文件(w/a+)
阅读全文
摘要:什么是Python模块 为了让Python程序实现起来更方便,我们可以按需求类别将一些常见的功能(函数)组合在一起,形成模块 Python模块的导入 import 模块名 from ··· import ··· 第三方模块的安装 1、pip方式(网络安装) pip install scrapy 2、
阅读全文
摘要:Python是一门强制缩进的语言 建议用Tab进行缩进 数、字符串、列表、元组、集合、字典 字符串 a1 = 'abc' a2 = "abc" a3 = '''abc''' 列表:存储多个元素,列表里面的元素是可以重新赋值的(c语言的数组) b = [7,"cd",9] 元组:存储多个元素,元组里面
阅读全文
摘要:最短路模型 #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> PII; const int N = 110; int n,m; int g[N][N]
阅读全文
摘要:添加到path环境变量里面 作用:任意位置可以访问到Python api-ms-win-crt-runtime-l1-1-0.dll丢失 点这儿转到解决方案 Python和Sublime的整合 1.在Sublime中执行Python代码,ctrl + b 自动在Sublime内置的控制台中执行 这种
阅读全文
摘要:质数 大于1的整数中,如果只包含1和它本身这两个约数,就被称为质数,也叫素数 对于一个足够大的整数N,不超过N的质数大约有N/lnN个,即每lnN个数中大约有1个质数 质数的判定 试除法 时间复杂度O(sqrt(n)) bool isprime(int x){ if(x < 2) return 0;
阅读全文
摘要:转自在线白给大佬 什么是最大匹配? 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点。 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。 完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。 交替路:从一个未匹配点出发,依
阅读全文
摘要:二分图的概念 奇数环:由奇数条边形成的一个环 将所有点分成两个集合,使得所有边只出现在集合之间,就是二分图 一定不含有奇数环,可能包含长度为偶数的环, 不一定是连通图 二分图:当且仅当图中不含有奇数环,两个集合内部的内部没有边 染色法 时间复杂度是O(n+m) 代码思路: 染色可以使用1和2区分不同
阅读全文
摘要:Kruskal算法(适用于稀疏图) 1、将所有边按权重从小到大排序 O(mlogn) 2、枚举每条边a,b,权重c O(m) if a,b不连通 将这条边加入集合中 判断连通 使用并查集来判断两个连通块是否连通 #include<iostream> #include<algorithm> using
阅读全文
摘要:朴素版prim算法(适用于稠密图) 时间复杂度:O(n^2) 类比Dijkstra算法:Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离 S:当前已经在联通块中的所有点的集合 dist[i] = inf for n 次 t<-S外离S最近的点 st[t] = true 利用t更
阅读全文
摘要:Floyd算法 时间复杂度是O(n^3) 初始化 初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) mp[i][j] = 0; else mp[i][j] = INF; 核心算法 注意:k,i
阅读全文
摘要:SPFA判断图中是否存在负环 时间复杂度是一般O(m),最坏:(nm) 转载自小呆呆大佬 算法分析:使用spfa解决是否存在负环问题 1、dist 记录当前1到x的最短距离 2、cnt 记录当前最短路的边数,初始每个点到1号点的距离为0,只要它能走n步,即cnt >= n,则表示该图中一定存在负环,
阅读全文
摘要:Bellman_ford算法可以存在负权回路,是因为其循环的次数是有限制的因此最终不会发生死循环; 但是SPFA算法不可以,由于用了队列来存储,只要发生了更新就会不断的入队,因此假如有负权回路请你不要用SPFA否则会死循环。 Bellman-Ford算法 时间复杂度O(nm),n表示点数,m表示边数
阅读全文
摘要:朴素Dijkstra算法 时间复杂是 O(n^2+m), n 表示点数,m 表示边数 适合稠密图 #include<cstring> #include<iostream> #include<algorithm> #define mm(a,x) memset(a,x,sizeof(a)) #defin
阅读全文
摘要:区间合并 ①按区间左端点排序 ②维护一个基准(st-ed) // 将所有存在交集的区间合并 void merge(vector<PII> &segs) { vector<PII> res; sort(segs.begin(), segs.end()); int st = -2e9, ed = -2e
阅读全文
摘要:求n的第k位数字 ①先把第k位移到最后一位n>>k ②看个位是几 x&1 综合:n>>k&1 n>>k&1 返回n的最后一位1 lowbit(n): n&-n
阅读全文
摘要:朴素做法:O(n^2) for(int i=0;i<n;i++) for(int j=0;j<=i;j++) if(check(j,i)){ res=max(res,i-j+1); } 双指针算法:O(n) for(int i=0;i<n;i++) { while(j<=i&&check(j,i))
阅读全文
摘要:高精度加法 // C = A + B, A >= 0, B >= 0 #include<iostream> #include<vector> using namespace std; vector<int > add(vector<int > &A, vector<int > &B) { vecto
阅读全文
摘要:790. 数的三次方根 #include<iostream> using namespace std; int main() { double x; cin>>x; if(x<0) { cout<<"-"; x=-x; } double l=0,r=x; while(r-l>1e-8) { doub
阅读全文
摘要:789. 数的范围 #include<iostream> #include<vector> #include<algorithm> using namespace std; const int maxn =1e5+10; int a[maxn]; int main() { int n,m,x; ci
阅读全文
摘要:整数二分 转载自ACwing bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: int bsearch_1(int l, int r) { while (l < r) { int
阅读全文
摘要:快速排序 分治 ①确定分界点:q[l],q[(l+r)/2],q[r] ②调整范围 ③递归处理左右两段 #include<iostream> using namespace std; const int N = 1e5+10; int n; int a[N]; void quick_sort(int
阅读全文