数据结构和算法
坚持奋斗的李洛克
这个作者很懒,什么都没留下…
展开
-
一维动态规划和二维动态规划中两道经典题目
一维动态规划/*题意:寻找一个数组里最长非降序列的长度,不要求元素位置连续。 要求第i个位置的最长非降序列,如果前面有序列最后一个数不大于seq[i],则把序列长度加1,即为第i个位置的序列长度。如果前面所有序列的最后一个数都大于seq[i],则第i个位置开始一个新的非降子序列,目前长度为1,opt[i]=1转移方程:opt(i)=max(1,opt(j)+1),j<i,seq[j]<seq[原创 2016-06-10 18:58:39 · 4747 阅读 · 0 评论 -
动态规划之0-1背包问题
看了一些背包问题的资料,认为这个讲解比较容易理解。 首先介绍一下 动态规划设计一个动态规划算法,通常可按照以下几个步骤进行: (1) 找出最优解的性质,并刻画其结构特征。 (2) 递归地定义最优解的值 (3) 以自底而上的方式计算出最优值 (4) 根据计算最优值时得到的信息,构造一个最优解。 规划过程的开始,也就是考虑的最后一步,就是边界。比如这里是否装第一个物品,边界就是是否已经装满对转载 2016-06-09 21:33:16 · 1048 阅读 · 0 评论 -
约瑟夫环问题
//约瑟夫环问题 // N个人,编号从1~N围成一圈,输入一个数,从1号开始报数,报到m的人出圈;下一人又从1开始报数,下一个报到m的人出圈,输出出圈顺序。 //怎么找到出圈的数,1)遍历原数组对m求余为0的元素输出,那么循环第二遍数据怎么处理 2)循环计数对m求余或者判断是否相等 //找到出圈的数怎么处理,1)删除,操作麻烦 2)元素标记,循环计数过滤掉此项 //遍历到数组末尾,怎么回到数组开头, 计数对N求余,容易循环取到元素下标 publ...原创 2020-10-19 13:51:48 · 167 阅读 · 0 评论 -
基于DFS的算法题
迷宫寻物: n*m 矩阵中,1表示障碍,0表示通路,起始点任意,假设坐标为(0,0),目标点为(3,2), 找到最短路径到达目标点。 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1这类问题一般使用深度优先搜索(DFS)。其实这个算法是有步骤的。int n,m,p,q,mins=999999;int book[51][51];int a[原创 2016-09-01 21:44:48 · 573 阅读 · 0 评论 -
数据结构之堆排序
堆排序就是利用堆(本文利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(就是将它与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构成一个堆,这样就会得到n个元素中的次小值。如此反复进行,便能得到一个有序序列了。 本程序利用数组存储若干个数据。数组下标从0开始。#include<iostream原创 2016-04-10 23:00:04 · 377 阅读 · 0 评论 -
快速排序算法c++实现
快速排序算法c++实现算法思想:首先任意选取一个数据作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 具体做法是:选取中间的数据作为基准值(平均来说效率更高),并与第一个数据进行交换。然后从左边找比基准值大的数,从右边找比基准值小的数。满足一定条件进行原创 2015-09-07 11:18:21 · 563 阅读 · 0 评论 -
STL vector
前言:vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。原创 2015-11-12 17:35:42 · 539 阅读 · 0 评论 -
c++之逆波兰表达式-stack的运用
1. 逆波兰表达式算法简介将一个普通的中序表达式转换为逆波兰表达式的一般算法是: (1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“@”。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 (4原创 2015-12-27 17:50:38 · 1446 阅读 · 0 评论 -
数据结构之树
数据结构之树树根据实现方式,数据结构可以分为两种类型:基于数组的实现与基于链表的实现。它们都是线性结构。而树是半线性结构。树是由节点和弧组成。形状和现实生活的树不同,是倒立的。节点的层次是从根节点到该节点的路径,或者说层次是该路径上的节点数量。层次其实就是深度。非空树的高度是树中节点的最大层次(深度),即。空树是高度为-1的合法树、单一节点是高度为0 的树(这个定义是根据清华大学邓俊辉版)。 简单原创 2015-09-27 21:15:20 · 670 阅读 · 0 评论 -
数据结构-图
这篇主要介绍图在计算机中存储形式, 以及在某些算法领域中对图的相关应用。本篇涉及到的知识点也比较多在图的遍历中介绍了深度优先遍历、广度优先遍历;在最小生成树节介绍了普利姆算法和克鲁斯卡尔算法;最短路径中介绍了迪杰斯特拉算法、佛洛依德算法;本篇后边还介绍了拓扑排序以及关键路径等知识点。 本篇对算法进行了描述和实现, 在实现代码的同时添加了流程图。相关代码源码请查看文章最后。本篇最后的算法描述和流程图以转载 2016-03-16 22:25:20 · 455 阅读 · 0 评论 -
简单数据结构—队列
队列 是一种线性表,先进先出,准许插入的一端是队尾,原创 2014-05-12 20:13:32 · 1256 阅读 · 1 评论