寒假集训总结 -- 1.31 -- liangweihang -- Gaim_

本文是作者liangweihang的寒假集训总结,主要涵盖A进度的分治算法与二分查找,以及数据结构中的队列和栈的概念;B进度则涉及算法复习,包括函数、结构体、常用技巧、高精度、位运算和贪心思想。通过本文,读者可以了解到分治法的基本思想和二分查找的应用,以及队列和栈的基本操作。
摘要由CSDN通过智能技术生成

大家好,欢迎观看我的帖子;

寒假集训结束了,我被迫写了一篇 《寒假集训总结》;

Tip由于,寒假有两个进度, 我就把学到数据结构的一个进度叫A进度,学到递推的一个进度叫

B进度;

A进度 :

  • 分治算法

        分治算是算法中比较重要的思想,所谓分治,就是“分而治之”,就是把一个复杂的问题分成两

个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直

接求解,原问题的解即子问题的解的合并;

        

        分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以

便各个击破,分而治之;

        分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直

接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归

地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法;

        如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解并可利用这些子问题的解求出

原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就

为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致

而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分

治与递归像一对兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法;

而在分治中最重要的思想是什么呢?

没错那就是二分

二分就是在此基础上每次分成等量的两份;

说到二分你们又会想到什么?

二分查找!!!

具体就是实现二分的操作,前面讨论区有神犇说过,我就不多说了;

(只要能背到就没问题)……

  • 数据结构(一部分)

  • 队列(先进先出)

        队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。


队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许

删除的一端称为队头。

        队头(Front):允许删除的一端,又称队首。


        队尾(Rear):允许插入的一端。


        空队列:不包含任何元素的空表。

基本操作:

        InitQueue(&Q):初始化队列,构造一个空队列Q。


        QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。


        EnQueue(&Q, x):入队,若队列Q未满,将x加入,使之成为新的队尾。


        DeQueue(&Q, &x):出队,若队列Q非空,删除队头元素,并用x返回。


        GetHead(Q, &x):读队头元素,若队列Q非空,则将队头元素赋值给x

搞错了不好意思

#include <bits/stdc++.h>
using namespace std;
queue <int> a;
//入列,插入队列的末端。
//q1.push(i);
//访问队列中的元素个数
//n=q1.size();
//back。访问队列尾元素
//m=q1.back();
//访问队列首元素
//e=q1.front(); 
//出列,弹出队列的第一个元素,应注意,并不会返回弹出元素。
//q1.pop();
int main ()
{
	
}

对了,如果要使用自带的建立队列以及操作请认准:#include <queue>

万能头效果更佳

  • 栈(先进后出)

(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性

表只能在某一端进行插入和删除操作。


栈顶(Top):线性表允许进行插入删除的那一端。


栈底(Bottom):固定的,不允许进行插入和删除的另一端。


空栈:不含任何元素的空表。

基本操作:
 

InitStack(&S):初始化一个空栈S。


StackEmpty(S):判断一个栈是否为空,若栈为空则返回true,否则返回false。


Push(&S, x):进栈(栈的插入操作),若栈S未满,则将x加入使之成为新栈顶。


Pop(&S, &x):出栈(栈的删除操作),若栈S非空,则弹出栈顶元素,并用x返回。


GetTop(S, &x):读栈顶元素,若栈S非空,则用x返回栈顶元素。


DestroyStack(&S):栈销毁,并释放S占用的存储空间(“&”表示引用调用)。

 

搞错了,再来

#include <bits/stdc++.h>
using namespace std;
stack <int> a;               //建立一个栈 
int main ()                  //栈的基本使用方法 
{
	int c, b, n;
	scanf ("%d %d %d", &c, &b, &n);
	a.push (c);              //进栈 
	a.push (b);
	a.push (n);
	cout << a.top () << " "; //输出栈顶元素 
	a.pop ();                //出栈 
	cout << a.top () << " ";
	a.pop ();
	cout << a.top () << " ";
}

真不错;

B进度:

总之就是恶补各种以前学过的算法

我这里只给张表,自己看着复习哈 (不负责任地说)

  • 函数:学会自定义函数,分清实参与形参
  • 结构体:学会定义结构体,并会写相关排序的cmp函数
  • 常用技巧:快速幂,辗转相除,埃氏筛
  • 高精度:背多分
  • 位运算:学会善用,巧用位运算,了解其原理
  • 贪心:有这思想就行,注意Johnson算法
  • 递推:找规律,总结递推式与初始条件

啊,肝了两个小时……总算是有个结尾啊

我可能写的有点逊,请见谅。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值