- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 python入门(六) 文件与异常
的特殊对象来管理程序执行期间发发生的错误,每当发生了Python不能处 理的错误时,它都会创建一个异常对象,如果你编写了处理该异常的代码,文件将正常运行,如果 你对该异常未处理,程序将停止,并显示一个traceback,其中包含有关异常的报告;如果你想给文件添加内容,而不是覆盖原有的内容,可以用附加模式打开文件,此时你写入的内容将会添加到原内容的末尾,如果指定的内容不存在,python将为你创建一个空文件;发生错误的时候,程序的工作还没有完成,妥善的处理错误就尤为的重要,
2025-03-25 19:25:38
767
原创 python入门(五) 类
而__init__()是一个很特殊的方法,每当用这个类创建实例的时候,Python就会自动运行这个方法(可以类比C++中的构造函数);对于部分的父类方法,可能并不符合子类模拟事物的方式,便可以对其进行重写;例如在子类中定义一个方法,其与想要重写的父类方法同名,这样的话,python就不会再考虑这个父类方法,而是只关注在子类中定义的相应方法。用代码模仿实物的时候,可能发现给类添加的细节越来越多了,这时,可以考虑将类的一部分,作为一个独立的类抽离出来,从而可将大类拆分成多个协同工作的小类。
2025-03-13 17:34:34
195
原创 python入门(四)(字典)
返回一个键-值对列表,是字典的一个方法,从而每个对的“键”与“值”会分别被存入key和val中,实现迭代;同样也可以对值进行遍历,用到方法.values()
2025-03-10 05:27:06
189
原创 python入门(三)列表篇二
这在python的语法中表示将 s 关联到 t 的列表,而非创建一个 t 的副本,这样的话,改动 t 中的元素时,s 中的元素也会发生相同的变化。虽然元组的元素不可修改,但其实我们可以给储存元组的变量重新赋值。希望将range函数生成的数字序列转化为列表,可以使用函数。基于此,可以与C语言中的 const 进行类似。这篇博客主要涉及“操作列表”的相关知识。元组的遍历和切片与列表是类似的。将其与列表的中括号做区分。
2025-03-04 14:53:33
174
原创 python入门(一)基础篇
map 是 Python 中的一个内置函数,用于将一个函数应用到可迭代对象(如列表、元组等)的每个元素上,并返回一个迭代器。”的,只有在转化的列表或遍历的时候才会产生对应的值。map的返回值是一个迭代器,迭代器不等于列表;关于合并/拼接字符串, 可以直接使用。如此一来你的串内部可以包含。2、lambda 函数;
2025-03-02 23:50:36
211
原创 链式前向星存图与拓扑排序
可是仅仅如此,是无法做到有顺序的遍历的,所以,我们需要取用一个head数组,用head[u]描述所有以u为头节点存储的最后一条边,并且将所有以u为头结点的边用.next串联,从而达到遍历的效果。对象是有向无环图,而拓扑排序的目的,就是找到一个遍历,使得其遍历了所有的点,则这个点的顺序称为一种拓扑排序。其算法思路为:先找到所有入度为0的点,存入队列中,再将这些点全部删去,然后在图中再次找出所有入度为0的点,循环往复。鉴于拓扑排序的考虑对象在点,不便于用链式前向星存储,故采用点为主体的链表结构。
2024-09-08 20:36:02
246
原创 [算法]排序
当待排序的序列中存在a[i]与a[j],且a[i]=a[j],在经过某算法排序后,a[i]与a[j]的相对位置不发生改变,例如a[i]在a[j]之前,排序过程中,a[i]一直在a[j]之前,则我们认为该排序算法是稳定的,以冒泡排序为例。其中,a[1..i]描述的就是“左手”中排列好的“牌”,也就是大小排好的序列,而a[i+1..n]则是待排序的“乱牌堆”;快速排序的思路,是选定一个标准数,将序列中比标准数小的扔到左边,将序列中比标准数大的扔到右边,再分别对左序列与右序列进行同样的操作。
2024-09-06 20:29:51
267
原创 证明补码下,~n=-n-1
10运算表示的就是将正数 10 的补码转换为负数 10 的补码,而非简单的由 “00001010” 变为 “10001010”,因为 “10001010” 是 “-10” 的原码,而计算机的处理用的是补码,故为 “11110110”,故左右相等,证毕。10 的原码是 “00001010”,为正数,所以输入后 10 的补码也是 “00001010” ,接下来计算机的运算是补码运算,~10+1 =~n = -n-1,等价于证明~n+1 = -n,以n=10作为例子;
2024-08-13 22:52:27
262
原创 从溢出视角看补码
CPU并没有减法运算器,而计算机对减法的处理需要则用到补码,从而实现将二进制数的减法转化为加法运算,以达到电路设计的目的。计算机对二进制数的加法运算有溢出的特点,那么可以考虑将减法通过加法溢出达到相同的效果。由上述过程,说明了补码相加即利用了计算机二进制数的溢出实现减法过程。举个例子,8 bit 二进制数 的计算在取值达到。正数的补码、原码和反码相同;负数的反码符号位为"的补码相加,在数值上等价于。恰好溢出,相当于结果对。
2024-07-07 22:48:09
239
原创 倍增LCA
其实这个LCA没啥优化(主要是因为博主太弱了QwQ)首先,什么是LCA? : 指在有根树中,找出某两个结点u和v最近的公共祖先。那什么是倍增呢? : 是指将在树上的u点与v点同时向上传递时,每次不是指移一位,而是移位从而大大提高时间效率。(预处理为O(nlogn),之后的挨次询问为O(logn) )。(为了时间,我二话不说地使用了链式向前星与快读QwQ)...
2019-08-16 23:14:16
123
原创 dijstra+链式前向星+优先队列优化
dijstra——强大的算法dijstra+链式前向星+优先队列优化=满分的最短路由于SPFA在最坏情况下会退化,所以我决定使用dijstra来解决最短路问题。链式前向星就是存图用的,比邻接矩阵节省空间得多(点这)而由于dijstra是基于贪心的,所以也可以用优先队列来维护写个模板吧:#include<bits/stdc++.h>#define FOR(i,...
2019-08-13 19:36:32
614
原创 SPFA+Dijkstra优化
SPFA+Dijkstra优化 其实就是用优先队列对SPFA进行优化的一种算法优化。而SPFA的基本思路为:用数组d记录每个结点的最短路径估计值,而且用邻接表来存储图G。设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列中,就将v点放入队尾。这样不断从队...
2019-02-13 22:02:52
541
原创 队列
什么是队列? 队列就是一种先进先出的数据结构,如下图。(画风不好) 我们来试着存一下队列:#include<bits/stdc++.h>using namespace std;int f,l,n,a[10001];int main(){ scanf("%d",&n);for(int i=1;i<=n;i++){ a[++l]=i;}...
2018-12-09 21:15:08
132
原创 单源最短路径----prim算法
这一题是用二维数组将点存入。 scanf("%d%d%d",&x,&y,&z); if(a[x][y]!=0){ a[x][y]=min(a[x][y],z); } else a[x][y]=z;至于那个判断则是判重边啦。先将每个点的权值赋最大(d数组存点的值)。const int inf=100000000;......for(i=1;i...
2018-10-23 21:12:22
985
原创 谈论贪心
欢迎各位于百忙之中来看我的算法博客,这主要是为新手准备的资料,而会的大佬可以忽略。贪心算法是一种策略算法,没有特定格式,用策略求解即可。首先,使用贪心算法要满足该问题的局部解可以满足全局最优解。 举个栗子例子:现在有X个包,每个包有Y种物品,每个物品的价格为z[x][y],现在从每个包里拿出N个物品,如何使总价值最大? 如: X=3,Y=2,N=1;z[x][y]=(3 4) (5...
2018-10-23 21:07:41
143
原创 二叉树——kruskal
~~已会各位大佬们可以跳过QwQ~~ , 今天我们用Kruskal算法来解这道题。1. 定义 int fa[1000100],i,j,k,n,m,s,ans;//基本变量:) struct eige{ int x,y,z;}a[1000100];//主要是为了排序2. 排序函数定 int cmp(eige u,eige v){ return ...
2018-10-16 19:22:27
190
原创 二分图匹配
首先,什么是二分图?——二分图,顾名思义,就是由两个子集组成的特殊图论模型,如下图可以将大写字母看作男生,将小写字母看作女生,则A男生与b女生之间有好感,且C男生与b女生之间也有好感。那么,二分图匹配又有什么用?——二分图匹配主要用于寻找增广路径的运算,接下来我们就来介绍一种算法:匈牙利算法!比如说上图(还是那张恶心的图......),A男生与b女生之间有好感,可是男生与b...
2018-10-15 23:47:39
162
原创 拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。 1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B ,则A为B的前序...
2018-10-02 23:27:02
114
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人