自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【机器学习01】 线性、逻辑回归总结

【机器学习01】 线性、逻辑回归总结本文章基于吴恩达机器学习课程,exp_1、exp_2实验,对实验中线性回归、逻辑回归中的基本步骤、关键算法、python实现代码进行总结。1、导入数据及对数据进行可视化读取数据:pd.read_csv(),绘制散点图:plt.scatter(),绘制直线:plt.plot()2、划分数据集插入行、列:data.insert(),提取行、列数据:data.iloc(),将数据转化为numpy形式:data.values更改数据维度:data.reshape(3,1

2021-10-17 11:40:57 603 31

原创 【复习】分支限界法

#include<stdio.h>#include<stdlib.h>#include<math.h>//做蛋糕#define pai 3int V=0,Q=0;int mins=99999;int h[], r[],v[],s[];void cake(int t) { int n, m; int i; r[0] = m + 1; h[1] = n; if (t = m){ if (V != n * pai) return; Q

2020-12-24 23:02:05 287

原创 【复习】回溯法

#include<stdio.h>#include<stdlib.h>#include<string.h>/*回溯法思路:1 确定解空间树的结构:排列树 or 子集树;m叉树(分两种),n层,mn分别对应题中哪些变量2 确定限界函数:最优解或者限制变量(如最小价格,或者路线是否存在)3 确定可行解,以及更新方式4 确定最终输出,并在设计算法时更新答案(不能忽略)注:解空间树的结构一般有三种: 一种是子集树问题,比如01背包,每次的选择相对独立,互不

2020-12-24 23:01:32 406

原创 【复习】贪心算法

#include<stdio.h>#include<stdlib.h>//贪心算法/*特点:局部最优解也是全局最优解。通过不断的求解局部最优解来求出全局最优解注:邻接矩阵结构体创建*///prim/*先随便从图中选取一条边,然后将该边到其他边的距离进行排序,选择最小的一条边(局部最优解),该边一定是最小生成树的一部分,然后通过原顶点到边距离和新顶点到边的距离对比,更新新顶点到其他顶点的距离,循环此过程。注: 1 表需要初始化 2 如何输出:找到

2020-12-24 22:58:44 180

原创 【复习】递归与分治

#include<stdio.h>#include<stdlib.h>#include<string.h>//二分查找最值int findmax(int a[], int l, int r) { int maxl = a[l], maxr = a[r]; if (l < r) { int mid = (l + r) / 2; maxl = findmax(a, l, mid); maxr = findmax(a, mid + 1, r);

2020-12-24 22:56:06 169

原创 【复习】排序算法

#include<stdio.h>#include<stdlib.h>#include<string.h>//直接插入排序void insertsort(int a[], int n) { int i, j, temp; for (i = 1; i < n; i++) { j = i - 1; temp = a[i]; while (j >= 0 && a[j] > temp) {//temp不是a[i]

2020-12-24 22:54:23 112

原创 【复习】C程序设计

#include<stdio.h>#include<stdlib.h>//2019 2int* sort(int a[], int n, int q, int p) { int temp = a[q - 1], i, j; if (p >= 0) { for (i = n - 1; i >= p + q; i--) a[i + 1] = a[i]; a[p + q] = temp; for (j = q; j <= n; j++)

2020-12-24 22:53:11 169

原创 【复习】链表

#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct patient { int id; int age; struct patient* next;}patient;typedef struct node { int data; struct node* next;}*link;//病人看病,60以上按年龄,相同按等级顺序,60以下按顺序void medic

2020-12-24 22:52:16 98

原创 【复习】动态规划

#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>//20201126总结:/*1 几种递归类模型(动态转移方程): 1 子序列型:一般从两个子序列中求符合条件的子序列,方法是优先考虑以a[i]为结尾的子序列,比大小,或者筛选符合条件的尾结点 最长公共子序列:当最后的子序列相等时,最长=[长度-1]+1 字符串转换:当最后一个字符相等时,只需要考虑前

2020-12-24 22:51:29 121

原创 【复习】动态规划

#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>//20201126总结:/*1 几种递归类模型(动态转移方程): 1 子序列型:一般从两个子序列中求符合条件的子序列,方法是优先考虑以a[i]为结尾的子序列,比大小,或者筛选符合条件的尾结点 最长公共子序列:当最后的子序列相等时,最长=[长度-1]+1 字符串转换:当最后一个字符相等时,只需要考虑前

2020-12-24 22:49:32 147

原创 【复习】二叉树

#include<stdio.h>#include<stdlib.h>//创建二叉树typedef char elemtype;typedef struct node { elemtype data; struct node* lchild, * rchild;}node, * bitree;typedef struct { node* root;}tree;void insert(tree* t, elemtype value) { node* node =

2020-12-24 22:47:46 234 2

原创 【算法分析】动态规划-动态规划解决问题下的算法性质分析

动态规划-一般解题思路分析众所周知,一个算法可以使用动态规划,务必需要满足两个条件,一:最优子结构;二:折叠子问题。本文通过对若干问题使用动态规划算法下的最优子结构和折叠子问题进行综合分析,由简单到复杂,总结出使用动态规划解决问题的一般解题思路。问题一:【青蛙跳格】一只青蛙一次能跳一格或者两格,求青蛙跳到n格有多少种跳法。最优子结构性质:该问题可以转换为求青蛙跳到n格的最多跳法,假设青蛙跳到n-2格有x种跳法,跳到n-1格有y种跳法,则青蛙跳到n格的最多跳法必然包含了max(x)+max(y),假设

2020-12-11 23:33:10 895

原创 【算法导论18】动态规划-骑兵拨号问题

18动态规划-骑兵拨号问题问题描述:有一个骑兵,按照下图移动,将骑兵放置在拨号盘上,接下来,骑兵会移动N-1格,每跳到一个格子就会拨出对应数字,总计N个数字(骑兵原来位置也算一次拨号),求拨出的不同号码次数。问题分析:首先简单分析可知,骑兵在每个原始位置,移动一次所到的位置可以列出,如1只能移动到6、8。而随着步数的增多,骑兵第二步、第三步移动的位置均是原来10个初始位置移动位置的排列组合。换句话说,骑兵移动N次,所拨出的号码,均可以由递推得出,由此想到使用动态规划。下面分析最优子结构性质:可以

2020-12-10 00:51:00 141

原创 【算法导论17】动态规划-最小旅行开销问题

17动态规划-最小旅行开销问题问题描述:给定一个数组,包含的值为一年内需要旅行的日期(以天数为基准),给定三种通行证cost[0],cost[1],cost[2],分别可以使用1天,使用7天,使用30天,设计本年旅行的最小开销出行方式。问题分析:每天都有4中情况:1 当天不出门,则不买票最好。2 当天要出门,则可以买三种类型的票。由于每种票的使用期限不同,因此买每种票对应后面的数天内,可以不需要买票。定义dp[i]为前i天最小出行开销,如果第i天需要出行,则从第i天,分别往前推1、7、30天内的旅

2020-11-10 23:05:08 1332 4

原创 【算法导论16】动态规划-分割数组最大和问题

15 动态规划-分割数组最大和问题问题描述:给定一个数组,对其进行分割,规定分割最大长度不能超过k,并将同一区间内数组的值改为该区间的最大值,请设计分割算法,使得分割出的数组经过改值后,数组和最大。问题分析:首先分析问题,将数组分割成子序列,属于通过子问题来求解,又因为各个数组的分割之间相互影响,因此该问题可以使用动态规划解决。第一步:定义函数模型。定义dp[i]为只考虑前i个数组,其分割数组的最大和。然后考虑递推公式,由于数组分割最大区间为k,因此应该考虑dp[i]与dp[j] (i-j≤k)

2020-11-10 21:56:04 797

原创 【算法导论15】动态规划-石子合并问题

15动态规划-石子合并问题问题描述:n堆石子以直线形式放置,现在要将石子有序的合成为一堆,规定一次只能选择相邻的石子进行合并,合并一次的得分为合并后石子的总数,请设计算法计算对这n堆石子合并后的得分最大值。问题分析:简单对该问题进行分析,该问题属于最优解问题,其次,选择某堆石子进行合并时,会影响到其他石子堆的选择,看起来像是动态规划问题。下面沿着动态规划设计思路展开。第一步:划分阶段。只有一堆石子时候,由于无法合并,所以得分为0;当有两堆石子时,得分只有一个,为两堆石子总数。当有三堆石子时,

2020-10-18 21:45:30 3789

原创 【算法导论14】回溯法—运动员最佳配对问题

14回溯法—运动员最佳配对问题问题描述:羽毛球运动员男女各n人,给定两个n x n矩阵P、Q,P[i][j]是男i和女j组成的男运动员优势,Q[i][j]是女i和男j组成的女运动员优势,P[i][j]不一定等于Q[j][i],男i和女j组成的混合双打优势为P[i]][j]和Q[j][i],设计算法计算男女运动员最佳搭配法,使各组男女双方竞赛优势总和达到最大。问题分析:该问题输出为男女人员的搭配问题,由于运动员不能重复选择,因此此问题的解空间树是一个排列树,可以使用排列树回溯法模板进行算法设计。下面

2020-10-14 22:52:57 3898

原创 【算法导论13】回溯法—最小重量机器设计问题

13回溯法—最小重量机器设计问题问题描述:一个机器有n个零部件组成,每个零部件可以在 m 个不同供应商处获得,不同供应商 i 的不同零件 i 有两个参数,重量 wij,价格 cij,设计算法给出在价格不超过 c 时,最小重量的机器购买设计。问题分析:此问题属于类01背包问题,即在某个变量的限制条件下,另一个变量的最优值问题。首先考虑问题输出,应该为每个零件的供货商编号,如果设为x[i],则此算法最终输出为x[i]的遍历,其中i为第i件零件。现在考虑回溯法的解空间树,因为每个商品可以从m个供货商获

2020-10-14 21:50:02 1545 1

原创 【算法导论12】分支限界法—01背包问题

【算法导论12】分支限界法—01背包问题问题描述:一个背包有固定体积和容量两个参数,针对n件商品,商品包含体积和价值两个参数,如何选择商品的装入,使得背包所装入的总价值最大。问题分析:一个商品有装和不装两种状态,因此此问题的解可以用一颗二叉树来表示,二叉树根节点到叶节点的路径穷举就是所有的选择。在此基础上,再删去不符合条件的结点路线即可。下面对此算法进行优化:考虑三个问题:1、如何确定某个结点选还是不选。2、如何设计算法实现当某个结点已经不符合限制或最优解时,对结点进行剪枝。3、如何设计算法

2020-10-13 22:12:13 9917

原创 【算法导论11】回溯法-符号三角形问题

【11回溯法-符号三角形问题】问题描述:给定一个数字n,求出符合符号三角形的三角形个数,符号三角形的定义为:由+ - 符号构成的倒三角形,同号下方为+,异号下方为-,且+号数量=-号数量的三角形。问题分析:1 该三角形每行个数依次递减,所以总数是等差数列,S = (1+n)*n/2。2 三角形的总数S一定为偶数。3 正负符号的个数一定为S/2。(可行解)4 每个部分符号三角形一定满足:正或负符号个数<S/2。(剪枝函数)算法分析1 首先,分析如果单纯构成全为+的符号三角形如何用递归

2020-08-24 22:46:29 2415

原创 【算法导论10】动态规划-最大字段和

【10动态规划-最大字段和】**问题描述:**给定一个整数数组,包含负数,设计算法求出数组的最大字段和。**问题分析:**此问题较简单,先考虑若数组全为正数,则最大字段和为数组本身累加。当数组中存在负数时,首先仍对数组进行累加,当出现负数时,考虑当前最大字段和加上该负数后是否为正数,如果为正数,则继续执行,若为负数,则全部舍弃此前字段,从下一个数重新开始累加。最大字段和动态规划算法:int max(int *a,int n){ int max=0,b=0,i; for(i=1;i<=n;i

2020-08-15 21:27:42 593

原创 【算法导论09】动态规划-最长公共子序列

【09动态规划-最长公共子序列】问题描述:设现有两个子序列,请设计算法计算其最长公共子序列。问题分析:此问题采用动态规划来解决。动态规划三步骤:1 定义函数dp[i][j]。2 找通项公式(常见dp[i][j]与dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1])之间关系。3 求出初始值。第一步:定义dp[i][j]由于所求为两个序列的最长子序列,因此dp[i][j]可表示为长度为i的A序列以及长度为j的B序列的最长公共子序列,如dp[2][4]表示长度为2的A序列和长度

2020-08-12 21:56:05 171 2

原创 【算法导论08】分支限界法-最大装载问题

08分支限界法-最大装载问题问题描述:已知有一个两个容量为C1,C2的轮船,现有集装箱n个,集装箱体积分别为W1-n,试问两个轮船能否装下所有集装箱,如果能装下,请设计算法计算最佳装载方案。问题分析:此问题为固定容量大小最大装载问题,如果想要判断最大装载能否装下所有集装箱,则首先考虑在C1最大装载的情况下,剩余集装箱能否全部装进C2,因此此问题转化为C1最大装载问题。由于每个集装箱都有装和不装两个选项,所以此问题的解答是一个解空间树,将设计用分支限界法来解决。算法介绍:分支限界法的核心思想是通过

2020-08-06 22:51:11 3495

原创 【算法导论07】回溯法-旅行售货员问题

07回溯法-旅行售货员问题**问题描述:**已知有m个城市,城市之间由n条不同长度的道路相连。一个售货员从一座城市出发,途径所有城市,并最终回到原点,设计算法计算售货员所走的最短路径结点。**问题分析:**从问题不难看出,此问题属于图中的最小哈密顿图问题。最直接的方法便是遍历找出所有能走完全部结点的道路,并选择其中最短的一条路作为答案。已知图的遍历方式有两种,深度遍历和广度遍历。而排列算法有perm算法,因此此处使用深度遍历+perm算法来寻找最小哈密顿图,这两种算法的组合便是回溯法:通过深度搜索来寻找

2020-07-31 20:25:02 10247

原创 【算法导论06】递归算法-perm算法

06递归算法-perm算法问题描述:给定一个含有n个数字的序列,设计算法对该序列进行全排列。思路分析:对n个数字序列进行全排列,最简单的思考方式是将n个数字依次作为序列的开头,得到n个n维序列,并对每个序列的第2个数到第n个数字进行全排列,由此产生递归。算法分析:将数字序列存放于数组A[N]中,每次交换A[0]与Ai,然后对A[1]到A[n-1]序列进行全排列。为了方便,设置参数p,q,表示从p到q的全排列,则每次交换A[p]与A[i],并对剩下序列A[p+1]到A[q]进行全排列,即可完成一次

2020-07-29 22:26:26 1903

原创 【算法导论05】贪心算法-Dijkstra算法

05贪心算法-Dijkstra算法问题描述:请设计一个算法,实现在一个有向图中,给出一个源点,计算该源点到其他所有顶点的单源最短路径。算法描述:Dijkstra算法的目的是寻找单源最短路径,其具有以下最优子结构性质:最短路径上的子路径也是两个顶点的最短路径,此性质可以用cut&paste反证(见笔记),因此,该算法满足贪心算法性质,局部最优解也是全局最优解,属于贪心算法的一种。基于此思想,若想找到源点s到v的最短路径,只需要找到s到u的最短路径+u到v的最短路径。u是s到v最短路径上的一个顶

2020-07-28 22:51:38 1226 1

原创 【算法导论04】贪心算法-kruskal算法

04贪心算法-kruskal算法问题描述:给定一个无向图,设计算法找出其中的最小生成树。思路分析:kruskal算法属于贪心算法,因此满足贪心算法的本质:局部最优解一定是全局最优解。在最小生成树中的应用即为,一个无向图中包含最小权值边点两个点,一定在最小生成树中,因此,只需要对该无项图中的顶点进行排序,按顺序找出边权值最小的顶点即可。但这个问题实际包含了两个问题:1、如何对边进行排序?2、如果新加入的边使得该最小生成树形成回路,如何解决?针对 问题1:对无向图的各个边进行从小到大的堆排序(堆排

2020-07-27 22:21:06 3237

原创 【算法导论03】贪心算法-prim算法

03贪心算法-prim算法问题描述:给出一个带权无向图,请设计一个算法,找出其中的最小生成树。思路分析:贪心算法的本质是:一个问题的局部最优解,也是该问题的全局最优解。接下来来了解一下最小生成树的最优子结构性质:假设一个无向图包含两部分A,B,其中A为最小生成树部分,B为剩余部分,则存在以下性质:该无向图中一个顶点在A部分,另一个顶点在B部分的边中,权值最小的边一定属于整个无向图的最小生成树,即部分最小权值是整个最小生成树的局部最有解,该性质符合贪心算法的特点。基于最小生成树的该性质,使用prim算

2020-07-27 21:18:59 2864

原创 【算法导论02】动态规划-01背包问题

02动态规划-01背包问题问题描述:假设你有一个背包,可以装N个商品,背包总承重为W,现有若干商品,每个商品有两个性质:重量w,价值p。请设计算法使得背包能装载最大价值商品。变量定义:c[i][j]:只考虑前i件商品,背包总体积为j的时候,背包最大装载价值。Wi:第i件商品的重量。Pi:第i件商品的价值。问题答案:c[N][W]思路分析:首先对商品按照性价比(价值/重量)进行排序,最简单思想是按照性价比从高到低进行装包,但这样会存在问题,因为商品不可分,不可能装1.5个商品。所以,应该这样

2020-07-23 22:50:42 809

原创 【算法导论01】动态规划-矩阵连乘

01动态规划-矩阵连乘#include<studio.h>const int N = 7;//矩阵个数//矩阵连乘算法void MatrixChain(int *p,int m[N][N],int s[N][N],int length){ int n = length-1; int l=0,i=0,j=0,k=0,q=0; for(i=1;i<length;i++) m[i][j]==0; for(l=2;l<=n;l++){ //矩阵链的长度,从2开始

2020-07-23 21:32:39 344

空空如也

空空如也

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

TA关注的人

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