随笔分类 - 知识点讲解
摘要:对顶堆详解 我们知道,堆是一种极有用的数据结构。它能在短时间内将数据维护成单调递增/递减的序列。但是这种“朴素堆”对于问题求解起到的效果毕竟是有限的。所以我们在朴素堆的基础上,进行深入思考和适当变形,使之能解决一些其他的用朴素堆解决不了的问题,并使思路变得简洁有效。 这篇随笔就堆中的一个分支——对顶
阅读全文
摘要:DIJ算法的堆优化 DIJ算法的时间复杂度是$O(n^2)$的,在一些题目中,这个复杂度显然不满足要求。所以我们需要继续探讨DIJ算法的优化方式。 堆优化的原理 堆优化,顾名思义,就是用堆进行优化。我们通过学习朴素DIJ算法,明白DIJ算法的实现需要从头到尾扫一遍点找出最小的点然后进行松弛。这个扫描
阅读全文
摘要:最短路算法&模板 最短路问题是图论的基础问题。本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法: Floyd算法、Dijkstra算法及SPFA算法 ,并给出三种算法的模板。流畅阅读本篇博客需要有图论的基础知识,了解什么是图,什么是最短路,以及一些基本语法知识和算法基础。 1、Floyd
阅读全文
摘要:浅谈数据结构——链表 本篇随笔就数据结构——链表进行讲解。链表是一种特别实用的数据结构,我把它理解为 数组的升级版 ,也就是在数组的基础上,它能做到在任意位置添加或者删除元素,而不影响其他元素。链表还是我们进行图论学习时,图的常用存储方式——邻接表(链式前向星)的实现基础。学习链表需要读者具有一定的
阅读全文
摘要:常用的位运算技巧 位运算是很多算法优化的基础和实现的条件,极其重要。理解位运算对于一些算法及其优化有着非常重要的意义。本篇随笔讲解位运算的一些基本原理和常用的使用技巧。 注:本篇随笔的所有“运算”均指二进制下的运算,请大家自行理解。 1、与(&)运算 (1)运算法则 两个二进制数进行与&运算,如果对
阅读全文
摘要:杨辉三角 杨辉三角(欧洲叫帕斯卡三角)是一个很奇妙的东西,它是我国数学家杨辉在1261年发现的,欧洲的帕斯卡于1654年发现,比我国的巨佬数学家杨辉晚了393年。(在此show一下我的爱国情怀) 铺垫知识 (1)二项式系数 二项式系数,定义为$(1+x)^n$展开之后$x$的系数。 通常来讲,二项式
阅读全文
摘要:排列组合问题 这篇随笔讲解信息学奥林匹克竞赛比较常见的一种题型——排列组合问题。阅读并理解本篇随笔要求读者具有不低于高中一年级的数学素养,并且了解信息学中递归、深搜算法的基本实现方式,能理解一般的递归程序。 上课!! 1、排列和组合的定义 (1)排列的定义 从$n$个不同元素中,选出$m$个元素按照
阅读全文
摘要:质数相关知识 本篇随笔讲解信息学奥林匹克竞赛相关数学知识中质数的相关内容,大体包括质数的筛选和判定方法。需要读者具有不低于高中一年级的数学基础知识素养,本篇随笔将不再对数学基本知识、概念及符号等进行讲解。请有需要的同学自行补习。 上课!! 1、质数的定义及基本概念 定义:若一个 正整数 无法被除了1
阅读全文
摘要:0/1分数规划学习笔记 由于模拟赛出了这道题而本蒟蒻对分数规划一无所知,所以痛定思痛地学习分数规划,介绍0/1分数规划的相关知识以及分享本人心中对分数规划的浅薄理解,如有不妥或错误,敬请各路大佬在评论区指正。 ~~(这是我写的最认真的数学笔记)~~ 1、0/1分数规划模型 0/1分数规划模型是指,给
阅读全文
摘要:拓扑排序(topsort)详解 这篇随笔就信息学奥林匹克竞赛中图论的一个知识点——拓扑排序进行讲解。拓扑排序的内容比较基础,只要求读者学习过并了解信息学中图的相关定义和一些专业名词,但是拓扑排序的变形题目比较多,希望读者在看完本随笔后认真体会练习,掌握拓扑排序。 上课! 拓扑排序的定义 顾名思义,这
阅读全文
摘要:重载运算符 这篇随笔我来讲解一下C++语言中重载运算符的相关知识。 一、重载运算符的用途 这是一个比较~~哲学~~的问题:我们为什么要重载运算符? 理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类
阅读全文
摘要:尺取法详解 这节课我们来讲尺取法思想。 上课! 首先, 什么是尺取法? 所谓尺取法,是枚举区间的时候的一种优化思想。我们顾名思义地理解,就像是在一个数轴上,用尺慢慢地取。 用比较学术的话来讲,就是取一对数组下标(即区间左右端点),根据题目要求和实际情况不断地推进左右区间得出答案。 你可能会说,这不就
阅读全文
摘要:简单线段树知识点详解 本篇随笔讲解信息学奥林匹克竞赛中强大且常用的猛士数据结构—— 线段树 。因为线段树博大精深,有许多变形和应用方式。区区一篇随笔是绝对无法尽叙的。所以在这里笔者只为读者讲解简单线段树。希望每一位有缘读到这篇随笔的人都能对线段树有一个深刻的理解,并会解决线段树的简单问题。 由于线段
阅读全文
摘要:求GCD(最大公约数)的两种方式 这篇随笔讲解C++语言程序设计与应用中求GCD(最大公约数,下文使用GCD代替)的两种常用方式:更相减损法和辗转相除法,前提要求是具有小学数学的基本素养,知道GCD是什么,并具有C++的语法基础。 一、更相减损法 两个正整数a和b(a b),它们的最大公约数等于a
阅读全文
摘要:关于SPFA算法的优化方式 这篇随笔讲解信息学奥林匹克竞赛中图论部分的求最短路算法SPFA的两种优化方式。学习这两种优化算法需要有SPFA朴素算法的学习经验。在本随笔中SPFA朴素算法的相关知识将不予赘述。 上课! No.1 SLF优化(Small Label First) 顾名思义,这种优化采用的
阅读全文
摘要:树状数组 树状数组是一种数据结构,它的作用就是优化查询和修改的操作。试想,我们假如在做一道题的时候使用裸的一维数组来存储数据,那每次区间修改需要O(1)的时间,但查询却需要O(n)的时间,针对于某些题目,数据量奇大无比,必然会TLE。所以我们使用树状数组来优化这两个操作,使得修改和查询均可以在O(l
阅读全文