学习算法快一个月啦!

学习目标:学习一些关于算法和数据结构的知识

  • 学习内容:
  • 学习时间:
  • 须知:

学习内容:

主要就是围绕算法竞赛入门经典的紫书和蓝书展开学习的
(标出来的内容都是我感觉比较重要的或者说必须要了解的)

紫书:

1.1 算术表达式
算术运算符,math.h,pow函数(次方函数)
1.2 变量及其输入
scanf和printf,输入输出的向左补0,const,define
1.3 顺序结构程序设计
字符串倒置(reserve函数),两个变量的交换数值
1.4 分支结构程序设计
switch case 条件运算符?
1.5 注释与习题
sin和cos函数
2.1 for循环
continue,break,for的残缺循环
2.2 while循环和do-while 循环
冰雹猜想
2.3 循环的代价
time.h计算代码运行的时间,windows操作系统echo
2.4 算法竞赛中的输入输出框架
(待补充)
2.5 注释与习题
while(循环语句),高精度
3.1 数组
数组的定义,a[n++]=x(一种常用的合并语句),memcpy(复制),memset(赋值),开灯问题,蛇形填数
3.2 字符数组
字符数组定义,gets,puts(不常用),ASCII码sprintf(数字转化为字符串)strlen(求字符数组长度)strchr(查找字符),NULL
3.3 竞赛题目选讲
getchar(输入单一字符),EOF,字符指针数组,ctype.h,isalpha函数,isspace函数,简单函数,环形结构的定义和处理字典序
3.4 注释与习题
周期串,简单宽搜(类似于宽搜的递归,对看懂后面的章节很有帮助),循环小数,子序列,浮点数(很工业的问题)
4.1 自定义函数和结构体
函数,sqrt函数(根号),结构体的简单定义,union(联合体),素数判定函数
4.2 函数调用与参数传递
形参与实参,指针参量数组作为参数通过begin和end指针遍历数组sort函数(排序)
4.3 递归
递归的概念和意义
4.4 竞赛题目选讲
信息解码,数据库的增删改查交换(原理)
4.5 注释与习题
黑白棋(很扎实的模拟题)RAID技术(异或运算,也是很扎实的模拟题),睡觉的学生,数据挖掘(待深入,那道题只是很小的一部分),
5.1 从C到C++
流输入,流输出(这个非常重要,一定要确定自己完全搞懂),名称空间,引用字符串字符串流的定义和用法(后面会经常用)构造函数,运算符重载函数(结构体的深入了解,这里没搞明白,后面就都看不懂了),template模板,(总之这一章节非常关键,是后面的基础)
5.2 STL初步
vector容器(不定长数组)和其中的一些函数,set容器(集合)和一些函数(这个目前来看用的频率是最低的),并集,差集,tolower函数(toupper),STL容器的遍历访问方式(这个非常重要,不会后面就是一把鼻涕一把眼泪),迭代器,map容器(映射)和一些函数,map容器的遍历访问方式(比较特殊),stack容器(栈)和一些函数(栈的重要性不用我说大家都懂),typedef(变量重命名),STL容器定义时的嵌套,queue容器(队列)和一些函数(bfs经常用到这个),priority_queue容器(优先队列)
5.3 应用:大整数类
static静态修饰,构造函数(一种别的方法)多位的字符串转化为若干个数组的技巧(重载=运算符)sscanf(少位的字符串转化为数字),c_str,重载输入和输出,高精度加法,高精度减法,高精度乘以高精度,高精度除以低精度,高精度除以高精度(这里定义了一种别的函数),比较运算符,零碎运算符之间的关系
5.4 竞赛试题选讲
数据库的查找(比较快的做法),关于map的一些实际操作(这个在后面偶尔会用到),=离散化(一种常用的减小数据的做法,有一定的固定格式),unique函数(不严格的去重,不是直接用的,需要封装一下)
5.5 习题
(待补充)
6.1 再谈栈和队列
多线程(待补充),双端队列,可行的出栈序列(思想非常重要,很优雅的代码,个人觉得用到了前面子序列的思想)
6.2 链表
数组实现链表指针实现(我比较喜欢这种,但实际上真正做题用的最多的还是数组法),结点结构体的定义,双向链表,链表的删除和添加
6.3 树和二叉树
树和二叉树的定义,树和二叉树的递归性质(这个非常重要,dfs和bfs说到底就是递归)二叉树结点和一些函数的规范定义(虽然真正做的时候都是随机应变啦),建立树的函数,释放内存函数的编译,层序遍历(重要的不是在二叉树里做层序遍历,而是bfs的思想和处理方法)递归遍历(先序,中序,后序遍历,也就是dfs,主要是理解思想),通过两种宽度优先遍历(中序和后序)的结果得到树(这道题充分反映了树的递归性),四分树(加深了解dfs)
6.4 图
用dfs(其实bfs也可以是吧)求连通块(这个很实用)bfs求最短路(我甚至单独开了一个章节,你觉得重要么),方向数组和函数的定义(一种技巧),判断是否越界的函数(也是一种技巧),回溯父结点去访问得到结果(我自己做的时候是直接存放的路线),拓扑排序(关系矩阵中的传递闭包问题,一个图中存在多个树或者链)
6.5 竞赛题目选讲
离散化bfs求连通块雕塑(主要是这个题处理的非常漂亮)自组合(Warshall算法得到传递闭包,处理得很优雅的一道题),系统依赖(ex的模拟题),paintball(逆向思维)

学习时间:

一些空余时间

须知:

1.首先这个博客是我自己写的用来娱乐和复习,所以描述语言用的都不是非常专业,有些地方甚至会有问题,欢迎大家前来沟通交流。

2.由于是学习算法,所以我用的是 Dev-C++ 5.11,CV的时候请务必注意自己使用的编译器和环境哦

3.因为是自己写的博客,所以比较针对自己的需要,代码的编译习惯可能也比较难懂,有些地方也不是详略有当,请见谅。

4.本人非常讨厌画流程图,所以流程图可能比较少。

5.有些代码是自己编的,有错误欢迎指出

6.由于本人是先学习的c++,并且vs中的编译器,c和c++是通用的,所以博客里面c和c++里面的方法经常会混用在一起

7.单身,好烦= =

你可能感兴趣的:(算法学习,算法)