自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

穹的博客

新人~学习中~大家一起呀!

  • 博客(23)
  • 收藏
  • 关注

原创 《算法分析与设计(第5版)》——王晓东 - 学习记录 / 期末复习

前言算法分析与设计。不断学习,不断更新中,预计两周内更完~一、递归与分治策略不断学习,不断更新中~ 以下这些常见算法会在两周内更新完毕!n的阶乘Fibonacci数列(菲不尼茨数列)Ackerman函数(阿克曼函数)全排列整数划分大整数乘法Hanoi塔(待定)Strassen矩阵乘法(待定)棋盘覆盖(待定)合并排序快速排序线性时间选择(待定)最接近点对问题(待定)循环赛日程表二、动态规划等待更新~(两周内)三、贪心算法等待更新~(两周内)...

2020-05-22 21:37:42 11218 8

原创 SpringBoot 文件上传

可参考:>>>javaWeb 文件上传 【原生servlet】<<<可参考:>>>SpringMVC的文件上传<<<文章目录一、前言1、问题2、原因3、解决办法二、上传功能具体实现1、导入依赖的jar包,配置application.yaml2、后端 FileController.java 和工具类 UploadFile.java2、前端 upload.html 和 show.html三、异常一、前言1、问题以前只使用Spr

2021-02-27 11:45:34 654

原创 SpringMVC 文件上传&下载

学习于狂神说java,SpringMVC文件上传总结,代码有注解文章目录一、文件上传1、导入依赖的jar包,配置Bean2、前端 index.jsp3、后端 FileController.java二、文件下载1、前端2、后端一、文件上传1、导入依赖的jar包,配置BeanSpring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartRes.

2021-02-23 15:31:32 243 1

原创 javaWeb 文件上传 【原生servlet】

javaWeb 文件上传 【原生servlet】学习于狂神说java,原生servlet文件上传总结,代码有详细注解1、导入依赖的jar包<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency> <groupId>commons-fileupload</groupId> <artifactId>c

2021-02-23 15:24:08 467

原创 【贪心算法】最小生成树(Prim算法 & Kruskal算法)(C++)

一、最小生成树问题1. 问题描述设G =(V,E)是无向连通带权图,即一个网络。(V是顶点集合,E是边集合)如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树。2. 算法分析Prim算法和Kruskal算法:都是解最小生成树问题的贪心算法;它们做贪心选择的方式不同,但都利用了下面的最小生成树性质。最小生成树性质:设G=(V,E)是连通带权图,U是V的真子集。如果(i,j)

2020-06-30 12:04:44 16162 1

原创 【贪心算法】单源最短路径(Dijkstra算法)(C++)

一、单源最短路径问题1. 问题描述给定带权有向图G =(V,E),其中每条边的权是非负实数。给定V中的一个顶点,称为源。计算从源到所有其它各顶点的最短路长度。这里路的长度是指路径上各边权之和。2. 问题分析Dijkstra算法:是解单源最短路径问题的贪心算法。基本思想:一个顶点属于集合S,当且仅当从源到该顶点的最短路径长度已知。设置顶点集合S,并不断地作贪心选择来扩充这个集合。贪心策略:每次都从V-S中找出具有最短特殊路长的顶点u加入S。算法思路:初始时,S

2020-06-29 22:19:02 24462 1

原创 【分治】线性时间选择(C++)

一、线性时间选择1. 问题描述给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。2. 线性时间选择-随机划分算法步骤:生成1个随机数 i ,将数组a[p:r]被划分成两个子数组a[p, i]和a[i+1, r];使a[p, i]中每个元素都不大于a[i+1, r]中每个元素;计算子数组a[p, i]中的元素个数j,如果k<=j,则a[p, r]中第k小个元素落在子数组a[p, i]中;如果k>j,则要找的第k小的元素落在子数组a[i+1, r]中。

2020-06-28 22:43:40 2028

原创 【分治】棋盘覆盖(C++)

一、棋盘覆盖问题0. 特殊方格与特殊棋盘在一个2k * 2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一特殊棋盘。显然,特殊方格在棋盘上出现的位置有4k种情形。因而对任何 k >= 0,有4k种特殊棋盘。图1中的特殊棋盘是k=2时16个特殊棋盘中的一个。1. 问题描述在棋盘覆盖问题中,要用图2所示的4种不同形态的L型骨牌覆盖一个给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。易知,在任何一个2k * 2k的棋盘覆

2020-06-28 16:33:48 3016 1

原创 【贪心算法】一般背包问题(C++)

文章目录一、关于一般背包问题1. 问题描述:2. 问题分析:二、算法实现1. 贪心算法2. 运行结果展示一、关于一般背包问题1. 问题描述:设有n个物品和一个背包,物品i的重量为wi,价值为vi,背包的容量为C。若将物品i的xi部分(1≤i≤n,0≤xi≤1)装入背包,则具有价值为vixi。目的是找到一个方案,使放入背包的物品总价值最高。2. 问题分析:思考:贪心算法总是作出在当前看来最好的选择,或者说在某种意义上的局部最优选择。因此,在考虑放入物品时,应当选择所有(剩余)物品中价值

2020-05-30 17:53:42 7068

原创 【贪心算法】活动安排问题(C++)

文章目录一、关于活动安排问题1. 问题描述:2. 问题分析:二、算法实现1. 自底向上 非递归 的动态规划2. 运行结果展示一、关于活动安排问题1. 问题描述:设有n个活动的集合E={i1,i2,…,in},其中每个活动都要求使用同一资源,如会场等,而在同一时间内只有一个活动能使用这一资源(争用!)。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相

2020-05-30 14:09:50 5678 1

原创 【动态规划】最优二叉搜索树(C++)

文章目录一、关于最优二叉搜索树1. 问题描述:2. 问题分析:二、算法实现1. 自底向上 非递归 的动态规划2. 运行结果展示一、关于最优二叉搜索树1. 问题描述:给定一个由n个互异的关键字组成的有序序列K={k1<k2<k3<,……,<kn}和它们被查询的概率P={p1,p2,p3,……,pn},要求构造一棵二叉查找树T,使得查询所有元素的总代价最小。对于一个搜索树,当搜索的元素在树内时,表示搜索成功。当不在树内时,表示搜索失败,用一个“虚叶子节点(虚拟键)”来表示搜索失

2020-05-29 21:18:52 3639

原创 【动态规划】0-1背包问题(C++)

文章目录一、关于0-1背包问题1. 问题描述:2. 问题分析:二、算法实现1. 自底向上 非递归 的动态规划2. 运行结果展示一、关于0-1背包问题1. 问题描述:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi>0,其价值为 vi>0 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?2. 问题分析:······有问题的最优子结构,我们可以建立m(i, j)的递归表达式如下:m(i,j)={max{m(i+1,j),m(i+1,j−wi

2020-05-28 21:46:06 6654 6

原创 【动态规划 & 备忘录】矩阵连乘问题(C++)

文章目录一、关于矩阵连乘1. 问题描述:2. 问题分析:二、算法实现1. 自顶向下 递归 的动态规划2. 自底向上 非递归 的动态规划3. 运行结果展示一、关于矩阵连乘1. 问题描述:给定n个矩阵:A1,A2,…,An,其中Ai与Ai+1是可乘的(i=1,2…,n-1)。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。要求:输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。2. 问题分析:引(++矩阵乘法++):定义:设A为

2020-05-28 15:19:22 4267

原创 【分治】循环赛日程表(C++)

文章目录一、循环赛日程表问题二、递归算法实现一、循环赛日程表问题设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1个选手各赛一次;每个选手一天只能参赛一次;循环赛在n-1天内结束。分析:按此要求,我们可以将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。规划:二、递归算法实现//待更新。。。···*其它一些常见算法请参阅此链接~

2020-05-27 14:48:57 7236 3

原创 【分治】二分查找(C++)

文章目录一、关于二分查找二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、关于二分查找二分查找?二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。使用二分查找的前置条件:待查表为有序表算法流程:首先,假设表中元素是按升序排列。将表中间位置记录的关键字mid与查找关键字key比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字mid大于查找关键字key,则进一

2020-05-27 12:16:51 1479

原创 【分治】快速排序(C++)

文章目录一、快速排序二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、快速排序快速排序?快速排序(Quicksort)是对冒泡排序的一种改进。·快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。值得注意的是,快速排序不是一种稳

2020-05-26 20:22:16 1470

原创 【分治】合并排序、自然合并排序(C++)

文章目录一、合并排序(归并排序)二、分治&递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、合并排序(归并排序)定义:引用自"百度百科"·合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。将已有序的子序列合并,得到完全有

2020-05-25 22:35:12 2318 1

原创 【分治】大整数乘法(C++)

文章目录一、大整数乘法二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、大整数乘法一般计算方法有n位大整数X和Y,计算XY:将Y的每一位与X相乘再按位相加;时间复杂度:我们需要进行一次n位的乘法,即T(n)=o(n2)T(n)=o(n^2)T(n)=o(n2)分治法(理想状态下)理想状态:假设有n位大整数X和Y(X和Y位数n相同且为偶数),计算XY。分治:我们将X、Y分别拆分为a与b、c与d,X=a∗10⌊n/2⌋+bX=a*10^{\

2020-05-25 14:54:56 4403 4

原创 【递归】整数划分(C++)

文章目录一、什么是整数划分二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、什么是整数划分所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+⋅⋅⋅+min=m_1+m_2+···+m_in=m1​+m2​+⋅⋅⋅+mi​其中mim_imi​为正整数,并且1≤mi≤n1 \leq m_i \leq n1≤mi​≤n,则{m1,m2,⋅⋅⋅,mim_1,m_2,···,m_im1​,m2​,⋅⋅⋅,mi​}为n的一个划分。如果{m1,m2,⋅⋅

2020-05-24 14:05:38 9461 5

原创 【递归】全排列(C++)

文章目录一、什么是全排列二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、什么是全排列定义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。全排列数:f(n)=n!f(n)=n!f(n)=n!二、递归算法实现1. 设计递归方程思考,假设我们对{1, 2, 3, 4}进行全排列:首先看最后一个数4,它的全排列是其自身4;然后看最后两个数3, 4,它们的全

2020-05-24 00:05:32 9497 2

原创 Ackerman函数(阿克曼函数) 递归实现(C++)

文章目录一、什么是Ackerman函数(阿克曼函数)二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、什么是Ackerman函数(阿克曼函数)定义:A(m,n)={n+1若m=0A(m−1,1)若m>0且n=0A(m−1,A(m,n−1))若m>0且n>0A(m,n)=\begin{cases}n+1 & 若m=0\\A(m-1,1) & 若m>0且n=0 \\A(m-1,A(m,n-1)) & 若m

2020-05-23 21:20:16 12840 5

原创 【递归 & 动态规划 & 备忘录法】Fibonacci数列(斐波那契数列)(C++)

文章目录一、什么是Fibonacci数列二、递归算法实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示一、什么是Fibonacci数列斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144…用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。二、递归算法实现1. 设计递归方程斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144…

2020-05-23 17:30:49 3698

原创 n的阶乘 递归算法实现(C++)

n的阶乘 递归算法实现(C++)文章目录n的阶乘 递归算法实现(C++)什么是阶乘阶乘 递归实现1. 设计递归方程2. 确定边界条件3. 编写程序代码4. 运行结果展示什么是阶乘一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。阶乘 递归实现1. 设计递归方程由阶乘的定义(n! = n*(n-1)*(n-2)*···*1)可以明显看出其设计思路f(n)=n*f(n-1)。2. 确定边界条件n为正整数,最小值为1,且1!=1,

2020-05-22 21:38:50 8041 3

空空如也

空空如也

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

TA关注的人

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