浅谈系列
Yishui_Blog
Try our best
展开
-
浅谈STL中的二分lower_bound()与upper_bound()
lower_bound()用途这个函数是从已排好序的数列a中利用二分搜索找出指向满足ai >= k的ai的最小指针STL中的代码实现int lower_bound(int *array, int size, int key){ int first = 0, middle; int half, len; len = size; while(len > 0) {原创 2017-08-07 18:20:55 · 273 阅读 · 0 评论 -
对动态规划(dp) 的一些思考与背包问题浅析(背包九讲笔记
DP入门探讨动态规划是什么适用情况最优子结构无后效性重叠子问题求解问题背包问题0-1背包问题:解题思路:完全背包问题:解题思路:多重背包问题:解题思路:例题几个比较有趣的dp题背包题DP入门探讨动态规划是什么 动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理...原创 2018-06-09 16:27:32 · 496 阅读 · 0 评论 -
浅谈最短路中的Bellman–Ford 算法 (SPFA
Bellman–Ford简单介绍Bellman-Ford算法与Dijkstra算法思想一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,关键是还可以解决存在负权边的问题,而Dijkstra算法只能处理边权非负的问题,因此 Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法时间复杂度为 O...原创 2017-08-06 00:39:54 · 1598 阅读 · 0 评论 -
浅谈康托展开与其逆运算
康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。公式X=an∗(n−1)!+an−1∗(n−2)!+.....+a1∗0X = a_n*(n-1)!+a_{n-1}*(n-2)!+.....+a_1*0其中aia_i为整数,并且0<=ai<i,1<=i<=n。0<=a_i<i,1<=i<=n。aia_i的原创 2018-01-26 18:42:11 · 235 阅读 · 0 评论 -
浅谈关于数据结构中的树
树树的定义: 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有原创 2017-09-27 18:05:10 · 354 阅读 · 0 评论 -
浅谈最短路中的Dijskra算法
Dijkstra一.算法背景Dijkstra 算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家 Edsger Wybe Dijkstra 提出。该算法常用于路由算法或者作为其他图算法的一个子模块。举例来说,如果图中的顶点表示城市,而边上的权重表示城市间开车行经的距离,该算法可以用来找到两个城市之间的最短路径。二.算法描述算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分为两组,第一组为原创 2017-08-04 00:38:29 · 24029 阅读 · 2 评论 -
浅谈扩展欧几里得
扩展欧几里得算法求的是方程 的解原理: 设 a>b,当b==0时,,此时x=1,y=0,否则设 由于,所以进一步得到 所以得到 代码实现void extend(LL a, LL b, LL, &x, LL &y ){ if(b == 0) { x = 1; y = 0; return ; } extend(b原创 2017-07-30 20:52:17 · 324 阅读 · 0 评论 -
浅谈欧拉定理
欧拉定理若n,a为正整数,且n,a互质,(a,n) = 1,则a^φ(n) ≡ 1 (mod n) 特别的φ(1)=1欧拉函数性质(1) p^k型欧拉函数:若N是质数p(即N=p), φ(n)= φ(p)=p-p^(k-1)=p-1。若N是质数p的k次幂(即N=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。(2)mn型欧拉函数设n为正整数,以φ(n)表示不超过n且与n原创 2017-07-30 21:49:42 · 1588 阅读 · 0 评论 -
浅谈容斥原理鸽巢原理(抽屉原理
容斥原理算法简述在集合S中至少具有,,…中的一个元素的个数是:主要运用场合与思路:简单的讲:容斥原理的最重要的应用就是去重。如果完成一件事情有n类方式,…,每一类进行方式有中方法(1 <= i <=n),但是这些方法在合并时存在重叠现象,这时可以选择尝试容斥原理。在比赛中单独使用容斥原理的情况并不多见,常见的问题有错排问题等。模板可以用二进制的思想来枚举所有可能的情况,若某位上置1则表示要选取该元素原创 2017-07-31 02:45:32 · 2270 阅读 · 0 评论 -
浅谈最小生成树
什么是最小生成树最小生成树是一副连通加权无向图中一颗权值最小的生成树最小生成树其实是最小权重生成树的简称。一个连通图可能有多个生成树。当图中的边具有权值时,总会有一个生成树的边的权值之和小于或者等于其它生成树的边的权值之和。广义上而言,对于非连通无向图来说,它的每一连通分量同样有最小生成树。以有线电视电缆的架设为例,若只能沿著街道布线,则以街道为边,而路口为顶点,其中必然有一最小生成树能使布线成本最原创 2017-08-03 10:53:04 · 2030 阅读 · 1 评论 -
浅谈如何写出一个正确的二分查找算法
前言二分在算法竞赛方面是一个非常重要的算法, 虽然算法思想与实现都是比较简单易懂的, 但是真正的代码实现,往往都是十分代码九份有BUG.博主在考研复习中又重新学习了这个两年前貌似都掌握的算法, 在这里写下这个文章作为学习笔记, 也希望可以帮助到更多的人写出可以在更多的场景下无BUG的二分.C++的内置函数-求下界lowerbound() 与 upperbound()这两个函数的返回值...原创 2019-03-23 14:05:22 · 586 阅读 · 0 评论