zoukankan      html  css  js  c++  java
  • 学习小结(一) —— 基础数据结构

    1.学习内容#

    主要学习内容为线性数据结构和离散化。知识点有:

    • 队列,栈,链表
    • 双向队列,双向链表
    • 单调队列,单调栈
    • 离散化,Hash

    2.知识小结#

    (1)队列,栈,链表:
      基础的知识就不过多赘述。队列和栈的实现比较容易,链表中指针的操作需要好好理解,实现起来也不会困难。个人认为STL中的队列,栈,链表不宜滥用,它们的时间复杂度较高,但它们使用比较方便,两种方式都应该掌握。

    (2)双向队列,双向链表:
      双向队列是一种双向开口的连续线型空间,可以在队首和队尾进行插入和删除元素的操作。双向队列用STL中的dqueue实现比较方便。
      双向链表的指针域有两个指针,分别指向前驱和后继,可以很方便的访问前驱和后继节点。操作也和普通的链表类似,比较好学。

    (3)单调队列,单调栈:
      单调队列和单调栈是队列(栈)中元素递增或递减的结构。“单调”可以说是一种思想,可以通过维护队列(栈)中元素的单调性来去除多余状态。举个例子:求数列中给定长度区间内的最小值。可以通过维护队列的单调递增,来去除多余的状态,而区间的最小值则是队列在区间上的首元素。

    (4)离散化,Hash:
      数据的离散化是一种处理大数据的方式。通过映射,保留数据的一些性质(我们所研究的性质),将大数据映射为小范围内的数据,从而降低后续操作的复杂度。如10000,9999,1,0 这四个数,如果我们只研究它们的相对大小,我们就可将它们映射为4,3,2,1 。而这个过程的实现比较复杂,但STL给了我们极大的方便,我们可以通过使用STL简短的完成这一过程。代码如下:

    sort(sub, sub + n);  //将数据排序,确定相对大小。
    int size = unique(sub, sub + n) - sub;  //去重函数,去掉重复元素。size为操作后元素个数。
    for(int i = 0; i < n; i++)
        a[i] = lower_bound(sub, sub + size, a[i]) - sub; //赋给数据离散化后的值
    

      Hash可以说是一种空间映射函数。构造函数常见的方法有:直接寻址法,平方取中法,除留余数法,折叠法。Hash冲突是指:有两个及多个元素映射到同一位置,即Hash值相等。处理Hash冲突的常见方法有:链地址法,开放定址法。(有关Hash的内容有很多,就不作详细的介绍了)

    3.题目归纳

    • 链表:lg1996 约瑟夫问题
    • 栈: lg1165 日志分析
    • 队列: lg1683 逛画展
    • 双向链表: lg1160 队列安排
    • 单调队列: bzoj 1012 最大数maxnumber
    • 单调栈: poj2559 Histogram
    • 离散化:NOI2015 程序自动分析机
    • Hash: lg3370 【模板】字符串哈希
  • 相关阅读:
    Django + Uwsgi + Nginx 的概念
    ubantu+nginx+uwsgi+django部署
    FileZilla以root用户登录Linux
    全文检索django-haystack+jieba+whoosh
    七牛云上传视频
    JWT登录与多方式登录
    vue绑定用户页面
    绑定微博用户接口
    vue微博回调空页面
    微博回调接口
  • 原文地址:https://www.cnblogs.com/CrazyDave/p/8337520.html
Copyright © 2011-2022 走看看