自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 《Effective C++》省流版

你不仅应该推迟一个变量的定义直到你不得不用它之前的最后一刻,而且应该试图推迟它的定义直到你得到了它的初始化参数。对于循环(我们在循环中要用到一个变量,可以在循坏外定义也可以在每次循环定义),除非你确信以下两点:(1)赋值比构造函数/析构函数对成本更低(2)你正在涉及你的代码中的性能敏感的部分。否则,你应该默认在循环内声明对象。如题,因为会违反32提到的is-a规则当你在父类中写一个虚函数并且使用了默认参数值的话然后你又试图在子类中重写这个方法,并且改变了这个默认参数的值。

2024-06-22 01:34:32 745

原创 算法笔记15.贪心算法

贪心算法的难点在于证明贪心的答案是最优解,我们用Ans代指最优解,Cnt代指贪心解。我们只要能证明两条,Ans = Cnt。就能证明Ans = Cnt。

2024-04-11 12:26:02 220 1

原创 算法笔记14.动态规划

就是切割问题变成一堆小问题,最好子问题之间可以递推,这样就能利用之前的子问题的答案得出新的结果。可以削减总量,比如求n个数的什么什么,可以削n的大小,n削到n-1……一直到1,1的结果很好求,然后利用1的结果求2,然后再一直求到n。也可以不削总量削单量,比如上面的把要求的结果切割成多个n个数的小结果叠加,求n个数的小结果a,b……。最后再把a,b……加起来得最终结果。

2024-04-03 11:09:25 821 1

原创 算法笔记9.最小生成树,二分图

最小生成树对应的都是无向图,一个有N个点的图,在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的,得到的就是最小生成树。常用两个算法:Prim算法和Kruskal算法。Prim算法和Dijkstra算法特别像,而且也是分为两个朴素版和堆优化版(但是基本不用)。一般常用朴素版Prim(稠密图)和Kruskal算法(稀疏图)。

2024-03-29 12:39:42 164 1

原创 算法笔记8.最短路

最短路问题一般分为两类,单源最短路和多源汇最短路。是求一个点到其他点的最短距离,单源最短路又可以分为两大类,所有边权都是正数和存在负权边两类。:朴素Dijkstra算法,时间与边数无关,适合稠密图。和堆优化版的Dijkstra算法,适合稀疏图。:Bellman-Ford算法。SPEA算法(效率高一些,但是如果有限制经过的边数就不能用)就是起点和终点不固定求最短路径,只有一种Floyd算法。

2024-03-25 22:56:51 277

原创 算法笔记7.树和图的存储,DFS,BFS,拓扑排序

树是一种特殊的图,是一种无环连通图。所以下面只讲图。图分有向图和无向图,无向图是一种特殊的有向图(无向图就是一个路径两个方向)所以下面只写有向图怎么存,两种存储方式邻接矩阵(二维数组,存储bool值,也可以存权值。两个索引代表从哪个点到哪个点,用的少,浪费空间,适合存稠密图)和邻接表(单链表,每个点存一个单链表,链表存储这个点可以到哪个点,比如点a可以到点b和点c,那点a的单链表就存点b,然后b指向c。但是这里的指向无意义,只是方便查找)

2024-03-23 20:23:14 295

原创 算法笔记6.Hash表,STL使用简介

最主要的作用就是把一个比较大的值域映射到一个比较小的空间。一般就是有一个哈希函数定义一个规则,输入一个大的数,输出一个小的数(一般是直接取mol,一般是取成质数,离2远点,这样冲突概率最小)。但是这个规则有可能会有冲突,比如两个数映射出来是同一个数,这时一般就会用到下面的两种方法前面写的离散化是一种特殊的哈希方式。

2024-03-22 21:18:31 269 1

原创 算法笔记5.Tire树,并查集,堆

并查集就是一个用来快速实现合并和查找根节点的数据结构,一般是一个树形结构是一个集合。合并是将两个集合合并为一个大集合,查找是看一个元素是不是这个集合的。堆是一个完全二叉树(左右都很满的那个),其中有一个特点,每个点的值都小于等于左右两个子节点的值基本操作是插入新元素,查找最小节点,删除最小节点,删除任意一个元素,修改任意一个元素。

2024-03-21 17:14:44 275 1

原创 算法笔记4.链表,栈与队列,kmp

一般链表都是结构体加指针实现(动态链表,效率慢),但是这是算法的笔记,所以为了效率考虑是用数组模拟的。

2024-03-19 20:39:02 421

原创 算法笔记3.双指针,位运算,离散化,区间合并

位运算就是将一个数转换为二进制后对二进制位进行计算。其中有一个lowbit问题,意思是要得到一个数的二进制形态的最后一位1。有的时候我们会遇到那种给我们一堆区间,然后要求我们合并区间(就是将区间中有内容重复的合并成一个大区间,可以理解成是将有交集的变成并集)

2024-03-16 22:45:30 442

原创 算法笔记2.高精度计算,前缀和,差分

有的时候,我们需要计算一个数组的中一段连续的数的和,比如有个长度为10的数组,我们需要计算第2到第5个元素的值的和。这时候就需要用到前缀和(基本上也就这里用)前缀和差分是逆运算,就像积分和微分的关系一样。A是B的前缀和数组,B是A的差分。为了避免混淆,后面统称为原数组和差分数组。有的时候我们需要在一个数组的一个区间的每一位的值都增加。这时候就可以用到差分了。

2024-03-16 16:11:56 540

原创 算法笔记1.快速排序,归并排序,二分查找

得到的数组都是排好序的,所以可以从两个数组的左端开始,比较两个值将小的放入结果数组,然后继续比较,直到一个数组被取完,再将剩下的数组拼到最后即可。排序前先找到一个值作为中间值(代码模板中是取数组第一个数),然后每次排序确保这个中间值左边的数都小于等于中间值,中间值右边的数都大于等于中间值。这个排序是先将数组切到最小,比如最小的左右两边的数组都只有一个元素(不需要排序也就算是排好序了),然后合并到一起。当左右两边递归结束后,将得到两个排好序的数组,然后再将两个数组合并到一起。

2024-03-13 21:48:23 311

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除