算法

计数DP实例讲解

本篇主要从计数DP上结合实例分析。一、计数类DP——整数划分整数划分大体上可以分为3类(1)考虑顺序的拆分方案(即1,1,2;和2,1,1是两种不同的方案),这种问题一般转化为完全背包即可解决。(2)不考虑顺序的拆分方案,可以划分出空集(也就是可以有对拆分完全没贡献的东西存在(0))(3)不考虑顺序的

什么是后缀数组?

对于后缀数组的概念,很多人都存在疑惑,为什么要学习后缀数组?那么我们就来说说原因,后缀数组是一个比较强大的处理字符串的算法,是有关字符串的基础算法,所以必须掌握。学会后缀自动机(SAM)就不用学后缀数组(SA)了?不,虽然SAM看起来更为强大和全面,

快速排序算法实例详解

1.复杂度与稳定性算法时间复杂度最坏情况:O(n^2)最好情况:O(nlogn)平均情况:O(nlogn)稳定性:不稳定排序2.过程介绍快速排序是考察次数最多的排序,无论是在大学专业课的期末考试,还是在公司的面试测试题目中,快速排序都极大的被使用,

半平面交的定义和解法

一、定义半平面交是什么?我们知道一条直线可以把平面分为两部分,其中一半的平面就叫半平面。那半平面交,就是多个半平面的相交部分。我们在学习线性规划时就有用过。(1)半平面一条直线和直线的一侧。半平面是一个点集,因此是一条直线和直线的一侧构成的点集。

树哈希常用的方式

树哈希,顾名思义,对树进行哈希,经常判断两个树是否同构。一下均为对有根树的算法,而无根树只需要找重心。我们有时需要判断一些树是否同构。这时,选择恰当的哈希方式来将树映射成一个便于储存的哈希值(一般是32位或64位整数)是一个优秀的方案。树哈希有很多种哈希方式,下面将选出几种较为常用的方式来加以介绍。

在线算法和离线算法的区别

本章浅谈一下在线算法,当然,说到在线算法会想到离线算法,这两个概念都会提到,帮助大家理解。(一)在线算法在计算机科学中,一个在线算法是指它可以以序列化的方式一个个的处理输入,也就是说在开始时并不需要已经知道所有的输入。相对的,对于一个离线算法,

枚举算法的思想与实例讲解

枚举算法是我们在日常中使用到的最多的一个算法,本篇将会介绍枚举算法的思想与实例讲解,在使用频率上,枚举算法在蓝桥杯比赛里用的次数非常多,所以需要在平时多练习做题,毕竟实践检验真理,毕竟枚举在考试中出现的频率非常高,可谓是得枚举者得天下,下面我们就来讲讲枚举。

选择排序算法C/C++代码图文讲解

本篇主要简单介绍选择排序,并且通过图片和代码的形式帮助大家理解应用。(1)什么是选择排序?选择排序(Selectionsort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,

二叉树的存储(C语言实现)

二叉树存储1.简介根据前文的介绍,我们知道了二叉树的性值,其就是一种每一个结点中只允许拥有左右孩子(或为空)的树,这种数据结构在我们的实际设计中非常常用,如前文提到的STL中的set集合,其底层就是一颗标准的红黑树(二叉树的一种),我们这里以创建一颗二叉树并实现通过特定的插入顺序和读取顺序达成读取为顺

栈的定义和特点

数据结构的重要部分,栈,栈是OI中常用的一种线性数据结构,请注意,本文主要讲的是栈这种数据结构,而非程序运行时的系统栈/栈空间,大家一定要弄清晰,别混淆了。栈的定义和特点栈(stack)是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。