- 博客(119)
- 资源 (1)
- 收藏
- 关注
原创 Essential C++ 3.6sub_vec()改写为一个template function
在讲“如何设计泛型算法”时,给出了一个filter的template例子。为了更好的理解和运用泛型算法以及template。将P89(中文版)页给出的sub_vec函数写成template版本
2022-06-12 03:08:08 310 3
原创 Bellman-Ford算法cpp算法导论原理实现
Bellman-Ford算法该算法的特性是针对更广泛情况下的最短路径查询,其中边权可以为负数,并且会针对数据判断图中是否有从源节点到达负权环路的路径。方法依旧基于Class<Graph>实现,其中对少数地方做了对应修正,在带权边最短路算法中需要两个最基本的操作:初始化操作:使得除了根节点以外的节点d属性设置为∞\infty∞,前驱节点设置为空,这里的d属性表示的是该节点距离源节点的上界或标准最小值;void Graph::InitializeSingleSource(string s
2022-04-18 16:35:50 524
原创 [算法导论24章]单源最短路径Ⅰ
Background最短路径更多的是针对一张有向有权图G=(V,E)G=(V,E)G=(V,E),图中存在某条路径:p=<v0,v1,...,vk>p=<v_0,v_1,...,v_k>p=<v0,v1,...,vk>则其路径的权重则为点集合对应的边权之和:w(p)=∑i=1kw(vi−1,vi)w(p)=\sum_{i=1}^{k} w\left(v_{i-1}, v_{i}\right)w(p)=i=1∑kw(vi−1,vi)所以定义最短
2022-04-16 21:14:23 1000
原创 拉格朗日插值公式与mathematica程序实现
插值多项式唯一性继续上一节中假设的多项式L(x)L(x)L(x),但此时为了便于分析定义最高次数为nnn:Ln(x)=∑j=0najxjL_n(x)=\sum_{j=0}^{n} a_{j} x^{j}Ln(x)=j=0∑najxj定理(插值多项式的唯一性):对任意n+1n+1n+1个互不相同的点集合{(xi,yi)∣i=0...n}\{(x_i,y_i)|i=0...n\}{(xi,yi)∣i=0...n}会存在唯一的次数界为n+1n+1n+1的多项式Ln(x)L_n(x)Ln(x
2022-04-15 19:35:10 2838 1
原创 算法导论Prim算法原理及其实现
Prim算法中文被称为普利姆算法,作为一种最小生成树的常见算法,与上节所介绍的KruskalKruskalKruskal算法存在的区别为:KruskalKruskalKruskal算法:将边权从小到大排序后选择作为两个树的连接边的边加入集合作为最小生成树边集;PrimPrimPrim算法:一棵最小生成树中的所有连接不同树木的临边选择边权最小的边加入集合作为最小生成树边集合;上述两个方法前者更倾向于以边位主连接不同森林,后者则更倾向于以一颗树开始找不同森林的边,如此操作的终止条件都为:图中没有
2022-04-12 10:44:19 2657
原创 算法导论:从推排序到优先队列
堆排序一般来说堆排序针对的是二叉堆,这是一种数组结构,且表达为完全二叉树的形式:完全二叉树:除最底层都是满的,且最下层节点从左到右依次排开。这样的好处是能够通过简单的代数计算获得父节点、左孩子、右孩子节点在数组结构中的编号:如此可以很简便的用代码表达为:int Parent(int i){ return i >> 1;}int Left(int i){ return i << 1;}int Right(int i){ return
2022-04-11 11:36:56 1173
原创 算法导论KRUSKAL算法原理及其实现
KruskalKruskalKruskal算法又称作为克鲁斯卡尔算法,是基于贪心的一种最小生成树算法,根据前两部分了解到的安全边规则与不相交集合的数据结构(并查集),即可实现该算法的内容:KruskalKruskalKruskal方法的中心思想是在图中寻找一条权重最小的连接两个不相交集合的边即为所寻找的安全边。可以理解为找的边(u,v)(u,v)(u,v)符合横向切割的轻量级边的要求且一定尊重某最小生成树集合AAA,是否尊重节点uuu代表的或者节点vvv代表的某棵正在发现过程中的最小生成树集合很容易。
2022-04-09 10:29:32 647
原创 [公式识别工具]Mathpix Snipping Tool
Mathpix Snipping Tools官方下载链接:https://mathpix.com/主要功能任意数学公式OCR识别转化为LaTexLaTexLaTex形式,输出结果兼容Word、Typora、TeXstudio等等;同时具有多种输出格式如LaTex、Markdwon、SVG等等;现在要求登录使用,单月识别次数被限制在50次以内,但通过不同邮箱即可申请多个账号。使用方法1.下载安装后登陆账号:2.设置快捷键:3.快捷键划取使用:4.提供了多种导出形式:配合Wo
2022-04-08 14:49:12 2763 1
原创 算法导论21章路径压缩的按秩合并并查集原理实现
不相交集合的数据结构定义:将集合AAA分成一些非空子集,每个子集称为一个类,且AAA中每个元素仅属于一个类。则称这些类的全体为集合AAA的一个分类,也称AAA的一个分划。从近世代数描述分类的定义中进行实例化,可以看到不相交集合的影子,其中集合AAA维护的关系为集合森林的强连通分量子集,每个节点仅属于一个连通分量的分类中。针对上述不相交集合,初始化为均是单个节点的森林,所以实现其他连通分集合的操作有三种:Make-set(x):初始化新的集合,该集合只包含x;Union(x,y):将两个连通集
2022-04-06 23:30:02 787
原创 python与matlab放大局部图
在数据可视化过程中数据呈现非线性关系的情况下,有两种常用的方式去解决显示问题:调整坐标轴比例创建图中放大局部图调整比例在坐标轴调整比例过程中,python在matplotlib和matlab的画图函数中分别提供了相应的调整非线性比例方法:matplotlib中该类提供了一种调整比例方法,实际使用时提供了四种默认的非线性比例方式与一种自定义比例方式。实际使用方法为:import mathfrom matplotlib import pyplot as pltimport numpy
2022-04-05 22:45:18 2747 1
原创 算法导论摊还分析总结Ⅰ
摊还分析摊还分析(amortized analysis):主要通过求解数据结构中一系列的操作,获得操作的平均时间评价操作的代价;不同于算法的期望,不涉及概率的另一种评价操作代价的方法;主要分为三种方法:聚合分析、核算法、势能法。首先介绍两个常规例子,之后通过例子对上述方法进行说明:例1 栈操作提供三类栈的基本操作:Push(x):将xxx压入栈中;pop():删除栈顶元素;Multipop(k):删除栈顶kkk个元素;其中假设基本操作不存在对空栈的删除操作。例2 二进制计数器
2022-04-04 18:58:45 661
原创 算法导论最小生成树安全边规则
最小生成树证明最小生成树(Minimum Spanning Trees)表示的问题抽象后更多的是在联通无向图G=(V,E)G=(V,E)G=(V,E)中,寻找∣V∣−1|V|-1∣V∣−1条边的集合T⊆ET\subseteq ET⊆E使得在新图GT=(V,T)G^T=(V,T)GT=(V,T)为一个联通无向图且边权之和w(T)=∑(u,v)∈Tw(u,v)w(T)=\sum_{(u, v) \in T} w(u, v)w(T)=∑(u,v)∈Tw(u,v)最小。换句话说就是寻找∣V∣−1|V|-1∣V
2022-04-03 23:52:41 1312
原创 python实现LU分解与LUP分解
计算机求解线性方程组Ax=bAx=bAx=b过程中,更多的是采用数值计算方法求解而取代数学意义上效率更高的求逆运算,其中一个重要的问题是数值的稳定性。上述线性方程组中AAA为nnn阶方阵,其中实际求解问题中只针对非奇异矩阵的情况下,这里首先介绍一种较为常见的LUPLUPLUP分解方式求解方法。LUPLUPLUP方法求解原理为找出满足条件的三个nnn阶方阵LUPLUPLUP使得PA=LUPA=LUPA=LU其中LLL为下三角矩阵,UUU为上三角矩阵,PPP为置换矩阵,在原方程Ax=bAx=bAx
2022-04-02 21:05:59 2348
原创 算法导论中循环不变式的简要应用
循环不变式的理解应用数学归纳法第一数学归纳法:验证n=1n=1n=1命题成立,假设n=kn=kn=k命题成立,证明n=k+1n=k+1n=k+1命题成立那么推得对任意正整数情况成立;第二数学归纳法:验证n=1,n=2n=1,n=2n=1,n=2命题成立,假设n<kn<kn<k命题成立,证明n=kn=kn=k命题成立那么推得对任意正整数情况成立;总体来说两类方法均采用递归演绎推理命题的方式将结论延伸到整个正整数集合中。循环不变式很多算法的正确性采用循环不变式的方法
2022-04-01 20:07:10 311
原创 c++算法导论原理实现拓扑排序与强连通分量并证明
拓扑排序对于有向无环图G=(V,E)G=(V,E)G=(V,E),拓扑排序的效果是将所有顶点集合进行线性排序,排序与数据的大小排序不同,拓扑排序更多的是依赖于节点间的方向关系,或者解释为是“先有鸡还是先有蛋”的故事,将蛋生鸡,鸡生蛋这种拓扑的顺序结构转变为线性结构“就是“蛋变成鸡”这种排序效果,更多的可能会应用到工程流程上或是其他领域。上述举得例子不合理因为针对有向无环图,图中存在环则意味着无法找到一个不被依赖的节点提取出来,所以”蛋变成鸡“这种线性结果是存在矛盾的。上述拓扑图是书中的例子,描述的是
2022-03-31 20:36:05 1203
原创 [CLRS Chapter22]基本的图算法Ⅳ(深度优先搜索后图中每条边的类型可以提供关于图的重要信息)
边的分类G(V,E)G(V,E)G(V,E)在基于深搜定义下的前驱子图GπG_\piGπ(又称深度优先森林)中定义了四种类型的边:树边均为深度优先森林的边(EπE_\piEπ);后向边为EEE中非树边且将节点连向祖先节点的边(自循环的边被认为是后向边);前向边为后向边的反向描述,连接向后代节点的边;横向边为所有其他类型的边,包含同一树中非祖先、深搜森林中连接两棵树的边等等;对应上节验证括号化定理的深搜的前驱子图可以得出,粗线描述的都为树边构成了前驱子图,标注为B为的是连接祖先的后向边,
2022-03-30 23:17:56 453
原创 [CLRS Chapter22]基本的图算法Ⅱ深度优先搜索原理角度实现&性质证明(括号化定理、白色路径定理)
广度优先树首先给定图GGG和目标搜索点sss的情况下,定义前驱子图Gπ=(Vπ,Eπ)G_\pi=(V_\pi,E_\pi)Gπ=(Vπ,Eπ),其中点集Vπ={v∈V∣v.π≠NIL}⋃{s}V_\pi=\{v\in V|v.\pi\ne NIL\}\bigcup\{s\}Vπ={v∈V∣v.π=NIL}⋃{s},Eπ={(v.π,v)∣v∈V−{s}}E_\pi=\{(v.\pi,v)|v\in V-\{s\}\}Eπ={(v.π,v)∣v∈V−{s}}。可以看出前驱子图表达的是由目.
2022-03-29 22:50:13 628
原创 [CLRS Chapter22]基本的图算法Ⅱ验证广搜最短路径的正确性
验证广搜最短路径的正确性首先定义最短路径δ(s,v)\delta(s,v)δ(s,v)是节点s到节点v的最短路径,若没有通路那就记为δ(s,v)=∞\delta(s,v)=\inftyδ(s,v)=∞,注意该处定义的最短路径由于是无权图所以都是单位长度。引理1. 给定有(无)向图G=(V,E)G=(V,E)G=(V,E),sss为任意节点,给定任意边(u,v)∈E(u,v)\in E(u,v)∈E会得到δ(s,v)≤δ(s,u)+1\delta(s,v)\le \delta(s,u)+1δ(s,v)≤
2022-03-28 21:53:16 519
原创 [CLRS Chapter22]基本的图算法Ⅰ(从算法导论原理c++实现算法)
书中在第二十二章图的基本算法中主要提到了以下几个部分:图的表示BFSDFS拓扑排序强连通分量相关算法题目的语言实现操作这里不做阐述,主要实现书中提到的伪代码实现与证明过程:图的表示对于G=(V,E)G=(V,E)G=(V,E)主要针对点集为VVV,边集为EEE的有向图和无向图,其中两种标准的方法是邻接链表和邻接矩阵:邻接矩阵可以看作是空间复杂度为O(V×V)O(V\times V)O(V×V)的01矩阵,当边带权重时则矩阵内部的信息会出现边权取代01值;邻接链表通过链表方式记录每
2022-03-27 22:00:40 1400
原创 c++模板元实现红黑树Ⅱ
wechat传送:源代码传送门:github绘制红黑树函数修正在基类中添加了针对红黑树的颜色显示flag布尔参数,且采用队列出队时刻节点输出相应颜色描述,确保数据不重复增加dot文件数据量,同理针对NIL指针特殊对待使其颜色描述输出一次。TreeOut(TreeNode<T> *x, string name, bool flag)...cout << "digraph Tree{" << endl;queue<TreeNode<T> *&g
2022-03-26 19:53:38 1641
原创 开源的图可视化工具——Graphviz
graphvizgraphvizgraphviz(Graph Visualization Software)是一个由AT&TAT\&TAT&T实验室启动的开源工具包,用于绘制DOTDOTDOT语言脚本描述的图形。实现可视化效果(官网摘取):下载安装官网:http://www.graphviz.org/对应各个系统版本下载,win用户安装过程中选择自动加入path即可,其他系统用户详见官网下载页说明。使用vscode对应插件Graphviz Preview。主要方法.
2022-03-25 18:15:04 2127
原创 c++模板元实现红黑树Ⅰ
文章目录基本性质cpp模板元实现继承BSTBSTBST添加属性旋转插入[情况1][情况2$or$3]基本性质红黑树是一棵二叉搜索树,所以基本性质继续保留:对树中的任意节点,左孩子关键字均小于其节点关键字,右孩子均大于等于其关键字。(等于的情况跟随实际定义效果)除此之外又附加了其他性质使其更加稳定,树中每个节点除基本二叉搜索树包含的key,left,right,p之外,还包含color属性。每个节点颜色有红黑两种;根节点为黑色;每个叶子节点都为黑色;若当前节点为红色,那么其两个子节点为.
2022-03-24 20:49:52 2291
原创 [主定理证明]递归算法时间复杂度怎么算?
文章目录分治算法递归式主定理方法定理描述:证明主定理nnn为bbb的幂次向上向下取整增加常数规模重现三种情况情况3的弱条件分治算法分治算法强调递归的求解一个问题,每个递归都有三个步骤:分解:将问题分解为子问题,子问题规模<<<原问题规模;解决:解决递归最底层无法分解的子问题;合并:将已解决的最小问题递归至上一层直至到根节点。递归式递归式是描述分治算法的一个等式或不等式,例如归并排序递归式为:T(n)={Θ(1)n=12T(n2)+Θ(n)n>1T(n)=\le.
2022-03-22 21:00:16 1317
原创 c++模板元实现二叉搜索树
文章目录二叉搜索树定义节点性质以及创建BST对象插入节点前中后序遍历查找操作最小值最大值后继前驱删除节点欢迎关注公众号二叉搜索树二叉搜索树(Binary Search Trees,BST)是一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势,所以应用十分广泛。涉及本文的全部代码与实例已全部上传至Github。定义节点每一个节点就是一个对象,其中主要包含键值、左右孩子指针和父亲指针,更泛泛地说还可以包含其他数据对象。所以首先定义节点结构:template <t
2022-03-21 02:13:14 1777
原创 Codeforces Round #762 (Div. 3)(A~C,E)
文章目录题目链接A Square String?B Squares and CubesC Wrong AdditionE MEX and Increments有能力再继续补题目链接补题挖坑A Square String?判断拆两半是不是一样,奇数直接NO,偶数从中间分开判断一下#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include
2021-12-21 01:18:55 1022
原创 leetcode 419甲板上的战舰
leetcode扫描一遍如果左边或者上边有X则不加,反之则加,注意边界判断class Solution {public: int countBattleships(vector<vector<char>>& board) { int num = 0; for(int i = 0; i < board.size(); ++i) { for(int j = 0; j < board
2021-12-19 23:21:12 214
原创 codeforces EDU round#119 div2(A~C, E)
文章目录题目链接ABC有能力再继续补E题目链接补题挖坑A今天的代码都比较难看,稍作改正,第一题可以得到只有一个N的情况不合法,其余都合法#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <vector>#include <queue>using namespace std;typedef long l
2021-12-19 01:53:01 198
原创 codeforces round#760 div3(A~E)
文章目录题目链接ABCDE有能力再继续补题目链接补题挖坑A看样例猜数据,最小最大肯定有,然后那就再用最大减最小拿出来一共三个数字#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <vector>#include <queue>using namespace std;typedef long long
2021-12-15 01:33:16 604
原创 Educational Codeforces Round 118 (Rated for Div. 2)ABC+半个E
文章目录题目链接ABCE有能力再继续补题目链接补题挖坑A码风淳朴勿喷呜呜,找位数关系,总位数大的就大,相等的凑到前面两个数相等然后继续比#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <vector>#include <queue>using namespace std;typedef long l
2021-12-02 02:35:12 339
原创 Deltix Round, Autumn 2021 (Div. 1 + Div. 2)
文章目录题目链接ABCDE有能力再继续补题目链接补题挖坑A凡是有2的因子的全提出来,之后排序乘给最大的奇数#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <vector>#include <queue>using namespace std;typedef long long ll;ll t, n
2021-11-29 01:39:48 458
原创 codeforces round#756 div3
文章目录题目链接ABCD有能力再继续补题目链接补题挖坑A绝对值记录,map方便就直接搞了#include <iostream>#include<algorithm>#include <vector>using namespace std;int t, n;int main(){ cin>>t; while(t--) { cin >> n; vector<int&g
2021-11-03 00:59:57 257 3
原创 python实现单纯形法迭代形式(待更新人工法+对偶)
输入格式与matlab的linprog公式类似链接,之前还写过这个已经忘了,可以参考,但是这个的写法要求不等式必须是≤,有需求可以自己变通单纯形法的迭代公式建议看厦大运筹学之规划论剩下的实现和原理之后再写,这个确实挺好用的????我把例子找了三个朴素的例子做了实现,结果还可以import numpy as npdef LinearProgram(f, A, b, Aeq=-1, beq=-1): """ 传入matlab样式参数,通过判断选择单纯形法,选择性添加人工法,对偶问题
2021-10-21 21:04:56 692
原创 [第一行代码笔记]常规声明Button与Edittext
第一行代码第三版第四章UI,button与edittext的常规下写法修正package com.example.uiwidgettestimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport android.widget.Toastclass MainActivity : A
2021-08-06 15:08:54 291
原创 Codeforces Round #728 (Div. 2)【ABC】
文章目录A.Pretty PermutationsB.Pleasant PairsC. Great GraphsA.Pretty Permutations构造,处理奇数前三个顺序1,2,3->3,1,2然后搞,反思一下自己把最后一个搬在第一个FastFastWA着急了代码比较丑但是能看懂凑合看/* * @Descripttion: * @Author: ssw * @Date: 2021-05-30 04:49:52 * @LastEditors: ssw * @LastEdit
2021-06-26 02:24:49 554
原创 py的sklearn中主成分分析求协方差矩阵特征值
from sklearn.decomposition import PCAimport numpy as npdef pca(data, dim=0):# 数据 降维大小(mle为auto) if dim == 0: dim = 'mle' pca_ = PCA(n_components=dim) # 降维数据 after_data = pca_.fit_transform(data) # 协方差矩阵 cov_matritx = pca_.
2021-06-03 21:50:36 559
原创 [每日一题]连续数组和(前缀和+哈希)
题目地址:力扣题目描述::给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。
2021-06-02 02:31:43 270
原创 [每日一题]吃糖果(前缀和+区间)
题目地址:力扣题目表述给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。同时给你一个二维数组 queries ,其中 queries[i] = [favoriteTypei, favoriteDayi, dailyCapi] 。你按照如下规则进行一场游戏:你从第 0 天开始吃糖果。你在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。在吃完所有糖果之前,你必须每天 至少 吃 一颗 糖
2021-06-01 17:44:25 395
原创 [每日一题]最长回文子串(动态规划实现)
题目地址:力扣题目描述::给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring
2021-06-01 13:51:52 134
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人