数据结构&算法
文章平均质量分 78
数据结构&算法
10247D
一只6年级小蒟蒻
展开
-
Prim算法
图的概念与性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!如果在阅读中遇到困难,也可以回到前面章节查阅。原创 2023-01-11 15:48:19 · 2225 阅读 · 0 评论 -
什么是生成树
新农村建设大清都亡了,我们村还没有通网。为了响应国家的新农村建设的号召,村里也开始了网络工程的建设。穷乡僻壤,人烟稀少,如何布局网线,成了当下村委会首个急需攻克的难题。如下图,农户之间的距离随机,建设网线的成本与距离成正比,怎样才能用最少的成本将整个村的农户网络连通呢?思考,如果农户A到农户B,农户B到农户C的网线已经建好了,那农户A和农户C也间接的连通了,不用再建设。每一根线都可以连通2个农户,所以有N个农户,就只需要N-1条网线就可以了。03问题建模将上述问题转化为无向图来表示。原创 2023-01-11 15:43:55 · 234 阅读 · 0 评论 -
次短路问题
第二短的路,可以利用Dijkstra算法求解次短路。原创 2023-01-02 00:00:00 · 216 阅读 · 0 评论 -
分层图最短路问题
一些图论题,比如最短路、网络流等,题目对边的权值提供可选的操作,比如可以将一定数量的边权减半或变为零,在此基础上求解最优解。此时,我们可以利用分层图来解决。原创 2022-12-24 17:42:04 · 156 阅读 · 0 评论 -
动态规划入门
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-11-07 16:36:36 · 104 阅读 · 0 评论 -
第二十八章:解题技巧
哨兵设置“哨兵”,哨兵就是待查值,将它放在查找方向的“尽头”处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。例1(提高效率)假设一个乱序数组,需要查找一个元素是否在该数组中,这时需要用到顺序查找,也就是遍历数组。一般情况下我们会写下如下代码://函数返回在a数组中查找到元素key的下标,若没有找到返回0int Search(int a[],int n,int key){ //假设我们的数组都是从1下标开始存的 int i; fo原创 2021-11-10 20:09:51 · 529 阅读 · 0 评论 -
第四章:字节和位运算
字节和位运算数据是如何存储的?大家都知道在计算机中都是按照二进制存储的,所以大家常说计算机是由0和1组成的。二生万物!我们可以将计算机的存储器想想成下面这样的一个一个的小格子,每个小格子可以存储1位二进制数。例如十进制数字145在二进制存储下应为10010001,它在计算机中存储如下所示:每一个小格子只能有两种状态,要么为0要么为1。这种可以存储1位二进制数的小格子就是计算机中的最小单位,称为一个比特(bit)。 8个比特可以组成一个更大的单位称为字节(Byte) 即∶1字节=8bi..原创 2021-11-11 17:38:02 · 614 阅读 · 0 评论 -
【C++】进制转换
相信在这节课开始之前,很多同学们早就对进制和进制转换比较熟悉了。我们本节课先通过一个利用栈来实现进制转换的例子,带大家再深入的学习下进制和进制转换。例题1:将一个十进制数n转换为二进制数。解题思路:十进制数转换成二进制数,可以采用辗转相除、取余数的方法得到。例如十进制数11转换成二进制。先求余数11%2=1,求商11/2=5,然后再用商5再求其余数,求其商,直到商为0,结束。11%2=1 11/2=5 5%2=1 5/2=22%2=0 2/2=1 1%2=1 1/...原创 2021-10-31 19:31:47 · 1185 阅读 · 0 评论 -
数据结构和算法
1.什么是数据结构?当我们遇到一个实际问题时,首先需要解决两件事:(1)如何将数据存储在计算机中;(2)用什么方法和策略解决问题。前者是数据结构,后者是算法。只有数据结构没有算法,相当于只把数据存储在计算机中,而没有有效的方法去处理,就像一栋只有框架的烂尾楼;若只有算法没有数据结构,就像沙漠里面的海市蜃楼,只不过是空中楼阁罢了。在我们开始学习数据结构和算法之前,我们先从总体上来了解一下什么是数据结构和算法。顾名思义,数据是一切输入计算机中信息的总和,结构是指数据之间的关系。数据结.原创 2021-11-21 12:12:21 · 375 阅读 · 0 评论 -
线性表、栈和队列
什么是线性表?线性表是由n个相同类型的数据元素组成的有限序列,它是最基本的一种线性结构。顾名思义,线性表就像是一条线,不会分叉。线性表有唯一的开始和结束,除了第一个元素外,每个元素都有唯一的直接前驱,除了最后一个元素外,每个元素都有唯一的直接后继。线性表有两种存储方式,分别是顺序存储和链式存储。采用顺序存储的线性表称为顺序表,采用链式存储的线性表称为链表。链表又分为单链表、双向链表和循环链表。顺序表:顺序表采用顺序存储方式,元素存储是连续的,中间不允许有空,因此顺序表可以快速定位是第几个元素,但是插原创 2021-11-21 10:45:43 · 999 阅读 · 0 评论 -
二分查找和二分答案
二分查找二分的思想在程序设计中有着广泛的应用,例如,排序算法中的快速排序、归并排序,数据结构中的二叉树、堆、线段树等。二分是一种常用且高效的算法,它的基本用途是在单调序列中进行查找和判定操作。对于n个有序且没有重复的元素(假设为升序),从中查找特定的某个元素x,我们可以将有序序列分成规模大致相等的两部分,然后取中间元素与要查找的元素x进行比较,如果x等于中间元素,则查找成功,算法终止;如果x小于中间元素,则在序列的前半部分继续查找,否则在序列的后半部分继续查找。这样就可以将查找的范围缩小一半,然后在原创 2021-11-10 20:06:14 · 990 阅读 · 0 评论 -
第三十章:普通树的存储和遍历
前置知识:树的概念、向量(vector)为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标了解树的几种存储方法的思想、实现方式和各自的优缺点 掌握树的存储方法的代码实现 掌握树的两种遍历方式:先根遍历(DFS)和层次遍历方式(BFS)引入显然树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:1)树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。2)树中所有结点可以有零个或多个后...原创 2022-01-02 19:18:24 · 478 阅读 · 0 评论 -
第三十一章:二叉树的概念与性质
前置知识:树的概念与性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!每个结点最多只有两个子结点的有根树称为二叉树。常常对两个子结点的顺序加以区分,分别称之为左子结点和右子结点。大多数情况下,二叉树一词均指有根二叉树。二叉树的性质比较丰富,本章节将介绍二叉树的性质。请熟记这些性质。学习目标熟练掌握二叉树的概念和各种性质 能够综合利用二叉树的各种性质解决一些二叉树中的问题二叉树的概念定义简单地理解,满足以下两个条件的树就是二叉树:树中包含的各个节...原创 2022-01-16 21:04:33 · 238 阅读 · 0 评论 -
分解质因数
题目描述分解质因数是小学数学中常见的问题,现在给定一个正整数N,请你编程序对N分解质因数,并将分解式输出来。输入输出格式输入只有一个正整数N(N<=32767)。输出只有一行,就是N分解成质因子的连乘积的式子,并且要求按因子从小到大从左到右的格式输出。样例输入124输出124=2*2*2*3时间及空间限制1s, 256MB.#include<iostream>using namespace std;int mai原创 2021-12-26 11:04:50 · 990 阅读 · 0 评论 -
[USACO 1.3.2] Barn Repair 修理牛棚
修理牛棚题目描述给出:输入输出格式输出样例输入1输出1时间及空间限制【算法分析】贪心策略:代码题目描述在一个夜黑风高,下着暴风雨的夜晚, farmer John 的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。所有的牛棚有相同的宽度。自门遗失以后, farmer John 必须尽快在牛棚之前竖立起新的木板。他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。 farmer Jo原创 2021-11-22 18:56:55 · 713 阅读 · 0 评论 -
数据结构:八大数据结构分类
数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。1、数组数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。int[] data = new int[100];data转载 2021-12-14 18:16:55 · 294 阅读 · 0 评论 -
2021. 年 安徽省赛小学组真题 异或和
2021. 年 安徽省赛小学组真题 异或和#include<bits/stdc++.h>using namespace std;using LL = long long;int main(){ freopen("xorsum.in","r",stdin); freopen("xorsum.out","w",stdout); LL n; cin >> n; LL a[n]; for(LL i=0;i<n;i++) cin >> a[i]; LL原创 2021-12-14 18:46:38 · 1094 阅读 · 0 评论 -
第三十二章:二叉树的存储与遍历
前置知识:二叉树的概念与性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标 熟练掌握二叉树的存储方式 理解二叉树的三种遍历方式的实现过程 给出一棵二叉树,能够写出对应的三种遍历序列,给出任意两种遍历序列,能够推导并还原出二叉树并写出另外一种遍历序列 掌握三种遍历方式的代码实现,掌握给出两种遍历方式的序列,求第三种遍历序列的代码实现 二叉树的存储二叉树的存储和普通树基本一致。只是由于二叉树中的结点最多只有两个子节点,所以在存储子节.原创 2022-01-16 21:05:46 · 508 阅读 · 0 评论 -
十大排序算法比较
前言在竞赛中,可以使用 C++ STL 的sort函数来直接进行排序(小学阶段足够了),但作为最基本的算法问题之一,各种排序算法中包含了许多二分、分治等重要的算法思想,也是掌握很多其他算法的重要基础。因此,如果想在算法上更加深入地往下学习,那么几种非常重要的排序算法,比如快速排序、归并排序、计数排序等,还是要能够同时掌握其算法思想和代码实现的。下面给出各种经典排序算法的比较:0、排序算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由..原创 2021-11-30 18:46:40 · 1373 阅读 · 0 评论 -
typename
优点:可以用于任何类型存储。原创 2022-09-12 02:00:00 · 66 阅读 · 0 评论 -
二叉树的存储与遍历
学习目标熟练掌握二叉树的存储方式理解二叉树的三种遍历方式的实现过程给出一棵二叉树,能够写出对应的三种遍历序列,给出任意两种遍历序列,能够推导并还原出二叉树并写出另外一种遍历序列掌握三种遍历方式的代码实现,掌握给出两种遍历方式的序列,求第三种遍历序列的代码实现原创 2022-09-24 13:11:29 · 603 阅读 · 0 评论 -
2021 合肥市赛-小学组 题解
1、新冠病毒群体免疫(covid)直接上代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; cout<<round(n*0.75); return 0;}2、整理书本(book)考虑用结构体表示书本(包括书本编号和书本位置两个信息),每次操作只更新书本位置信息,所有操作完毕最后按位置进行排序,输出相应编号即可。 因为原创 2021-11-24 21:14:56 · 1395 阅读 · 0 评论 -
第二十九章:树的基本概念和性质
之前学习了数组、字符串、队列、栈等等数据类型和数据结构,它们都是线性存储结构。本章要学习的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。树结构不论是在竞赛中,还是在实际的工程开发中,都是一类重要的非线性数据结构,树中的节点之间具有明确的层次关系,并且每个节点会“分支”出若干个其他节点。数据结构中的树和现实生活中的树长得一样,只不过我们习惯于处理问题的时候把树根放到上方来考虑。这种数据结构看起来像是一个倒挂的树,因此得名。后面我们提到的树均指数据结构中的树。数据结构中原创 2022-01-02 19:15:23 · 255 阅读 · 0 评论 -
Floyd
Floyd 算法本质是动态规划。原创 2022-12-10 22:10:49 · 57 阅读 · 0 评论 -
BellmanFord算法与SPFA算法
BellmanFord算法与SPFA算法原创 2022-12-10 21:55:17 · 996 阅读 · 0 评论 -
随笔——火车头
火车头原创 2022-12-09 22:05:09 · 81 阅读 · 0 评论 -
STL容器、迭代器
list∶是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小目可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。单链表的结构如下:set 是关联容器的一种,是排序好的集合(元素已经进行了排序),set 中不能有重复的元素。实现原理:采用红黑树结构实现的。所以查找、插入、删除元素的时间复杂度都是O(logn)O(logn)。注意∶不能直接修改 set 容器中元素的值。原创 2022-12-08 21:59:07 · 663 阅读 · 0 评论 -
memset用法 & int、long long、float、double 的极值怎么清
memset 是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部(以字节为单位)设置为指定的值。在竞赛中,常用来进行数组的初始化。memset 函数原型定义如下:Copy正因为 memset 函数是以字节为单位赋值的,所以使用它并不能将数组元素修改为任意值,而竞赛中又常常需要将数组初始化为 0、最大值或最小值。写循环赋值的话,也不是不可以,不过显得不那么“优雅”,针对这一点,下面整理了使用 memset 实现数组初始化的一些常用方法。1、memset 可以对 字符数组 进行赋值吗?可以原创 2022-12-06 22:02:24 · 1888 阅读 · 0 评论 -
并查集和集合
在修建道路时,为了让尽可能多的点连通,需要修建连通两个点的公路,这就需要随时询问两个点是否已经连通。若将已经连通的点看作一个集合,那么修建一条公路的意义,就是合并两个集合,所以如何快速查询两个点是否属于同一个集合,以及快速地合并两个集合,十分重要。集合是由一个或多个确定的元素所构成的整体。集合中的元素有如下 三个特征:确定性:一个元素要么属于集合,要么不属于集合。互异性:集合中的元素互不相同。无序性:集合中的元素没有先后顺序。并查集是一个可以维护集合的数据结构,它能高效支持集合的基本操作:需要注意的是,由于原创 2022-12-07 02:00:00 · 216 阅读 · 0 评论 -
Dijkstra算法
只适用于正权边思想是贪心的思想朴素版Dijkstra 适合稠密图集合S为已经确定最短路径的点集。初始化距离: 1 号结点的距离为零,其他结点的距离设为无穷大(看具体的题)。循环 n 次,每一次将集合 S 之外距离最短 X 的点加入到 S 中去(这里的距离最短指的是距离 1 号点最近。点 X 的路径一定最短,基于贪心,严格证明待看)。然后用点 X 更新 X 邻接点的距离。寻找路径最短的点:O(n^2)O(n2)加入集合S:O(n)O(n)更新距离:O(m)O(m)所以总的时间复杂度为 O(n^2)O(n2)稠原创 2022-12-03 18:33:21 · 222 阅读 · 0 评论 -
二叉树的概念与性质
树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;本身是有序树,即左子树和右子树的顺序不能颠倒,即使只有一棵子树,也要区分是左子树还是右子树。原创 2022-09-24 13:11:03 · 300 阅读 · 0 评论