zoukankan      html  css  js  c++  java
  • 2018.4.5课堂笔记

    【trie树】

    trie树
    存在的问题

    1.空间大
    不能用数组存(一般)
    如果字母表特别特别大
    (1.邻接表+hash
    (2.平衡树存字母表

    2.缩编加速
    a->b->c->d----》a->bcd

    【后缀树】

    用Tre来实现kmp的功能

    把文本串的所有后缀建一个trie树
    --》后缀树

    两个后缀的最长公共前缀
    就是后缀树(trie树)中对应叶子节点的lca

    后缀数组,
    把后缀数组放在那,从左往右看每个叶子节点的编号所构成的数组,就是后缀数组

    笛卡尔树

    从后缀数组建后缀树

    后缀数组实际上就是将所有后缀按字典序排序
    如何快速的讲两个后缀数组排序?

    用倍增算法。

    因为很有可能出现大量重复。

    我们可以很轻松的用桶给单个字符排序

    那么同样,我也可以通过已经排好序的单个字符,给长度为二的字符串排序,

    长度为4,长度为8的。。。同理

    所以时间复杂度是O(nlogn)

    这个时间实际上是非常快的

    后缀数组的应用

    (1 求某两个后缀数组的最长公共前缀

    sa[]表示后缀数组(已经排好序的)

    例 :abcabd

          sa[]={1,4,2,5,3,6}

    1 abcabd

    4 abd

    2 bcabd

    5 bd

    3 cabd

    6 d

    hight[n]=sa[n-1]和sa[n+1]的最长公共1前缀

    某两个后缀的最长公共前缀,等于这两个后缀在后缀数组里的排名中间所有的hight的最小值

    如何求hight?

    h表示每一个后缀最多能匹配多少位

    证明:h[i+1]>=h[i]-1;

    h[i]<=1;一定成立

    h[i]>1

    h[i]=hifht[rank[i]]

    【整理】

    sa每一个后缀的编号

    排序后的sa值存进数组

    rank第i个数对应的对应后缀数组中的哪个数

    heght相邻两个后缀数组中的后缀的最长公共前缀

    有一个性质:LCA(i,j)=RMQ(height[rand[i+1],height[rand[j]),求区间最小值

    利用这个性质求出任意后缀的最长公共前缀

     【概率与期望】P(E)

    事件E

    什么情况会出现在你的事件里

    随机变量X

    X=a1,a2,a3,.....,an

    P(X)=ai;

    期望

    平均的取值就是期望

    EX=sigma pi ai  (I=1......n)

    方差=E(X-EX)^2

    DV[X]=1;



    期望的线性性

    E(X+Y)=EX+EY 

    期望的独立性

    x=x1....xn  y=y1......yn

    p(x=xi,y=yi)=p(x=xi)p(y=yi)

    在独立性的前提下

    E(X*Y)=EX*EY 

    注:只有在独立的情况下乘法才能满足线性 
  • 相关阅读:
    No module named '_sqlite3'
    去西交大考PAT认证
    PAT——乙级1006:换个格式输出整数&乙级1021:个位数统计&乙级1031:查验身份证
    Python——数据类型之set
    python——pyinstaller生成exe基本使用和遇到的坑
    PAT——乙级1022:D进制的A+B &乙级1037:在霍格沃茨找零钱
    PAT——乙级1036:跟奥巴马一起编程 &乙级1027:打印沙漏 (有坑)
    Python——数据类型之dict
    为DEV C++/CodeBlock配置gdb调试遇到的问题
    PAT——甲级1012:The Best Rank(有坑)
  • 原文地址:https://www.cnblogs.com/ZDHYXZ/p/8723159.html
Copyright © 2011-2022 走看看