基本算法
文章平均质量分 69
Shiina_Orez
这个作者很懒,什么都没留下…
展开
-
图论--最短路算法
图论图论是OI比赛中最重要的部分 。OI中除了送分题和数论题,基本都是图论的题目。最短路是图论中一个比较核心的问题。在一个图中(有向,无向//有环,无环//有负边权,无负边权)两个点,如何找到一个花费最小的路径呢?在高中我接触到了4个最短路算法:Floyd,Dijkstra,Bellman-Ford,SPFA 今天只打算讲除了Bellman-Ford之外的三个算法。 你都有SPFA了干嘛还要原创 2017-12-07 21:01:37 · 772 阅读 · 0 评论 -
自平衡二叉查找树 -- AVL树 Adelson-Velsky-Landis Tree
平衡还是不平衡,这是一个问题原创 2019-05-08 18:24:37 · 719 阅读 · 0 评论 -
JZC&DSJ机试题目
木犀2018后端组机试题目PART2机试环境:电脑Linux(Ubuntu)python2.7或以上网络(用于传输而并非用于搜索题解)若发现利用网络搜索答案的,直接OUT时长及琐碎事项:本次机试时长为三个半小时期间允许上厕所之类的,包括买水也是可以的完成的题目统一提交到 shiina_orez@qq.com邮件题目:名字首字母大写,如ZMC或者DSJ邮件正文:...原创 2018-09-26 19:05:01 · 297 阅读 · 0 评论 -
树上倍增 and 求LCA
前言:因为HUST校赛所以就要复习一下以前学过的知识,很多以前学过的知识全都忘光了,就很难受,所以慢慢的整理一下;正题:树上倍增以及lca问题什么是lca? 最近公共祖先(Lowest Common Ancestors) 至于定义是什么我不想废话,自行百度吧23333关于求lca,最暴力的办法就是dfs一遍然后找两个节点之间最高的点; 就像两个点一个个地往中间跳一样。一个,一个好慢啊所以我们原创 2018-04-22 22:39:57 · 424 阅读 · 0 评论 -
树点分治--求树的重心
引言在面对一个无根树的时候,我们往往无从下手,便随便挑选一个节点作为根节点进行操作。 这是很不负责的一种行为,因为它可能导致很高的复杂度。比如对于一条链,你选择了两头的结点。。你很有可能面对爆栈的风险(NOIP2016D1T2 = =亲身经历)那么,我们如果把一个很好看的树,比如一个满二叉树,把这个图看成无根图。 你会发现满二叉树的原本的根节点就是最好的选择:它恰巧在整个图的“中央”。...原创 2018-05-19 15:41:43 · 1124 阅读 · 0 评论 -
并查集--Union_Find
并查集–并、查、集。并查集这个名字听上去是不是怪怪的?? 对的,应该是怪怪的才对! 其实是三个汉字拼凑而成的术语23333并–Union:并,指的是合并操作。 即将两个集合合并为一个集合。查–Find:查,指的是查询。 查询一个节点的所属集合。集:集,指的是集合。这样几个概念为什么能够拼凑在一起呢? 我们从并查集最经典的亲戚问题入手:如果你面对一个很大的调查人群,每个人都会告诉你原创 2017-12-06 16:55:12 · 304 阅读 · 0 评论 -
堆--堆排序--heap--heap_sort
堆-Heap(本文特指二叉堆)堆在算法界是一个非常常见的东西23333堆的优点在于它的复杂度,都控制到了O(log 2 n)的级别堆的定义:堆是一个完全二叉树。既去掉最后一行 ,是一棵满二叉树。 堆分为大根堆和小根堆。 大根堆:除根节点外的每一个结点的父亲节点都要不小于结点本身。 小根堆:除根节点之外的每一个结点的父亲结点都要不大于结点本身。构造一个堆:就像是 一个二叉树一样,我们可以用原创 2017-12-06 16:33:50 · 296 阅读 · 0 评论 -
最近公共祖先LCA--Tarjan算法
最近公共祖先 Lowest Common Ancestors在一棵树中,两个结点之间第一个共同的祖先。 如图: 结点10和11的公共祖先有1、7、8、⑨四个节点,但是只有⑨是离其最近的,所以只有⑨是LCA 同理,3和11的LCA即是根节点1。2和4的LCA是2。Tarjan算法:其实讲个道理,我也不知道究竟是不是tarjan算法,因为网上说这个dfs序离线做法不是tarjan啥的,姑且原创 2017-12-06 16:04:44 · 650 阅读 · 0 评论 -
数组模拟链表
链表作为一种数据结构,对于空间的利用率非常之高。但是对于链表没有学好的同学来说,链表难上天了。有没有一种解决方案能实现链表却又不那么难呢?当然有:那就是:数组模拟链表顾名思义,通过一些特殊的方法,可以让数组具有链表的作用。我们先放代码,然后解释原理。int head[maxn],e=0; struct node{ int next; int to; int w;}edge原创 2017-12-05 19:57:23 · 960 阅读 · 0 评论 -
Kruskal和Prim--最小生成树算法
最小生成树:最小生成树是指一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。稀疏图与稠密图的区别:判断标准如下:假设一个图G=(V,E)有n个节点,图G的每个节点的出度是一个固定的常数:k。由于E=kV=O(V) ,所以我们把符合E=O(V) 条件的图称为稀疏图。同理 :如果一个图G=(V,E)有n个节点,假设图G的每个节点的出度原创 2017-12-05 09:30:08 · 447 阅读 · 0 评论 -
二分答案
基本算法 二分答案 《跳石头》这是一道经典题目,出处为noip2015,也就是我参加OI的第一年题目描述:一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。 为了提高比赛难度,组委会计原创 2017-12-04 22:32:16 · 457 阅读 · 0 评论 -
线段树--动态区间查询
前言:现在手上有一个数组a[n],让我们来求一个区间的和 这简直太简单了! 我们写一个前缀和就可以在O(1)解决问题了!问题升级: 有两种操作,一个是修改其中某个变量的值, 另一个是求区间和这。。我只能O(n²)去做了==别怕, 线段树可以解决你的问题。线段树–Segment Tree既然是线段树,那么一定具有一个树的结构。 这个树和其他树不一样,线段树是用来维护我们手中的数组的原创 2017-12-13 17:13:23 · 458 阅读 · 0 评论 -
自由掌控全排列 -- 康托展开 Cantor expansion
全排列一直是一个让人联想到爆炸复杂度的东西如果一件事情牵扯到了全排列,大多数人脑中一定都是这样子的:高中学习的排列组合、排列数、组合数、数不清的阶乘、大学的组合数学等等一系列让人头疼的东西。如果你写过一点点OI相关的题目,或者在Leetcode等网站上刷过题,那么你一定使用过各种语言写过这样的题目:生成全排列。考点大概就是回溯。n的数有n!个全排列,生成的算法也有很多种:字典序法,插入法,邻...原创 2019-05-06 18:32:49 · 502 阅读 · 0 评论