基本算法入门

1.贪心,递推,基础DP(背包,区间DP,状态压缩DP(去年出了不少于2道铜牌题,看着办))

2.搜索(BFS,DFS,A*,IDA*)

3.单调队列、单调栈的思想,倍增算法(ST表)  (重点左边3个东西在DP优化上的应用,简单讲一下平行四边形法则、斜率优化)

4.线段树,树状数组

5.树(包括并查集,生成树,树的一些经典问题(LCA,这里顺便讲解一下树的深度序列转区间问题),经典计数(树DP))

6.图论基本问题(DAG图的拓扑排序,最短路算法floyd,dijstra,spfa(这里讲一下差分约束和分数规划))

7.匹配(二分图(带权)匹配(主要匈牙利,KM,顺便提及一下HK算法),一般图匹配(提及即可)),重点在二分图各种匹配

8.最大流、最小割(经典模型,棋盘模型要有介绍),上下界提及一下即可

9.简单数学(扩展GCD(解线性方程),中国剩余定理,素数筛法,欧拉定理,欧拉函数)

10.二分(基本的单调性查找,矩阵(快速幂)),三分

11.基础概率模型和高斯消元

12.简单几何(点积,叉积,线段交,凸包等)

13.博弈(nim和模型,其他常见模型,对称性博弈的思想)

14.字符串1(kmp,扩展kmp(z-function),字符串的最小表示,manacher)

15.字符串2:trie树,trie图(ac自动机)

16.字符串3:后缀数组

列出的,可以有侧重点地讲,但是基本概念必须普及。因为是给部分12级以及13级的同学普及算法思想,因此请在每讲结束后,在HUST的VJ上开相应专题的虚拟比赛,要求:入门题有2-3道(模板啥的),后面加上几道进阶题

对于听讲同学的要求,因为基本来说,2-3个专题是一周的,所以入门题必过,进阶题选择做或者不做,但是要求至少有3个专题是深入的。同时,出题者要给出简单题解。

以上是Ly师兄给出的专题要求,这一阶段我打算按照要求一个专题一个专题突破,先把常用的算法和思想有个基本了解,先会做这些专题的基础题,再逐渐过渡到下一步,敬请关注。。。。

时间: 2024-12-10 23:33:35

基本算法入门的相关文章

第二章 算法入门 合并排序

在第二章中难的算法不多,接下来我会把稍微复杂一点的算法整理一下 #include <iostream> using namespace std; void mergeSort(int *A,int left,int mid,int right) { int *L=new int[mid-left+1]; int *R=new int[right-mid+1]; int i,j; for(i=0;i<mid-left+1;i++) { L[i]=A[left+i]; } for (j=0;

算法入门心得

最近看了刘汝佳写的算法入门经典  感觉自己的基础实在太烂了  所以总结了一些我们比较容易犯的错误给大家看看(大牛就不要看了O(∩_∩)O) 1.浮点数:两个整数计算的是浮点数的时候一定要把整数先化为浮点数  5-0.1计算机先把5变5.0之后再进行计算的 2.异或运算:这个是个很神秘的东西如果要在一个数组中找一个只有一个的数那么就可以用异或了 异或也可以用在两个数的交换a = a^b; b = a ^ b; a = a ^ b;就实现转换了 自己异或自己等于0: 3.逻辑运算符都是短路运算符a|

Cordic 算法入门

三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值.这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常是通过从已知值(比如sin(π/2)=1)开始并重复应用半角和和差公式而生成. 现在有了计算机,三角函数表便推出了历史的舞台.但是像我这样的喜欢刨根问底的人,不禁要问计算机又是如何计算三角函数值的呢.最容易想到的办法就是利用级数展开,比如泰勒级数来逼近三角函数,只要项数取得足够多就能以任意的精度来逼

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验.因此,掌握基本的CRC算法应是嵌入式程序员的基本技能.可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式. 其实,在网上有一篇介绍CRC

算法导论(Introduction to Algorithms )— 第二章 算法入门 — 2.1 插入排序

一.插入排序:INSERTION-SORT 1.适用范围: which is an efficient algorithm for sorting a small number of elements. 对于少量元素的排序,插入排序是一种高效的算法. 2.原理: Insertion sort works the way many people sort a hand of playing cards. We start with an empty left hand and the cards

算法入门之快速排序

快速排序原理: 快速排序先把等待排序的集合打乱顺序,把第一个元素作为基准元素,为第二个元素和最后一个元素分配两个指针i和j,如果a[i]小于基准元素则i++,如果a[j]大于基准元素则j--,这样把大于基准元素的a[i]和小于基准元素的a[j]互换,以此类推,最终把基准元素与a[j]相交换,就得到一个a[j]左侧全部小于a[j],右侧全部大于a[j]的一个近似有序数组,然后按照如上步骤重新寻找每个被a[j]分开的数组中的分隔点,最终得到有序数组. 在通用排序中,一般都会选取快速排序来解决问题.

【转】循环冗余校验(CRC)算法入门引导

原文地址:循环冗余校验(CRC)算法入门引导 参考地址:https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks#References  给出了CRC 计算的详细信息.想要深入学习,可以从这个网址开始.尤其是最后给出的 Reference 各个是精品 http://www.zorc.breitbandkatze.de/crc.html 是个非常有用的网站,文中给出的代码都与那里的结果进行了对比 写给嵌入式程序员的循

算法入门——递推

主要思想: 通过已知的条件(已知结果),利用特定的关系,逐步递推(顺推/逆推),直到有解或者无解. 主要分为两种:顺推,从已知条件出发,直至推出解. 逆推,从已知结果出发,直至推出解. 需要注意的:每一递推结果,都是下一步递推的条件. 顺推: 斐波那契数列  F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 实例 兔子的总数有多少? 一对兔子,每月能生一对,而每对兔子3个月后可以生育.求12个月后共有多少兔子. #include<stdio.h> #define

POJ-1061 青蛙的约会-数论扩展欧几里德算法入门及推导

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这