![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
作业写不完的卑微小cookie
你连夜都不熬,那你熬什么,奥利给吗?
展开
-
图论算法
图论算法1. 最小生成树(Kruscal算法)/**** **** **** **** **** ****Function Name : 最小生成树(Kruscal算法)Description : ZJU 1203**** **** **** **** **** ****/#include <iostream>#include <algorithm>#include <cstdio>#include <cmat原创 2021-01-24 16:29:09 · 108 阅读 · 0 评论 -
数论算法
数论算法1. Greatest Common Divisor最大公约数int GCD(int x, int y){ int t; while(y > 0) { t = x % y; x = y; y = t; } return x;}2. Prime素数判断bool is_prime(int u){ if(u == 0 || u == 1) return false;原创 2021-01-24 16:16:49 · 116 阅读 · 0 评论 -
常用函数和STL
常用函数和STL一. 常用函数#include <stdio.h>int getchar( void ); //读取一个字符, 一般用来去掉无用字符char *gets( char *str ); //读取一行字符串#include <stdlib.h>void * malloc( size_t size ); //动态内存分配, 开辟大小为 size 的空间void qsort( void *buf, size_原创 2021-01-24 16:12:37 · 76 阅读 · 0 评论 -
给定一个层数n,输出字母三角形
给定一个层数n,输出字母三角形一、【问题描述】给定一个层数n,输出字母三角形输入格式输入一个整数n(0< n≤26),表示字母三角形的层数。输出格式按照题目描述,输出字母三角形。样例输入:2样例输出: A BBB二、Talk is cheap,show you the code#include<iostream>#include<string>using namespace std;int main(){ int n; cin>&原创 2020-08-13 22:27:35 · 2442 阅读 · 0 评论 -
递归算法
递归算法一、思维导图概要二、递归算法的执行过程在执行递归函数时会直接调用自身,但仅仅有这种操作,将会出现无休止地调用而陷入死循环。因此,一个正确的递归函数虽然每次调用的是相同的代码,但它的参数、输入数据等均有变化,并且在正常情况下随着调用的不断深入必定会出现调用到某一层的函数时不再执行递归调用而终止函数的执行,即遇到递归出口。递归函数可以看成是一种特殊的函数,递归函数调用是函数调用的一种特殊情况,即它是调用自身代码,因此也可以把每一次递归调用理解成调用自身代码的一个复制件。由于每次调用它的参数和局原创 2020-08-04 14:01:09 · 1352 阅读 · 0 评论 -
STL在算法设计中的应用——优先队列作为堆
优先队列作为堆STL在算法设计中的应用有如下几种:Ⅰ.存放主数据Ⅱ.存放临时数据Ⅲ.检测数据元素的唯一性Ⅳ.数据的排序⭐Ⅴ.优先队列作为堆此篇主要内容就是 Ⅴ.优先队列作为堆在有些算法设计中用到堆,堆采用STL的优先队列来实现,优先级的高低由队列中数据元素(比较运算符)确定,很多情况下需要重载关系函数。一、元素为内置类型的堆①对于C/C++内置数据类型,默认是以less<T>(小于关系函数)作为关系函数,值越大优先级越高(即大根堆),可以改为greater<T>原创 2020-07-12 17:50:01 · 294 阅读 · 0 评论 -
STL在算法设计中的应用——数据的排序
数据的排序STL在算法设计中的应用有如下几种:Ⅰ.存放主数据Ⅱ.存放临时数据Ⅲ.检测数据元素的唯一性⭐ Ⅳ.数据的排序Ⅴ.优先队列作为堆此篇主要内容就是 Ⅳ.数据的排序对于list容器中元素的排序可以使用其成员函数sort(),对于数组或者vector等具有随机访问特性的容器可以使用STL算法sort()一、内置数据类型的排序①对于内置数据类型的数据,sort()默认以less<T>(小于关系函数)作为关系函数实现递增排序,为了实现递减排序,需要调用<funct原创 2020-07-12 16:43:11 · 322 阅读 · 0 评论 -
设计一个算法判断字符串str中每个字符是否唯一
一、问题描述设计一个算法判断字符串str中每个字符是否唯一,例如,"abc"的每个字符是唯一的,算法返回true,而"accb"中字符’c’不是唯一的,算法返回false。二、问题解答解析:这里需要用到STL在算法设计中的应用,STL在算法设计中的应用有如下几种:Ⅰ.存放主数据Ⅱ.存放临时数据⭐ Ⅲ.检测数据元素的唯一性Ⅳ.数据的排序Ⅴ.优先队列作为堆因此这里需要用上的就是Ⅲ.检测数据元素的唯一性用户可以使用map容器或者哈希表容器检测数据元素是否唯一,设计map<char,int原创 2020-07-11 20:00:32 · 485 阅读 · 0 评论 -
设计一个算法判断表达式中的括号是否匹配
一、问题描述设计一个算法判断表达式中的括号是否匹配二、问题解答解析:这里需要用到STL在算法设计中的应用,STL在算法设计中的应用有如下几种:Ⅰ.存放主数据⭐ Ⅱ.存放临时数据Ⅲ.检测数据元素的唯一性Ⅳ.数据的排序Ⅴ.优先队列作为堆因此这里需要用上的就是Ⅱ.存放临时数据这里的主数据是一个字符串表达式,采用string字符串str存储它。在判断括号是否匹配时需要用到栈(因为每个右括号都是与前面最近的左括号匹配),采用stack<char>容器作为栈。对应程序如下:#incl原创 2020-07-11 19:48:53 · 10361 阅读 · 1 评论 -
有一段英文由若干个单词组成,单词之间用空格分隔,编写程序提取其中所有的单词
一、问题描述有一段英文由若干个单词组成,单词之间用空格分隔,编写程序提取其中所有的单词二、问题解答解析:这里需要用到STL在算法设计中的应用,STL在算法设计中的应用有如下几种:⭐Ⅰ.存放主数据Ⅱ.存放临时数据Ⅲ.检测数据元素的唯一性Ⅳ.数据的排序Ⅴ.优先队列作为堆因此这里需要用上的就是Ⅰ.存放主数据;这里的主数据是一段英文,采用string字符串str存储,最后提取的单词采用vector容器words存储,对应的完整程序如下:...原创 2020-07-11 18:02:51 · 5251 阅读 · 1 评论 -
算法设计与分析——常用的STL容器(三)
常用的STL容器STL容器很多,每一个容器就是一个类模板一、容器种类①顺序容器②适配器容器③关联容器二、关联容器原创 2020-07-10 23:04:19 · 229 阅读 · 0 评论 -
算法设计与分析——常用的STL容器(二)
常用的STL容器STL容器很多,每一个容器就是一个类模板一、容器种类①顺序容器②适配器容器③关联容器二、适配器容器原创 2020-07-10 11:33:54 · 205 阅读 · 0 评论 -
算法设计与分析——常用的STL容器(一)
常用的STL容器STL容器很多,每一个容器就是一个类模板一、容器种类①顺序容器②适配器容器③关联容器二、顺序容器(1)vector(向量容器)①相当于数组,存储具有相同数据类型的一组元素。如果初始分配的空间不够,当超过空间大小时会重新分配更大的空间(通常按照两倍大小扩展),此时需要进行大量的元素复制,从而增加了性能开销。②定义vector容器的几种方法如下:vector<int> v1; //定义元素蔚int的向量v1vector<int> v2(10);//原创 2020-07-09 22:42:43 · 423 阅读 · 0 评论 -
有一个含n(n」2)个整数的数组a,判断其中是否存在出现次数超过所有元素一半的元素
一、问题描述有一个含n(n>2)个整数的数组a,判断其中是否存在出现次数超过所有元素一半的元素二、问题分析与解答分析:可以先将数组a中的元素递增排序,再求出出现次数最多的次数maxnum,最后判断是否满足条件代码实现:#include<stdio.h>#include<algorithm>using namespace std;void solve(int a[],int n,int &x){sort(a,a+n);int maxnum=0;int原创 2020-07-09 16:02:24 · 4197 阅读 · 5 评论 -
判断一个大于2的正整数n是否为素数的方法有多种,给出两种算法,说明其中一种算法更好的理由
判断一个大于2的正整数n是否为素数的方法有多种,给出两种算法,说明其中一种算法更好的理由问题解答:#include<stdio.h>#include<math.h>bool isProme1(int n){for(int i=2;i<n;i++)if(n%i==0)return false;return true;}bool isPrime2(int n){for(int i=2;i<sqrt(n);i++;if(n%i==0)return原创 2020-07-09 11:44:05 · 10703 阅读 · 5 评论 -
算法设计与分析——算法设计工具Standard Template Library即STL(C++模板库)概述
STL构成:①Container(容器)②Algorithm(算法)③Iterator(迭代器)原创 2020-07-09 10:18:55 · 580 阅读 · 0 评论 -
动态规划求解整数拆分问题练习题
动态规划求解整数拆分问题一、问题描述:写f(6,4)的求解过程,实际是在求dp[5][5]。二、问题分析详情可见博客https://blog.csdn.net/weixin_44279771/article/details/105877374????传送门二、正确答案原创 2020-06-07 22:37:37 · 367 阅读 · 0 评论 -
画出使用回溯法解0/1背包问题的解空间树
画出使用回溯法解0/1背包问题的解空间树问题描述:使用回溯法解0/1背包问题:n=3,W=9, W={2,4,5}, V={6,10,7},其解向量x由长度为3的0-1向量组成,并画出其解空间树(从根出发,左1右0),计算其最优值及最优解。问题解析:再这个问题中每个物品要么装入,要么不装入,其解空间是一棵子集树,树中每一个结点表示背包的一种选择状态,记录当前放入背包的总重量和总价值,每个分枝结点下面由两条边表示对某物品是否放入背包的两种可能的选择。正确答案:...原创 2020-06-07 16:00:31 · 18558 阅读 · 0 评论 -
贪心算法求最优作业调度问题练习题
问题描述:若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且(a1,a2,a3,a4)=(4,5,10,9),(b1,b2,b3,b4)=(6,3,14,8)。写出john贪心算法步骤,并按步骤求4个作业的最优调度方案,并计算最优值。问题分析:Johnson算法采用贪心思路,其步骤如下:(1)把所有作业按照M1.M2的时间分为两组,a[i]<=b[i]对应第一组N1,a[i]>b[i]对应第0组N2(2)将N1的作业按照a[i]递增排序,N2的作业按照b[i]递减排原创 2020-06-07 15:14:14 · 3476 阅读 · 0 评论 -
设有两个复数x=a+bi,y=c+di。复数乘积xy可以使用4次乘法来完成,即xy=(ac-bd)+(ad+bc)i。设计一个仅用3次乘法来计算乘积xy的方法
问题描述:设有两个复数x=a+bi,y=c+di。复数乘积xy可以使用4次乘法来完成,即xy=(ac-bd)+(ad+bc)i。设计一个仅用3次乘法来计算乘积xy的方法。(写了xy的通式即可)正确答案:xy=(ac-bd)+((a+b)*(c+d)-ac-bd)i,由此可见,这样计算xy只要3次乘法,即ac、bd、(a+b)(c+d)乘法运算。...原创 2020-06-07 15:01:51 · 2768 阅读 · 0 评论 -
求递归方程的时间复杂度
计算公式如下对于T(n) = aT(n/b)+cn^k;T(1) = c 的递归关系,有如下结论:if (a > b^k) T(n) = O(n^(logb(a)));if (a = b^k) T(n) = O(n^k*logn);if (a < b^k) T(n) = O(n^k);对于:T(n) = 25T(n/5)+n^2a=25 b = 5 k=2有:a==b^k 故T(n)=O(nk*logn)=O(n2*logn)对于:T(n)=4T原创 2020-06-07 14:37:30 · 1070 阅读 · 0 评论 -
动态规划算法练习题求解三角形最小路径问题
1.[填空题]求解三角形最小路径问题数组a=23 46 5 78 3 9 2求dp[0][0]=( ),dp[3][1]=( ),dp[3][3]=( ),pre[3][1]=( ),pre[3][3]=( ).ps:解决此题具体理论知识可参考博文https://blog.csdn.net/weixin_44279771/article/details/105884040????传送门正确答案:(第1空)2(第2空)13(第3空)15(第4空)1(第5空)2解析:求原创 2020-06-06 23:50:14 · 572 阅读 · 0 评论 -
动态规划算法练习题之求解最大连续之子序列和问题
[多选题]求解动态规划问题一般要具有三个性质( )A.贪心性质B.最优性原理C.无后效性D.有重叠子问题正确答案:BCD[单选题]用动态规划方法求解{-2,11,-4,5,4,-1 ,2}子序列 的最 大连续子序列和。dp[2]=( ) ,dp[6]=( )A.9, 15B.11,15C.9,8D.11,8正确答案:B用动态规划方法求解最大连续子序列和问题,其状态转移方程是:dp[0]=0dp[j]=max{dp[j-1]+a[j],a[j-1]}d..原创 2020-06-06 22:51:02 · 376 阅读 · 0 评论 -
贪心算法多机调度问题,有n=7个任务,m=3台机器,作业处理时间如图所示,用贪心法给出一种作业调度方案,使n个作业尽可能短的时间内由m台机器加工处理完成。
一、【问题描述】多机调度问题,有n=7个任务,m=3台机器,作业处理时间如图所示,用贪心法给出一种作业调度方案,使n个作业尽可能短的时间内由m台机器加工处理完成。A.机器1:{4、7},机器2:{5、1、6},机器3:{2、3},最少时间为11B.机器1:{4、7},机器2:{5、1},机器3:{2、3、6},最少时间为11C.机器1:{4、7},机器2:{5、1、6},机器3:{2、3},最少时间为9D.机器1:{4、7},机器2:{5、1},机器3:{2、3、6},最少时间为9正确原创 2020-06-06 22:28:04 · 3072 阅读 · 0 评论 -
田忌赛马问题,双方各有5匹马。已知田忌马马速a[5]={92 83 71 65 60},齐威王马的马速b[5]={ 95 87 74 70 59},每赢一场得200银币,问田忌可赢( )银币?贪心算法
田忌赛马问题一、【问题】田忌赛马问题,双方各有5匹马。已知田忌马马速a[5]={92 83 71 65 60},齐威王马的马速b[5]={ 95 87 74 70 59},每赢一场得200银币,问田忌可赢( )银币?A.400B.600C.800D.1000【正确答案】:C二、【问题解析】将a、b数组进行递增排序,采用常识性的贪心思路,分为以下几种情况(1)田忌最快的马比齐威王最快的马快,即a[rithta]>b[rightb],则两者比赛,田忌赢(2)田忌最快的马比齐威原创 2020-06-06 20:04:54 · 693 阅读 · 0 评论 -
动态规划解决愤怒的小鸟问题
愤怒的小鸟一、题目描述:游戏"愤怒的小鸟",各位仙家都玩过了吧,俗话说:“飞得越高,砸得更狠”,各小鸟们在游戏中简直是各显神通,竞相飞得更高,哪怕是粉身碎骨,但求美名留人间。为了获得更高的飞越高度,小鸟们不知从何处得到了一批神力大补丸,吃了这些大补丸将可以帮助小鸟们获得更高的飞行高度。不幸的是,不知道那个该死的叛徒走漏了消息,可恶的绿猪获得了这个情报,于是他们贿赂了当地的一个巫师,希望巫师从中作梗为难小鸟们,于是巫师连夜在这批大补丸上施加了一种可怕的诅咒,就是小鸟们在服用这些大补丸时,当吃到到奇数个大原创 2020-05-20 00:15:28 · 324 阅读 · 3 评论 -
动态规划之求解整数拆分问题 非递归方法以及备忘录方法
求解整数拆分问题一、【问题描述】求将整数无需拆分为最大数为k(称为n的k拆分)的拆分方案个数,要求所有的拆分方案不重复二、【问题求解】设n=5,k=5,对应的拆分方案有①5=5②5=4+1③5=3+2④5=3+1+1⑤5=2+2+1⑥5=2+1+1+1⑦5=1+1+1+1+1该题适合用动态规划求解,设f(n,k)为n的k拆分的拆分方案个数:(1)当n=1,k=1时,显然f...原创 2020-05-01 16:14:14 · 1015 阅读 · 1 评论 -
求解全排列问题(全排列的分治递归实现以及STL工具实现)
【问题描述】对于给定的正整数n(n>=1),求1~n的全排列。【问题求解】解法1:这里采用全排列的递归算法代码实现://产生从元素k~m的全排列,作为前k-1个元素的后缀void Perm(int list[],int k,int m){ if(k==m){ //构成了一次全排列,输出结果 for(int i=0;i<=m;i++) cout<<l...原创 2020-04-30 18:48:29 · 546 阅读 · 0 评论 -
设计一个算法求给定的两个有序序列的中位数 (分治算法)
设计一个算法求给定的两个有序序列的中位数【问题求解】对于含有n个元素的有序序列a[s…t],当n为奇数时,中位数出现在m=a[(s+t)/2]处;当n为偶数时,中位数下标有m=[(s+t)/2]和m=[(s+t)/2]两个。为了简单,这里仅考虑中位数下标为m=[(s+t)/2]利用二分法求含有n个有序元素的序列a、b的中位数的过程如下:(1)分别求出a、b的中位数a[m1]、b[m2]。...原创 2020-04-25 18:27:08 · 2237 阅读 · 0 评论 -
求解0/1背包问题 蛮力法即暴力算法实现
求解0/1背包问题【问题描述】 有n个重量分别为{w1,w2,…,wn}的物品,它们的价值分别为{v1,v2,…,vn},给定一个容量为w的背包,实际从这些物品中选取一部分物品放入该背包的方案,每个物品要么选中要么不选中,要求选中的物品不仅能够放到背包中,而且要具有最大的价值。【问题求解】对于n个物品、容量为w的背包问题,采用前面求幂集的方法求出所有物品组合。对于每一种组合,计算其总重量su...原创 2020-04-20 23:44:53 · 3763 阅读 · 0 评论 -
求解幂集问题 蛮力法即暴力算法 C++/C语言
【问题描述】对于给定的正整数n(n>=1),求1~n构成的所有子集的集合(幂集)解法1:直接采用蛮力法求解,将1~n的存放在数组a中,求解问题变为构造集合a的所有子集。设集合a[0…2]={1,2,3},其所有子集对应的二进制位及其十进制数如下。对于含有n(n>=1)个元素的集合a,求幂集的过程如下:for(i=0;i<2^n;i++){将i转换为二进制数b;输...原创 2020-04-20 23:17:41 · 1806 阅读 · 0 评论 -
求出最大连续子序列和 暴力算法、分治法、动态规划、贪心算法实现;Leecode 51.最大子序和
①蛮力法(即暴力算法)实现:代码实现:int maxSubSum1(int a[],int n){ int i,j,k; int maxSum=0,thisSum; for(i=0;i<n;i++){ for(j=i;j<n;j++){ thisSum=0; for(k=i;k<=j;k++) thisSum+=a[k]; if(this...原创 2020-04-20 18:29:55 · 2044 阅读 · 0 评论