- 博客(21)
- 收藏
- 关注
原创 动态规划之数组分组
一个长度为 n 的数组 a,我们可以把它分成任意组,每一组是一段连续的区间。比如数组1,2,3,4,5 可以分成 (1,2),(3,4,5) 两组。每个分组都有一个权值,这个权值就是分组里面每个数的乘积对1000 取模的结果。对于数组 a 的一个分组方案,总权值就是每个分组的权值和。那么对于数组 a,分组以后最大的权值和是多少?输入格式输入第一张一个整数 n(1≤n≤1000)。接下来一行 ...
2019-04-30 21:36:34 1493
原创 一成不变的生活啊
孤独啊,孤独啊。曾经读过一句话:“人生就是一场盛大的孤独”。可以说自从几年或者说自大学以来,我就不时的感受到了孤独。有时候孤独是一件好事,但是有时候是一件坏事,好事是我有了大量可自由支配的时间,我掌控自己的节奏,坏事是当你闲了下来,孤独感就会包围着你。每当晚上从图书馆回寝室时,我走在灯光昏暗的路上,陪伴我的只有自己的忠实的影子。刹那间,我是多么想有个结伴的呀,那怕就是聊聊天气,但是只有一轮明月,静...
2019-04-30 20:43:36 106
原创 常用的数据结构之冒泡排序以及双向冒泡排序
冒泡排序是通过一系列的交换动作来完成的。具体算法void BubbleSort(int a[],int n){ int falg=0; for(int i=n-1;i>=1;i++){ for(j=1;j<=n;j++){ if(a[j]<a[j-1]){ temp=a[j-1]; a[j-1]=a[j]; a[j]=temp...
2019-04-30 20:29:28 1057
原创 常用数据结构之直接插入排序算法
所谓排序就是将原本无序的序列重新排列成有序序列的过程。此次介绍插入类排序。void InsertSort(int R[],int n){ int temp; for(int i=1;i<=n;i++){ temp=R[i]; int j=i-1; while(j>=0&&R[j]<R[i]){ R[j+1]=R[j]; ...
2019-04-30 19:15:19 163
原创 关于理解链式前向星的理解
我们知道存储图可以用邻接表、邻接矩阵等,但是其占用空间大,比较适合于一些小型图。当存储一些大型图即有很多结点时,我们可以考虑用前向星和链式前向星。其中前向星得用到快速排序,其耗费时间稍长,其放在下一回讨论。本次着重讨论链式前向星。链式前向星是基于边集来存储的。对于一条边,其起点为v,其终点为u,其权值为w。我们先定义一边集结构体。struct edges{ int w;//该边的权值 i...
2019-04-25 21:47:47 149
原创 常用的数据结构之迪杰斯特拉算法
通常采用迪杰斯特拉算法来求某一顶点到其余顶点的最小距离。引入了三个数组,dist[],path[],set[].其中dist[]数组是用来存放当前状态下,到该节点的额最小权值。path[]数组是存储了当前结点所连接的前一个结点,也就是记录了当前的路径。而set[]数组是分别有0,1两个值,其中0代表该节点未被并入树中,而1代表该节点已经被并入树中。以下是具体的代码:void Dijk...
2019-04-24 19:28:31 1024
原创 常用数据结构之克鲁斯卡尔算法
克鲁斯卡尔算法需要用到并查集,以及stl中的sort排序。普里姆算法是按照图的顶点来生成最少代价树,而克鲁斯卡尔算法是根据图中的边来生成最小代价树,由于启用了sort排序,所以其适用于比较稀疏的图。以下是代码:#include<iostream>struct Road{ int a,b;//代表此边是连接着a,b结点 int w; //代表该边的权值 };boo...
2019-04-23 20:52:56 441
原创 常用数据结构之普里姆算法
在图中,寻找一棵最小代价的生成树尤为重要。现在有普里姆算法。基于邻接矩阵来实现。void Prim(MGraph g,int v0,int &sum){ int lowcost[maxsize],vset[maxsize],v; int k; int min; int v=v0; for(i=0;i<g.n;i++){///此为初始情况,将v0相接的顶点权值读入low...
2019-04-23 20:07:04 1094
原创 常用数据结构之图的广度搜索
同样本代码所呈现的广度搜索是基于图是用邻接表存储的。其实现广度搜索是需要开一个队列来进行操作,对于C++而言,可以直接使用STL库中的队列。对于C来说,可以开一个数组来模仿队列的操作。代码如下:int visit[maxn];int queue[maxn];int rear=0;int front=0;int j;void BFS(AGraph *G,int v){ Ar...
2019-04-21 19:13:47 233
原创 常用的数据结构之图的深度搜索
此代码所代表的深度搜索是建立在图是用邻接表的存储的!关于邻接表的存储代码见上个文章!以下是代码(写法1):int visit[maxn];ArcNode *p=G->adjlist[v].firstarc;visit[v]=1;void DFS(AGraph * G,ArcNode *&p){ while(p!=NULL){ if(visit[p->...
2019-04-21 17:03:41 494
原创 常用数据结构之图的两种存储方式
图由结点的有穷结合V和边的集合E组成。为了与树形结构进行区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对。若两个顶点之间存在一条边,则表示这两个顶点具有相邻的关系。图通常有两种存储方式,即邻接矩阵和邻接表。下面介绍一下邻接矩阵。设G=(V,E)是具有n个结点的图,顶点序号依次为0,1,2,3、、、n-1。G的邻接矩阵是具有如下定义的方阵A:A[i][j]=1表示顶点i与顶点j邻接...
2019-04-20 10:09:58 3475
原创 三目运算符
三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,所以有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是...
2019-04-18 15:53:45 229
原创 计蒜客之一维消消乐
一维消消乐是一款非常简单的游戏。有 n 颗珠子排成一排,每一颗珠子有一个价值 wi(可能是负数)。游戏是这样,你可以选择如若干对相邻的珠子,让他们同时消去。每一对珠子的消失,都会使得总分数加上两颗珠子相乘的分数。注意,每个珠子只能消一次,并且珠子消去以后,还会占位。输入格式输入第一行一个整数n(1≤n≤10000)。接下来一行输入 n 个整数 (−1000≤ wi ≤1000)。输出格式...
2019-04-17 19:01:14 1234
原创 动态规划入门
要体会到动态规划算法的优点,可以了解一下下面的一个小栗子。第一步已经计算1+1+1=3;第二步,计算1+1+1+1=?不假思索的话,肯定是从一加到底,虽然这样做也对,但是考虑到算法的空间、时间复杂度,再结合第一步可知,应该有一个优化的算法,即直接第一步的结果加一。从一我们要考虑到子问题与重复求解的优化,理解了这一点 ,你就算是入门了。那么下边将专门的介绍动态规划!-------------...
2019-04-16 21:40:13 96
原创 常用数据结构之线索二叉树的中序遍历
此重要介绍中序遍历线索二叉树。代码如下void *First(TBTNode *p){//此函数为寻找中序遍历下的第一个结点。或者是TBTNode *First(TBTNode *p) while(p->ltag==0){//当其有左孩子是一直不断的向左寻找。 p=p->lchild; } return p;}//构造寻找下一个节点的函数。void *Next...
2019-04-16 19:43:42 252
转载 关于void 与void*
void的字面意思是空类型,void *的意思是空类型指针,void 不是一个真正的类型,我们在声明变量的时候从来不会像下面这样声明:void a;如果我们写了一行这样的代码,某些编译器会直接报错,有些则不会,但也没有任何意义。void真正的用途在下面两个方面: 对函数返回值的限定 对函数参数的限定 比如,函数没有返回值,那么函数可能会声明成这样:void f...
2019-04-16 19:35:03 128
原创 常用的数据结构之线索二叉树的构建
1:当使用非递归遍历二叉树时仍要开一个用户栈,而构建了线索二叉树后就不需要再开栈了,可以节省不少空间。因为线索二叉树是用链表储存的,可以非常快的找到前驱或后继节点。首先,中序创建线索二叉树的代码如下。struct TBTNode{ chat data; struct TBTNode *lchild; struct TBTNode*rchild; int ltag;...
2019-04-14 20:56:36 131
原创 常用的数据结构之二叉树的递归与非递归的遍历。
编程光看伪代码是不行滴。理解了一个算法的思路,就转换为自己的风格。就从二叉树的遍历开始吧!1.1前序递归遍序递归代码虽然非常简洁,但是它要调用很多的系统资源,容易爆栈。所以掌握非递归的算法也是很重要的。void preorder(BT*p){ if(p!=NULL){ vist(p); preorder(p->left);//先遍历左子树 preorder(p...
2019-04-13 22:47:59 209
原创 用python处理蛋白质互作信息
水一篇博客f=open('tihuan.txt')#打开文件old_id=[]#定义其为列表new_id=[]dict1={}#其为字典string=[]#其为列表for each_line in f: #对f每行进行遍历 (old,new)=each_line.strip().splist('\t',1)#见注释1 old_id.append(old)#将old元素加入ol...
2019-04-13 10:25:53 1568
原创 如何在notepad++运行python代码
当写一个小的python项目时,打开一个IDE需要很长时间,所以迫切需要找到一个可以编辑加执行并且非常小巧的软件。偶然机会,我发现了notepad++.首先,编写python第一步就是下载python,这里不再详细的叙述。安装notepad++,大概几十mb左右,根据安装向导提示来安装,全部按默任来走。安装完之后,打开notepad++,编写时在工具栏中选择语言,在找到python并点击,这...
2019-04-12 21:37:39 5402
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人